Je suis à la recherche de conseils pour une API ouverte ou des produits de fête en 3D qui aideront à convertir une adresse IP en code postal et en ville, pour créer un contenu de site Web géo-spécifique.
Ce que j’utilise est ip2nation: http://www.ip2nation.com
C’est une firebase database MySQL entièrement gratuite de mappages IP vers pays. Ils incluent quelques exemples de scripts PHP sur leur site.
Je l’utilise sur mon blog WordPress en même temps que le plugin IP to Nation Word gratuit de Ozh
Même si vous n’utilisez pas WordPress, téléchargez le plug-in car il vous donnera un bon ensemble de code PHP pour accéder à la firebase database. Il a même un joli ensemble de petits drapeaux de pays que vous pouvez afficher à côté ou à la place du nom du pays, ce que je fais pour afficher automatiquement les drapeaux à côté des noms des commentateurs de mon blog.
En réalité, vous n’avez pas besoin d’une API pour cela. Tout ce dont vous avez besoin est la firebase database et la possibilité d’écrire le code PHP et SQL pour y accéder.
Je ne recommanderais pas ip2location pour une utilisation occasionnelle. Ils facturent beaucoup pour leurs bases de données et leurs bases de données sont très volumineuses et ont plus de détails que la plupart des gens en ont besoin.
Mais ip2nation ne va qu’au niveau du pays. Si vous avez besoin de Cities et de Zipcodes (en dépit du fait qu’ils peuvent être erronés, comme d’autres réponses / commentaires l’ont indiqué), en plus de ip2location, vous pouvez essayer GeoBytes . Ils ont des composants spécialement adaptés au contenu de site Web géo-spécifique, tel que GeoSelect: http://www.geobytes.com/GeoSelect.htm
Recherchez également “ip to zipcode” sur Google .
Le mieux (ce qui signifie facile à intégrer et gratuit) que j’ai trouvé est disponible ici . Le service est entièrement gratuit, ne nécessite aucune installation locale et ne vous oblige pas à mettre des bannières sur votre site (par opposition à IP2Location). La seule ressortingction dont ils disposent, la limite de requête, est très raisonnable: vous pouvez lancer une requête toutes les 2 secondes, et même si vous effectuez des requêtes plus fréquentes, vous obtiendrez un résultat un peu plus lent. Prendre plaisir!
IP2Location
J’espère que tous les utilisateurs qui veulent récupérer leur adresse depuis une adresse IP obtiendront une solution appropriée en utilisant ce petit code.
$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 donne beaucoup d’informations sur les adresses IP (Amérique du Nord uniquement), par exemple, http://geocoder.ca/99.229.2.190?geoit=xml (supporte également geoit = json et jsonp)
43.623262 -79.749543 MISSISSAUGA ON L5N7Z9 1837 Samuelson CIR America/Toronto 289 1 Samuelson Cir Stockbridge Crt 43.622696 -79.748706 MISSISSAUGA ON 0.179
Ce qui suit est une version modifiée d’un extrait de code que j’ai trouvé qui utilise http://ipinfodb.com/ip_locator.php pour obtenir ses informations. Gardez à l’esprit que vous pouvez également demander une clé API avec eux et utiliser l’API directement pour obtenir les informations fournies comme vous le souhaitez. Comme vous pouvez le voir sur http://ipinfodb.com/ip_location_api.php , ils ont des exemples dans tout, de PHP à JavaScript, en passant par ASP.Net. Comme indiqué ci-dessous, il n’est pas nécessaire d’avoir une clé pour extraire la page publique et Regex via la page pour obtenir des informations spécifiques. Les clés sont gratuites.
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_ssortingng($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('{City : ([^<]*) }i', $content, $regs)) $araResp['city'] = sortingm($regs[1]); if (preg_match('{State/Province : ([^<]*) }i', $content, $regs)) $araResp['state'] = sortingm($regs[1]); if (preg_match('{Country : ([^<]*)}i', $content, $regs)) $araResp['country'] = trim($regs[1]); if (preg_match('{ Zip or postal code : ([^<]*) }i', $content, $regs)) $araResp['zip'] = sortingm($regs[1]); if (preg_match('{Latitude : ([^<]*) }i', $content, $regs)) $araResp['latitude'] = sortingm($regs[1]); if (preg_match('{Longitude : ([^<]*) }i', $content, $regs)) $araResp['longitude'] = sortingm($regs[1]); if (preg_match('{Timezone : ([^<]*) }i', $content, $regs)) $araResp['timezone'] = sortingm($regs[1]); if (preg_match('{Hostname : ([^<]*) }i', $content, $regs)) $araResp['hostname'] = sortingm($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" }
En Ruby … Ce sont les étapes
gem install geocoder
Dans un script Ruby, ayez ces lignes.
require "geocoder"
puts Geocoder.address('76.95.251.102');
// Change l’adresse IP en conséquence.
output: Bellflower, CA 90706, United States