Геокодировать IP-адрес?

Кто-нибудь знает о любом открытом RESTful API, который я могу вызвать для геокодирования IP-адреса пользователя по широте и долготе?

В идеале это будет что-то вроде: http://google.com/geocode_api/?IP=1.2.3.4, и оно вернет широту и долготу.

Ответ 1

Еще один бесплатный REST API с точной информацией о городе - http://freegeoip.net. Запросы довольно просты. Вы бы использовали что-то вроде

http://freegeoip.net/{format}/{ip_or_hostname}

геокодировать IP-адрес, где формат может быть csv, xml или json. На их сайте есть все детали.

[ОБНОВЛЕНИЕ:] FreeGeoIP.net не был постоянно доступен в прошлом как общественная служба. Программное обеспечение, однако, всегда было открытым исходным кодом и доступно на Github. Запустить локальную установку с помощью Docker довольно легко, если вам нужен высоконадежный сервис или ваш сценарий использования превышает текущую квоту в 15.000 запросов/час.

Ответ 2

Здесь пара с простыми вызовами...

Примеры вызовов: -

Пример возвращаемого XML (ipinfodb): -

<Response> 
  <Ip>122.169.8.137</Ip> 
  <Status>OK</Status> 
  <CountryCode>IN</CountryCode> 
  <CountryName>India</CountryName> 
  <RegionCode>10</RegionCode> 
  <RegionName>Haryana</RegionName> 
  <City>Kaul</City> 
  <ZipPostalCode></ZipPostalCode> 
  <Latitude>29.85</Latitude> 
  <Longitude>76.6667</Longitude> 
  <Timezone>0</Timezone> 
  <Gmtoffset>0</Gmtoffset> 
  <Dstoffset>0</Dstoffset> 
</Response> 

Ответ 3

Вы можете использовать API google: http://code.google.com/apis/ajax/documentation/#ClientLocation

Edit

Пример:

<script type="text/javascript"
    src="http://www.google.com/jsapi?key=ABCDEFG"></script>
<script type="text/javascript">
google.load("maps", "2.x", {callback: initialize});

function initialize() {
  if (google.loader.ClientLocation) {
      var lat = google.loader.ClientLocation.latitude;
      var long = google.loader.ClientLocation.longitude;
      alert ("lat: " + lat + "\nlong: " + long);
   }
   else { alert ("not available"); }
 }

Ответ 4

На моем сайте я использую http://ip-api.com/ для получения местоположения с IP-адреса. У них хорошие пределы (до 150 запросов в минуту). Ipinfo.io является бесплатным только для менее 1000 запросов в день.

Это пример вывода:

(
    [as] => AS8075 Microsoft Corporation
    [city] => Redmond
    [country] => United States
    [countryCode] => US
    [isp] => Microsoft bingbot
    [lat] => 47.674
    [lon] => -122.1215
    [org] => Microsoft bingbot
    [query] => 157.55.39.67
    [region] => WA
    [regionName] => Washington
    [status] => success
    [timezone] => America/Los_Angeles
    [zip] => 98052
)

Это код PHP, который вы можете использовать:

$ip = $_SERVER['REMOTE_ADDR'];
$result = json_decode(file_get_contents("http://ip-api.com/json/{$ip}"));
//print_r ($result);
echo "{$result->lat},{$result->lon}";//48.156,17.142