Thème > Développement

Goo.gl le short url ou url courte de Google

Le short url ou url courte de Google

Suite à la mise en place d'un bouton Tweet, j'ai eu besoin de faire des urls courtes.
Le problème était que je n'avais pas 1 ou 2 urls à raccourcir mais une centaine.
La première expérience fut étudier l'Api Bitly et de créer une petite application Php pour me générer des Bitly short Urls.
Plus tard Google annonce qu'il venait de sortir son propre short Urls : Goo.gl.
Mon idée, c'est qu'un jour les stats des short urls de Google soient dans Google Analytics.
J'ai essayé de faire une petite classe Php (pour remplacer BitlyUrlApi) dont je vous donne la base.
Mais l'Api Goo.gl ne se résume pas à raccourcir les urls, elle vous permet de récupérer les stats.

Documentation API Goo.gl :
http://code.google.com/intl/fr/apis/urlshortener/index.html

Pour utiliser API Goo.gl, il faut un compte Google et faire une demande de clé.
https://code.google.com/apis/console/
Voir le site : http://goo.gl/

Api Goo.gl : une classe d'exemple pour faire une short url

Voici la classe PHP GoogleUrlApi pour récupérer l'url courte ou short url de Goo.gl et inversement de trouver l'url longue à partir d'une url courte de Goo.gl.

Cette classe PhP GoogleUrlApi est très simple, c'est juste une base de départ pour faire votre propre classe Php.

Attention cURL n'est disponible qu'à partir de la versions 4.0.2 de PHP.
Exemple de code :
class GoogleUrlApi {
private $sApiURL;
private $sKey;
public function __construct($sKey, $sApiURL='https://www.googleapis.com/urlshortener/v1/url') {
    $this->sApiURL = $sApiURL ;
$this->sKey = $sKey ;
}
public function shorten($sUrl) {
$response = $this->send($sUrl);
return isset($response['id']) ? $response : false;
}
public function expand($sUrl) {
$response = $this->send($sUrl,false);
return (isset($response['status']) && $response['status']=='OK') ? $response : false;
}
private function send($sUrl, $bShorten = true) {
$ch = curl_init();
if($bShorten) {
curl_setopt($ch, CURLOPT_URL, $this->sApiURL);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(array("longUrl"=>$sUrl,"key"=>$this->sKey)));
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json"));
} else {
curl_setopt($ch, CURLOPT_URL, $this->sApiURL.'?key'.$this->sKey.'&shortUrl='.$sUrl);
}
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
$result = curl_exec($ch);
curl_close($ch);
return json_decode($result,true);
}
}

$key = 'VOTRE_CLE';
$oGoogleUrlApi = new GoogleUrlApi($key);
var_dump($oGoogleUrlApi->shorten('http://www.aliasdmc.com'));
var_dump($oGoogleUrlApi->expand('http://goo.gl/ZreWu'));

Résultats des var_dump :
Exemple de code :
array(3) {
["kind"]=>
string(16) "urlshortener#url"
["id"]=>
string(19) "http://goo.gl/ZreWu"
["longUrl"]=>
string(24) "http://www.aliasdmc.com/"
}
array(4) {
["kind"]=>
string(16) "urlshortener#url"
["id"]=>
string(19) "http://goo.gl/ZreWu"
["longUrl"]=>
string(24) "http://www.aliasdmc.com/"
["status"]=>
string(2) "OK"
}


Documentation Php Curl :
http://www.php.net/manual/en/book.curl.php
Voir le site : http://code.google.com/intl/fr/apis/urlshortener/index.html

Quelques remarques

A mon grand désespoir, les short url ou urls courtes générées par L'API goo.gl n'étaient pas présentes dans les stats affichées sous le formulaire sous goo.gl.
Après quelques recherches, le seul moyen que j'ai trouvé pour accéder aux stats d'une url courte de goo.gl était de mettre + après votre url courte http://goo.gl/ZreWu
Exemple :
Url courte : http://goo.gl/ZreWu
Stats de l'url courte : http://goo.gl/ZreWu+
Stats de l'url courte : http://goo.gl/info/ZreWu

Une autre chose intéressante, c'est qu'en passant par le générateur online; vous pouvez générer plusieurs urls courtes pour une même url, ce qui n'est pas le cas quant on passe par l'Api.

En fait, pour voir apparaitre les short url ou urls courtes dans votre compte Google il faut passer par OAuth 2.0 et vous pourrez télécharger les librairies en fin de pages.

J'ai eu un petit problème pour la librairie PHP, pour 'Installed Application' (application local).
La redirection ne se fait que en localhost mais mon problème c'est que j'ai plusieurs sites en ils ne sont pas en localhost mais en www.MONSITE.loc.
La solution que j'ai trouvé est de mette un identifiant sous forme de répertoire au moment de la déclaration de l'url de redirection.
Exemple de code :
$client->setRedirectUri('http://localhost/MONREP/');

Dans le répertoire de localhost, j'ai mis un .htaccess qui redirige vers une page de mon site local.
Exemple de code :
RedirectPermanent /MONREP/ http://www.MONSITE.loc/oauth2callback.php