2011-10-14 13 views
21

Stiamo cercando un modo rapido e preciso per ottenere la posizione dei visitatori in base al loro IP.Posizione geografica basata su indirizzo IP - PHP

Abbiamo provato ipinfodb.com ma la loro API ha reso il nostro sito Web molto lento durante la chiamata API.

Quali altri servizi suggerisci?

+0

Eventuali duplicati: [? Cosa esistono servizi che geo-localizza una persona sulla base IP] (http://stackoverflow.com/questions/464142/what-services-exist-that-geo-locates-a -person-based-on-ip) – hakre

+0

possibile duplicato di [Ottieni paese di indirizzo IP con PHP] (http://stackoverflow.com/questions/3650006/get-country-of-ip-address-with-php) –

+0

Checkout https://ipdata.co, un servizio che ho creato con 10 endpoint globali in grado di gestire ogni giorno> 800 milioni di chiamate. È super veloce e ha molti dati rilevanti. – Jonathan

risposta

38

Get Geo-IP Informazioni

chiede una geo-IP-server (netip.de) per controllare, torna in cui un IP si trova (host, stato, paese, città).

<?php 
     $ip='94.219.40.96'; 
     print_r(geoCheckIP($ip)); 
     //Array ([domain] => dslb-094-219-040-096.pools.arcor-ip.net [country] => DE - Germany [state] => Hessen [town] => Erzhausen) 

     //Get an array with geoip-infodata 
     function geoCheckIP($ip) 
     { 
       //check, if the provided ip is valid 
       if(!filter_var($ip, FILTER_VALIDATE_IP)) 
       { 
         throw new InvalidArgumentException("IP is not valid"); 
       } 

       //contact ip-server 
       [email protected]_get_contents('http://www.netip.de/search?query='.$ip); 
       if (empty($response)) 
       { 
         throw new InvalidArgumentException("Error contacting Geo-IP-Server"); 
       } 

       //Array containing all regex-patterns necessary to extract ip-geoinfo from page 
       $patterns=array(); 
       $patterns["domain"] = '#Domain: (.*?)&nbsp;#i'; 
       $patterns["country"] = '#Country: (.*?)&nbsp;#i'; 
       $patterns["state"] = '#State/Region: (.*?)<br#i'; 
       $patterns["town"] = '#City: (.*?)<br#i'; 

       //Array where results will be stored 
       $ipInfo=array(); 

       //check response from ipserver for above patterns 
       foreach ($patterns as $key => $pattern) 
       { 
         //store the result in array 
         $ipInfo[$key] = preg_match($pattern,$response,$value) && !empty($value[1]) ? $value[1] : 'not found'; 
       } 

       return $ipInfo; 
     } 

?> 

Nomsayn?

Se si desidera utilizzare un database questo leader http://www.phpandstuff.com/articles/geoip-country-lookup-with-php

+1

Questo è bello, ma preferirei un database in quanto il nostro sito Web riceve migliaia di richieste e la richiesta IP geo verrà effettuata per caricamento della pagina. – Latox

+2

@latox ho appena aggiornato la mia domanda, dare un'occhiata a quel link dovrebbe essere quello che stai cercando nomsayn? –

+0

@Latox: se si mantiene una cache locale con i risultati delle chiamate API, è sufficiente pagare l'overhead di una chiamata API per ogni nuovo indirizzo IP. Ma il DB nel link qui sopra sembra perfetto per la tua applicazione, a patto che non ti serva una precisione al minuto. – Peter

2

Il mercato in questo spazio e uno che fornisce una soluzione aziendale è Digital Element. Offrono una vasta gamma di API, incluso PHP, per accedere ai loro server che è possibile installare localmente o accedere tramite un servizio web. I loro dati sono di alta qualità e le prestazioni della loro soluzione sono abbastanza buone. MaxMind è un'altra opzione che riceve buone recensioni.

Per la massima accuratezza, è consigliabile optare per un servizio o una soluzione in cui si ottengono aggiornamenti settimanali in quanto questa roba può cambiare un po 'all'interno di una determinata rete. Il costo dipenderà dalla frequenza degli aggiornamenti, dalla granularità dei dati geografici e dal numero di campi o database aggiuntivi desiderati. Alcuni provider offrono lingua, dati demografici, società e dominio per nominarne alcuni.

4

migliori e più recenti è GeoplugginAPI e 'gratuita e senza limitazioni a cui sono abituato a questo mio sito web http://spidersoft.in per il download in base Saperne di più: da questo link

http://geoplugin.com

3

provare questo http://ip.codehelper.io/

Qui è un codice PHP. Il codice memorizzerà automaticamente la richiesta nella cache, quindi il tuo server non invierà più richieste. Restituire Indirizzo IP, Paese, Città e ulteriori informazioni.

<?php 
// Required Libraries 
require_once("ip.codehelper.io.php"); 
require_once("php_fast_cache.php"); 

// New Class 
$_ip = new ip_codehelper(); 

// Detect Real IP Address & Location 
$real_client_ip_address = $_ip->getRealIP(); 
$visitor_location  = $_ip->getLocation($real_client_ip_address); 

// Output result 
echo $visitor_location['Country'].""; 
echo "<pre>"; 
print_r($visitor_location);