Desenvolvimento - PHP
Como encurtar URLs utilizando a API do Google com PHP
Neste artigo vamos aprender a criar um encurtador de url usando o php e a API do Google.
por Thiago BelemUm desses dias eu resolvi fazer uma classe que, creio eu, vai ser útil pra algumas pessoas por ai: uma classe para encurtar URLs utilizando a API do “novo” serviço de encurtamento do Google, o goo.gl .
O código da classe é bem simples:
Listagem 1: Código da Classe
<?php /** * Goo.gl API * * Classe para encurtamento de URL utilizando a API do serviço goo.gl * * @author Thiago Belem <contato@thiagobelem.net> * @link http://blog.thiagobelem.net/ * @version 1.0 */ class Googl { /** * URL da API do Goo.gl * * @var string */ public static $api_url = 'http://goo.gl/api/url'; /** * User usado para acessar a API do Goo.gl * * Este é o user definido pela barra do Google * * @var string */ public static $user = 'toolbar@google.com'; /** * Tempo limite (em segundos) para encurtar a URL * * @var integer */ public static $timeout = 10; /** * Método construtor * * Verifica se existem as funções curl_init() e json_decode() * utilizadas pela classe */ public function __construct() { if (!function_exists('curl_init')) trigger_error('Please, enable the cURL library!'); if (!function_exists('json_decode')) trigger_error('Please, enable the JSON library!'); } /** * Faz uma requisição HTTP utilizando cURL * * @param string $url URL a ser requisitada * @param string $fields Campos a serem passados via POST * @param string $headers Headers adicionais * * @return string O HTML resultado */ public function requestURL($url, $fields = '', $headers = false) { $curl = curl_init($url); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_TIMEOUT, Googl::$timeout); curl_setopt($curl, CURLOPT_USERAGENT, getenv('HTTP_USER_AGENT')); if (!empty($fields)) { curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, $fields); } if ($headers) curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); return curl_exec($curl); } /** * Encurta uma URL utilizando a API do Goo.gl * * @param string|array $url URL a ser encurtada ou array de URLs * a serem encurtadas * * @return string|array URL encurtada ou array de URLs encurtadas */ public function shorten($url) { // Se for um array de URLs age recursivamente if (is_array($url)) { foreach ($url AS &$u) $u = $this->shorten($u); return $url; } // Se for uma URL válida if (filter_var($url, FILTER_VALIDATE_URL, FILTER_FLAG_PATH_REQUIRED)) { // Monta a lista de parâmetros usados pela API $fields = array( 'user' => Googl::$user, 'url' => urlencode($url)); // Converte o array de parâemtros em uma string GET $fields = urldecode(http_build_query($fields, '', '&')); // Se tudo der certo com a chamada à API... if ($result = $this->requestURL(Googl::$api_url, $fields)) { // Decodifica o resultado em jSON $result = json_decode($result); // Se recebeu alguma mensagem de erro, lança um erro if (isset($result->error_message)) trigger_error('[goo.gl] ' . $result->error_message); // Ou retorna a URL encurtada else return $result->short_url; // ...caso contrário, retorna a URL original } else return $url; } } } ?>
Essa classe bem simples possui dois métodos: um para fazer uma requisição HTTP utilizando a biblioteca cURL e outro para encurtar a URL (que utiliza o método de requisição).
O retorno do método Googl::shorten() vai ser a URL encurtada ou um array de URLs encurtadas (caso você passe um array como parâmetro).
Um ponto importante sobre essa classe é a utilização da função filter_var() para verificar se uma URL é válida antes de tentar encurtar ela… Essa é uma função muito útil para verificar o conteúdo de variáveis.
Como usar essa classe?
Veja um exemplo:
Listagem 2: Exemplo de como usar a classe
$Googl = new Googl(); $url = 'http://blog.thiagobelem.net/vida-pessoal/freelancear-ou-nao-freelancear-eis-a-questao-parte-3/'; $url_encurtada = $Googl->shorten($url); echo "<p>URL original: <strong>". $url ."</strong></p>"; echo "<p>URL encurtada: <strong>". $url_encurtada ."</strong></p>"; echo "<p>Diferença: <strong>". (strlen($url) - strlen($url_encurtada)) ."</strong> caracteres</p>";
Como resultado desse exemplo você teria uma URL encurtada economizando 75 caracteres!
Usando uma função pra facilitar as coisas
Você também pode criar uma função que faz o trabalho de instanciar a classe pra você!
Listagem 3: Função de instanciar a classe
/** * Encurta URLs utilizando a classe de API do goo.gl * * @param string|array $url URL a ser encurtada ou array de URLs a serem encurtadas * * @return string|array URL encurtada ou array de URLs encurtadas */ function googl($url) { $Googl = new Googl(); return $Googl->shorten($url); }
Com isso seria só usar:
googl('http://linhadecodigo.com.br/');
Download do código fonte
Caso você tenha preguiça de copiar e colar, pode baixar o arquivo com código fonte dela e sair usando!
Espero que tenham gostado!
Artigo originalmente publicado por Thiago Belem: Encurtando URLs no PHP utilizando a API do goo.gl