2010-07-12 9 views
23

Kennt jemand eine offene RESTful-API, die ich aufrufen kann, um die IP eines Nutzers an die geografische Breite und Länge zu geocodieren?Geocode einer IP-Adresse?

Idealerweise wäre es so etwas wie: http://google.com/geocode_api/?IP=1.2.3.4 und es würde die Breite und Länge zurückgeben.

+0

möglich Duplikat [Wie eine Postleitzahl und Stadt von einer IP-Adresse ermitteln?] (Http : //stackoverflow.com/questions/348614/how-to-determine-a-zip-code-and-city-from-an-ip-address) –

+1

@John Saunder, ist mir eigentlich egal, welche Postleitzahl oder Stadt, in der sich der Benutzer befindet. Ich möchte einfach deren Längen- und Breitengrad wissen, damit ich meine Karte auf ihren Heimatort zentrieren kann. – Tim

+0

Warum denkst du, die Antwort ist anders? Vergeben die referenzierten APIs nicht den Längen- und Breitengrad? –

Antwort

6

Sie könnten den Google-API verwenden: http://code.google.com/apis/ajax/documentation/#ClientLocation

bearbeitet

Beispiel:

<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

Kann ich das verwenden, ohne das gesamte Google Map-Framework zu laden? Wenn ich die Dokumente lese, ist mir unklar, welches Modul google.loader.ClientLocation innerhalb von – Tim

+0

existiert. Es existiert nicht in einem der API-Module, es ist Teil des API Loader-Frameworks. Es ist ein Schwesterbefehl für google.load. – Josiah

+0

Wie kann ich JUST ClientLocation ohne andere Module laden? – Tim

7

hier ein Paar mit einfachen Anrufen ...

Beispiel Anrufe: -

Beispiel für zurückgegebene 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> 
+0

Ab dem 30.12.2014 scheint es so, als ob der freegeoip.net-Dienst nicht mehr funktioniert. Allerdings ist der ipinfodb.com-Dienst immer noch verfügbar, es sieht jedoch so aus, als hätten sie ihre API-URL geändert. – hooknc

+0

Dead Links nicht mehr gültig –

2

Sie können eine kostenlose Geo-Datenbank finden hier immer aktualisiert http://www.maxmind.com/app/geolitecity

und Sie können einen neuen C# Service erstellen, um diese Geo-DB zu verwenden wie http://www.maxmind.com/app/csharp

Sie es online mit unten versuchen Verbindung http://www.maxmind.com/app/lookup_city

+0

nicht von diesen zurückgeben die Lat/Long-Position mit der IP-Adresse –

+0

@ geo171: Ich denke, Sie brauchen eine der folgenden Websites, um die lat/lang Service: http: // api. hostip.info/get_html.php?ip=12.215.42.19&position=true Seiten: 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

Eine andere freie REST API mit Stadt zutreffender Information wäre http://freegeoip.net Anfragen sind ziemlich unkompliziert. Sie wäre so etwas wie

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

eine IP-Adresse geocodiert verwenden, wo Format csv sein kann, xml oder json. Ihre Website hat alle Details.

[UPDATE:] FreeGeoIP.net war in der Vergangenheit nicht kontinuierlich als öffentlicher Dienst verfügbar. Die Software war jedoch immer Open Source und steht unter Github zur Verfügung. Es ist ziemlich einfach, Ihre lokale Installation mit Docker auszuführen, wenn Sie einen sehr zuverlässigen Dienst benötigen oder Ihr Anwendungsfall die aktuelle Quote von 15.000 Anfragen/Stunde überschreitet.

+1

Stand 12/30/2014 scheint es, als ob der freegeoip.net Dienst nicht mehr funktioniert. Der ipinfodb.com-Dienst von Andys Antwort ist jedoch weiterhin verfügbar. – hooknc

+1

Ab dem 20.02.2016 scheint der freegeoip.net-Dienst einwandfrei zu funktionieren. – cengel

+0

Wie kann ich mehrere IP-Adressen an diese Website senden? –

5

Auf meiner Website verwende ich http://ip-api.com/ für den Speicherort von IP-Adresse. Sie haben schöne Grenzen (bis zu 150 Anfrage pro Minute). Ipinfo.io ist kostenlos nur für weniger als 1000 Anfragen pro Tag.

Dies ist Beispielausgabe:

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

Dies ist PHP-Code verwenden können:

$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

Limit ist jetzt 150, und sie verbieten Sie, wenn Sie die Grenzen überschreiten ([Beweis] (http://ip-api.com/docs/)) 'Unser System wird automatisch verbieten jede IP Adressen, die mehr als 150 Anfragen pro Minute ausführen. Um Ihre IP zu entsperren klicken Sie hier. –

+0

tnks @ValentineKonov, Ich habe die Antwort aktualisiert. –

+0

Nur zur Bestätigung: Im Gegensatz zu einigen der oben genannten ist dieser noch in Betrieb. Bietet ziemlich umfassende Feeds. –