Dane geograficzne na podstawie adresu IP w PHP

geolocation

Dzisiejszym wpisem chciałbym Wam pokazać, w jaki sposób uzyskać można dane geograficzne na podstawie adresu IP.

Wykorzystam w tym celu serwis locatorhq.com, który udostępnia API pozwalające na identyfikację danych geograficznych.  Usługa jest darmowa i może z niej skorzystać każdy po założeniu konta.

Początek

Pierwszym krokiem jest rejestracja w serwisie: http://www.locatorhq.com/ip-to-location-api/signup.php poprzez podanie kilku podstawowych danych. Po chwili – na podany adres email przyjdzie wiadomość, której zawarte będą dane – API_KEY i nazwa użytkownika, które będą potrzebne podczas wysyłania zapytań do API.

Użycie

Jeżeli posiadasz już swój API_KEY i nazwę użytkownika, to jesteś w stanie wykonać swoje pierwsze zapytanie do API serwisu.

http://api.locatorhq.com/?user={YOURUSERNAME}
  &key={YOURAPIKEY}&ip={IPADDRESSTOLOOKUP}

, gdzie podać musimy następujące parametry:

  • YOURUSERNAME – nazwa użytkownika
  • YOURAPIKEY – API_KEY otrzymane w email z serwisu po rejestracji
  • IPADDRESSTOLOOKUP – adres IP, który chcemy “sprawdzić”

Istnieje jeszcze 4 parametr, a mianowicie format danych, który ma nam zostać zwrócony po wykonaniu zapytania.

  • &format=text
  • &format=xml
  • &format=json – dostępne wkrótce

Domyślna wartość parametru to: text.

Przykład

Czas na prosty przykład wykorzystania. Sprawdzę w ten sposób adres IP jednego z serwerów Google: 74.125.236.196.

Wykonując:

http://api.locatorhq.com/?user=Username&key=APIKEY&ip=74.125.236.196

otrzymamy taką oto odpowiedź:

US,United States,California,Mountain View,34.305,-86.2981
Kod krajuUS
KrajUnited States
StanCalifornia
MiejscowośćMountain View
Szerokość geograficzna34.305
Długość geograficzna-86.2981 

Parsowanie surowego tekstu nie jest zbyt wygodne, dlatego też wykorzystam format XML do pobrania danych i sparsowania ich po stronie kodu PHP.

Url zapytania będzie miał teraz postać:

http://api.locatorhq.com/?user=Username&key=APIKEY
  &ip=74.125.236.196&format=xml

Otrzymamy w ten sposób odpowiedź o treści:

<ip2locationapi>
  <countryCode>US</countryCode>
  <countryName>United States</countryName>
  <region>California</region>
  <city>Mountain View</city>
  <lattitude>34.305</lattitude
  <longitude>-86.2981</longitude>
</ip2locationapi>

Mając już strukturę XML mogę przejść do właściwego kodu, który będzie w stanie pobrać i sparsować wszystkie dane.

<?php

$ipAddress = $_SERVER['REMOTE_ADDR']; // adres IP
$user = MYUSERNAME;
$apiKey = MYAPIKEY;
$locationUrl = "http://api.locatorhq.com/?user={$user}&key={$apiKey}&ip={$ipAddress}&format=xml";

// pobieramy xml zwrocony przez API LocatorHQ
$xml = simplexml_load_file($locationUrl); 

$countryCode = $xml->countryCode; // kod kraju
$countryName = $xml->countryName; // kraj
$region = $xml->region;           // stan
$city = $xml->city;               // miejscowosc
$lattitude = $xml->lattitude;     // szerokosc geograficzna
$longitude = $xml->longitude;     // dlugosc geograficzna

?>

Już od Was zależy co zrobicie z tym dalej. Możliwości jest jednak wiele.

  • personalizacja naszej strony pod konkretny język
  • analiza wejść na naszą stronę – analiza demograficzna
  • geotargetowanie reklam
  • automatyczne wypełnianie formularzy na podstawie danych geograficznych

To tylko kilka przykładów.

Sama usługa LocatorHQ nie jest idealna. Czasami zwraca ona niepoprawne wyniki. Wszystko zależy tak naprawdę od ustawień sieci, w której znajduje się dany adres IP. API nadaje się jednak świetnie do eksperymentowania z usługami GEO.