
W celu uzyskania informacji o lokalizacji danego adresu IP można wykorzystać specjalny interfejs API, dostępny pod adresem:
http://api.ip2geo.pl/[FORMAT]/?ip=[IP]
API jest dostępne również po protokole HTTPS.
Parametr [FORMAT] określa rodzaj odpowiedzi serwera - możliwe wartości to:
[CORS] Metoda pozwala na zdalne żądania AJAX, zgodnie z CORS.
[1] Domyślna nazwa to dane. Można ją zmienić przekazując nową nazwę w parametrze var,
np. http://api.ip2geo.pl/js/?var=nowaNazwa.
Nazwa musi spełniać wyrażenie regularne: ^[$a-zA-Z_][0-9a-zA-Z_$]{0,19}$
[2] Domyślna nazwa to callback. Można ją zmienić przekazując nową nazwę w parametrze jsonp,
np. http://api.ip2geo.pl/jsonp/?jsonp=nowaNazwa.
Nazwa musi spełniać wyrażenie regularne: ^[$a-zA-Z_][0-9a-zA-Z_$]{0,19}$
Parametr [IP] określa adres IPv4, dla którego system ma odnaleźć lokalizację.
W przypadku pominięcia pola lub błędnej jego wartości, system zastępuje je adresem IP klienta.
W każdym przypadku API powinno zwrócić kod HTTP 200. Jakikolwiek inny kod winien być traktowany jak błąd - w takim przypadku odpowiedź może nie być we właściwym formacie.
Odpowiedź poprawna zawiera jedno lub więcej pól z poniższej listy, zapisanych w kodowaniu UTF-8:
Jeśli w bazie danych nie odnaleziono wybranego adresu zwracana jest pusta tablica (w przypadku XML - element główny bez potomków).
W przypadku wystąpienia błędu zwracany jest plik z następującymi polami:
Znane kody błędów:
Możliwe odpowiedzi:
Odpowiedź poprawna:
a:4:{s:7:"country";s:2:"PL";s:4:"city";s:6:"Krakow";s:3:"lat";d:50.0833;s:3:"lon";d:19.9167;}
Odpowiedź pusta:
a:0:{}
Błąd:
a:2:{s:7:"errcode";i:0;s:3:"err";s:16:"Nieznany problem";}
Kod podający kraj użytkownika (PHP):
<?php
$dane = unserialize(
file_get_contents(
'http://api.ip2geo.pl/php/?ip='.$_SERVER['REMOTE_ADDR']
)
);
if(isset($dane['country'])) {
echo 'Kraj: '.$dane['country']."\n";
}
?>
Możliwe odpowiedzi:
Odpowiedź poprawna:
<ip2geo>
<country>PL</country>
<city>Krakow</city>
<lat>50.0833</lon>
<lon>19.9167</lat>
</ip2geo>
Odpowiedź pusta:
<ip2geo/>
Błąd:
<ip2geo>
<errcode>0</errcode>
<err>Nieznany problem</err>
</ip2geo>
Kod podający kraj użytkownika (PHP):
<?php
$data = file_get_contents(
'http://api.ip2geo.pl/xml/?ip='.$_SERVER['REMOTE_ADDR']
);
$prevState = libxml_disable_entity_loader(TRUE);
$data = simplexml_load_string($data);
libxml_disable_entity_loader($prevState);
if($data->country) {
echo 'Kraj: '.$data->country."\n";
}
?>
Kod podający kraj użytkownika (JavaScript):
<p>Kraj: <span id="country"></span></p>
<script type="text/javascript">
var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://api.ip2geo.pl/xml/', true);
xhr.onreadystatechange = function (event) {
if (xhr.readyState == 4 && xhr.status == 200 && xhr.responseXML) {
var location = xhr.responseXML.getElementsByTagName('country');
if(location.length > 0) {
document.getElementById('country').appendChild(
document.createTextNode(location[0].textContent)
);
}
}
};
xhr.send();
</script>
Możliwe odpowiedzi:
varOdpowiedź poprawna:
var dane = {"db":"MaxMind","country":"PL","city":"Krakow","lat":"50.0833","lon":"19.9167"};
Odpowiedź pusta:
var dane = [];
Błąd:
var dane = {"errcode":"0","err":"Nieznany problem"};
Kod podający kraj użytkownika (JavaScript):
<p>Kraj: <span id="country"></span></p>
<script type="text/javascript" src="http://api.ip2geo.pl/js/?var=data"></script>
<script type="text/javascript">
if(data['country']) {
document.getElementById('country').appendChild(
document.createTextNode(data['country'])
);
}
</script>
Możliwe odpowiedzi:
Odpowiedź poprawna:
{"country":"PL","city":"Krakow","lat":50.0833,"lon":19.9167}
Odpowiedź pusta:
[]
Błąd:
{"errcode":0,"err":"Nieznany problem"}
Kod podający kraj użytkownika (PHP):
<?php
$data = json_decode(
file_get_contents(
'http://api.ip2geo.pl/json/?ip='.$_SERVER['REMOTE_ADDR']
)
);
if(isset($data->country)) {
echo 'Kraj: '.$data->country."\n";
}
?>
Kod podający kraj użytkownika (JavaScript):
<p>Kraj: <span id="country"></span></p>
<script type="text/javascript">
var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://api.ip2geo.pl/json/', true);
xhr.onreadystatechange = function (event) {
if (xhr.readyState == 4 && xhr.status == 200 && xhr.response) {
var location = JSON.parse(xhr.responseText);
if(location.country) {
document.getElementById('country').appendChild(
document.createTextNode(location.country)
);
}
}
};
xhr.send();
</script>
Możliwe odpowiedzi:
jsonpOdpowiedź poprawna:
callback({"country":"PL","city":"Krakow","lat":50.0833,"lon":19.9167});
Odpowiedź pusta:
callback([]);
Błąd:
callback({"errcode":0,"err":"Nieznany problem"});
Kod podający kraj użytkownika (JavaScript):
<p>Kraj: <span id="country"></span></p>
<script type="text/javascript">
function callback_ip2geo(data) {
if(data['country']) {
document.getElementById('country').appendChild(
document.createTextNode(data['country'])
);
}
}
</script>
<script type="text/javascript" src="http://api.ip2geo.pl/jsonp/?jsonp=callback_ip2geo"></script>
Możliwe odpowiedzi:
Odpowiedź poprawna:
country|PL city|Krakow lat|50.0833 lon|19.9167
Odpowiedź pusta:
Błąd:
errcode|0 err|Nieznany problem
Zabrania się wykorzystywania usługi w celu:
Zastrzegamy sobie prawo ograniczenia ilości odpowiedzi interfejsu API do 1 000 w ciągu 1 dnia dla 1 adresu IP.
© 2015 by Jacekk.net