2010-07-12 10 views
23

Qualcuno sa di un'API RESTful aperta che posso chiamare per geocodificare l'IP di un utente alla latitudine e alla longitudine?Geocode un indirizzo IP?

Idealmente, sarebbe qualcosa di simile: http://google.com/geocode_api/?IP=1.2.3.4 e restituirebbe latitudine e longitudine.

+0

possibile duplicato di [Come determinare un codice postale e la città da un indirizzo IP?] (Http : //stackoverflow.com/questions/348614/how-to-determine-a-zip-code-and-city-from-an-ip-address) –

+1

@John Saunder, in realtà non mi interessa quale codice postale o città in cui si trova l'utente. Voglio semplicemente conoscere la loro longitudine e latitudine in modo da poter centrare la mia mappa in modo che si trovi nella loro posizione di origine. – Tim

+0

perché pensi che la risposta sia diversa? Le API di riferimento non restituiscono latitudine e longitudine? –

risposta

6

È possibile utilizzare l'API di Google: http://code.google.com/apis/ajax/documentation/#ClientLocation

Modifica

Esempio:

<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"); } 
} 

+0

Posso usarlo senza caricare l'intero framework di Google Map? Leggendo i documenti, non mi è chiaro quale modulo google.loader.ClientLocation esista all'interno di – Tim

+0

Non esiste all'interno di alcuno dei moduli API, è parte del framework del caricatore API. È un comando sorella per google.load. – Josiah

+0

Quindi, come posso caricare JUST ClientLocation senza altri moduli? – Tim

7

Ecco un paio di semplici chiamate ...

Esempio chiama: -

Esempio di XML restituito (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> 
+0

A partire dal 30/12/2014 sembra che il servizio freegeoip.net non funzioni più. Tuttavia, il servizio ipinfodb.com è ancora disponibile, tuttavia sembra che abbiano cambiato il loro URL api. – hooknc

+0

I dead link non sono più validi –

2

È possibile trovare una banca dati gratuita Geo sempre qui aggiornato http://www.maxmind.com/app/geolitecity

ed è possibile creare un nuovo servizio di C# per utilizzare questa Geo DB come http://www.maxmind.com/app/csharp

si può provare online con sotto link http://www.maxmind.com/app/lookup_city

+0

non restituiscono la posizione lat/long utilizzando l'indirizzo IP –

+0

@ geo171: Penso che sarà necessario uno dei seguenti siti per ottenere il servizio lat/long : http: // api. hostip.info/get_html.php?ip=12.215.42.19&position=true Pagine: http://www.digitalpoint.com/tools/geovis... http://www.geobytes.com/IpLocator.htm http://www.melissadata.com/lookups/iploc... http://www.ip2location.com/free.asp http://www.hostip.info/ http://www.networldmap.com/ TryIt.htm http://www.private.org.il/IP2geo.html http://www.internetfrog.com/ http://webtools.live2support.com/misc_lo... http://www.seomoz.org/ip2loc/ip2loc.php http://www.webyield.net/domainquery.html –

19

Un'altra API REST gratuita con informazioni accurate sulla città sarebbe http://freegeoip.net Le richieste sono abbastanza semplici. Si potrebbe usare qualcosa di simile

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

a geocoding un indirizzo IP, in cui formato può essere csv, xml o json. Il loro sito web ha tutti i dettagli.

[UPDATE:] FreeGeoIP.net non era disponibile in passato come servizio pubblico. Il software, tuttavia, era sempre open source ed è disponibile su Github. È abbastanza facile far funzionare l'installazione locale usando Docker, se hai bisogno di un servizio altamente affidabile o se il tuo caso d'uso supera la quota corrente di 15.000 richieste/ora.

+1

A partire dal 12/30/2014 sembra che il servizio freegeoip.net non funzioni più. Tuttavia, il servizio ipinfodb.com dalla risposta di Andy è ancora disponibile. – hooknc

+1

A partire dal 20/2/2016 il servizio freegeoip.net sembra funzionare correttamente. – cengel

+0

Come posso inviare più indirizzi IP a questo sito Web ?? –

5

Sul mio sito utilizzo http://ip-api.com/ per ottenere la posizione dall'indirizzo IP. Hanno dei bei limiti (fino a 150 richieste al minuto). Ipinfo.io è gratuito solo per meno di 1000 richieste al giorno.

Questo è un esempio di output:

(
    [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 
) 

Questo è il codice PHP è possibile utilizzare:

$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 
+2

Il limite ora è 150, e vieta se superate i limiti ([proof] (http://ip-api.com/docs/)) 'Il nostro sistema vieterà automaticamente qualsiasi IP indirizzi che eseguono oltre 150 richieste al minuto. Per sbloccare il tuo IP clicca qui. –

+0

tnks @ValentineKonov, Ho aggiornato la risposta. –

+0

Giusto per confermare: contrariamente ad alcuni dei sopra elencati questo è ancora attivo e funzionante. Fornisce feed piuttosto completi. –