freegeoip.net est une API REST publique permettant de géolocaliser une adresse IP (ou un nom de domaine). L'API est limitée à 10000 appels par heures (ce qui semble suffisant), cependant, si vous souhaitez outrepasser cette limite, vous pouvez héberger vous-même ce service puisque freegeoip est open source. Vous trouverez les sources sur GitHub.
S'agissant d'un webservice REST, l'utilisation est très simple, il vous suffti d'appeller l'URL suivante :
freegeoip.net/{format}/{ip_ou_nom_de_domaine}
Les formats supportés sont: JSON, CSV, et XML.
Voici un petit snippet permettant d'appeler ce service en CURL:
//test sur une IP de google $api = 'http://freegeoip.net/json/173.194.67.94'; $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $api); curl_setopt($curl, CURLOPT_HEADER, false); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_BINARYTRANSFER, true); curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 5); $data = curl_exec($curl); curl_close($curl);
Voici la chaine JSON récupérée :
{"ip":"173.194.67.94","country_code":"US","country_name":"United States","region_code":"CA","region_name":"California","city":"Mountain View","zipcode":"94043","latitude":37.4192,"longitude":-122.0574,"metro_code":"807","areacode":"650"}
Vous n'avez plus qu'à modifier le code ci-dessus pour l'intégrer dans une fonction et voilà, le tour est joué ! En retournant "json_decode($data)" vous obtiendrez un objet avec les attributs suivants : ip, country_code, country_name, region_code, region_name, city, zipcode, latitude, longitude, metro_code, area_code.
Ce petit service va vous permettre, par exemple, de personnaliser votre site web en fonction de la localisation de vos visiteurs (langue par défaut, indicatif téléphonique, affichage d'un drapeau etc.).