Ich suche nach Ratschlägen für Open API- oder 3D-Party-Produkte, die dabei helfen, eine IP-Adresse in eine Postleitzahl und einen Ort umzuwandeln, um geo-spezifische Website-Inhalte zu erstellen.
Was ich benutze, ist ip2nation: http://www.ip2nation.com
Es ist eine vollständig kostenlose MySQL-Datenbank für IP-Adressen zu Ländern. Sie enthalten einige Beispielskripts PHP auf ihrer Site.
Ich verwende es in meinem WordPress-Blog zusammen mit Ozhs kostenlosem IP to Nation WordPress Plugin
Auch wenn Sie nicht mit WordPress arbeiten, laden Sie das Plugin herunter, da Sie einen guten PHP - Code erhalten, mit dem Sie auf die Datenbank zugreifen können. Er hat sogar eine Reihe von kleinen Länderflaggen, die Sie neben oder anstelle des Ländernamens anzeigen können. Dies ist der Fall, bei dem automatisch Markierungen neben den Namen des Kommentars meines Blogs angezeigt werden.
Wirklich, Sie brauchen dafür keine API. Sie benötigen lediglich die Datenbank und die Fähigkeit, den PHP und den SQL-Code für den Zugriff darauf zu schreiben.
Ich würde ip2location nicht für den gelegentlichen Gebrauch empfehlen. Sie verlangen viel für ihre Datenbanken, und ihre Datenbanken sind sehr umfangreich und haben mehr Details, als die meisten Leute benötigen.
Ip2nation geht jedoch nur auf Länderebene. Wenn Sie Städte und Postleitzahlen benötigen (trotz der Tatsache, dass sie, wie andere Antworten/Kommentare angegeben haben, falsch sein können), können Sie zusätzlich zu ip2location GeoBytes ausprobieren. Sie verfügen über Komponenten, die speziell für geo-spezifische Website-Inhalte geeignet sind, wie GeoSelect: http://www.geobytes.com/GeoSelect.htm
Beste (was einfach zu integrieren und kostenlos ist), die ich gefunden habe, ist verfügbar hier . Der Dienst ist vollständig kostenlos, erfordert keine lokalen Installationen und zwingt Sie nicht, Banner auf Ihrer Site zu platzieren (im Gegensatz zu IP2Location). Die einzige Einschränkung, das Abfragelimit, ist sehr vernünftig: Sie können alle 2 Sekunden eine Abfrage auslösen. Selbst wenn Sie häufiger Abfragen machen, werden die Ergebnisse etwas langsamer. Genießen!
IP2Location
Ich hoffe, dass alle Benutzer, die den Standort von der IP-Adresse abrufen möchten, mit diesem kleinen Code eine geeignete Lösung erhalten.
$ip_addr = $_SERVER['REMOTE_ADDR'];
$geoplugin = unserialize( file_get_contents('http://www.geoplugin.net/php.gp?ip='.$ip_addr) );
if ( is_numeric($geoplugin['geoplugin_latitude']) && is_numeric($geoplugin['geoplugin_longitude']) ) {
$lat = $geoplugin['geoplugin_latitude'];
$long = $geoplugin['geoplugin_longitude'];
}
Geocoder.ca gibt viele Informationen für IP-Adressen (nur Nordamerika) ZB http://geocoder.ca/99.229.2.190?geoit=xml (unterstützt auch Geoit = Json und Jsonp)
<result>
<geodata>
<latt>43.623262</latt>
<longt>-79.749543</longt>
<city>MISSISSAUGA</city>
<prov>ON</prov>
<postal>L5N7Z9</postal>
<stnumber>1837</stnumber>
<staddress>Samuelson CIR</staddress>
<TimeZone>America/Toronto</TimeZone>
<AreaCode>289</AreaCode>
<confidence>1</confidence>
<intersection>
<street1>Samuelson Cir</street1>
<street2>Stockbridge Crt</street2>
<lattx>43.622696</lattx>
<longtx>-79.748706</longtx>
<city>MISSISSAUGA</city>
<prov>ON</prov>
<distance>0.179</distance>
</intersection>
</geodata>
</result>
Das Folgende ist eine modifizierte Version eines Ausschnitts, den ich gefunden habe und der http://ipinfodb.com/ip_locator.php verwendet, um seine Informationen abzurufen. Denken Sie daran, Sie können auch einen API-Schlüssel bei ihnen beantragen und die API direkt verwenden, um die Informationen nach Ihren Wünschen zu erhalten. Wie Sie sehen, http://ipinfodb.com/ip_location_api.php , haben sie Beispiele in allem, von PHP über JavaScript bis hin zu ASP.Net. Wie unten erwähnt, ist kein Schlüssel erforderlich, da die öffentliche Seite und Regex durch die Seite gezogen werden, um die angegebenen Informationen zu erhalten. Schlüssel sind kostenlos.
function detect_location($ip=NULL, $asArray=FALSE) {
if (empty($ip)) {
if (!empty($_SERVER['HTTP_CLIENT_IP'])) { $ip = $_SERVER['HTTP_CLIENT_IP']; }
elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; }
else { $ip = $_SERVER['REMOTE_ADDR']; }
}
elseif (!is_string($ip) || strlen($ip) < 1 || $ip == '127.0.0.1' || $ip == 'localhost') {
$ip = '8.8.8.8';
}
$url = 'http://ipinfodb.com/ip_locator.php?ip=' . urlencode($ip);
$i = 0; $content; $curl_info;
while (empty($content) && $i < 5) {
$ch = curl_init();
$curl_opt = array(
CURLOPT_FOLLOWLOCATION => 1,
CURLOPT_HEADER => 0,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL => $url,
CURLOPT_TIMEOUT => 1,
CURLOPT_REFERER => 'http://' . $_SERVER['HTTP_Host'],
);
if (isset($_SERVER['HTTP_USER_AGENT'])) $curl_opt[CURLOPT_USERAGENT] = $_SERVER['HTTP_USER_AGENT'];
curl_setopt_array($ch, $curl_opt);
$content = curl_exec($ch);
if (!is_null($curl_info)) $curl_info = curl_getinfo($ch);
curl_close($ch);
}
$araResp = array();
if (preg_match('{<li>City : ([^<]*)</li>}i', $content, $regs)) $araResp['city'] = trim($regs[1]);
if (preg_match('{<li>State/Province : ([^<]*)</li>}i', $content, $regs)) $araResp['state'] = trim($regs[1]);
if (preg_match('{<li>Country : ([^<]*)}i', $content, $regs)) $araResp['country'] = trim($regs[1]);
if (preg_match('{<li>Zip or postal code : ([^<]*)</li>}i', $content, $regs)) $araResp['Zip'] = trim($regs[1]);
if (preg_match('{<li>Latitude : ([^<]*)</li>}i', $content, $regs)) $araResp['latitude'] = trim($regs[1]);
if (preg_match('{<li>Longitude : ([^<]*)</li>}i', $content, $regs)) $araResp['longitude'] = trim($regs[1]);
if (preg_match('{<li>Timezone : ([^<]*)</li>}i', $content, $regs)) $araResp['timezone'] = trim($regs[1]);
if (preg_match('{<li>Hostname : ([^<]*)</li>}i', $content, $regs)) $araResp['hostname'] = trim($regs[1]);
$strResp = ($araResp['city'] != '' && $araResp['state'] != '') ? ($araResp['city'] . ', ' . $araResp['state']) : 'UNKNOWN';
return $asArray ? $araResp : $strResp;
}
detect_location();
// returns "CITY, STATE" based on user IP
detect_location('xxx.xxx.xxx.xxx');
// returns "CITY, STATE" based on IP you provide
detect_location(NULL, TRUE); // based on user IP
// returns array(8) { ["city"] => "CITY", ["state"] => "STATE", ["country"] => "US", ["Zip"] => "xxxxx", ["latitude"] => "xx.xxxxxx", ["longitude"] => "-xx.xxxxxx", ["timezone"] => "-07:00", ["hostname"] => "xx-xx-xx-xx.Host.name.net" }
detect_location('xxx.xxx.xxx.xxx', TRUE); // based on IP you provide
// returns array(8) { ["city"] => "CITY", ["state"] => "STATE", ["country"] => "US", ["Zip"] => "xxxxx", ["latitude"] => "xx.xxxxxx", ["longitude"] => "-xx.xxxxxx", ["timezone"] => "-07:00", ["hostname"] => "xx-xx-xx-xx.Host.name.net" }
In Ruby ... Dies sind die Schritte
gem install geocoder
installierenIn einem Ruby-Skript haben Sie diese Zeilen.
require "geocoder"
puts Geocoder.address('76.95.251.102');
// Ändern Sie die IP-Adresse entsprechend.
output:
Bellflower, CA 90706, United States