martes, 31 de julio de 2012

Geolocalización IP con PHP, GeoIP

En está entrada vamos a conocer un poco de la orientación geográfica aprendiendo como mostrar contenido según el país de nuestro visitante validando su IP.  Esto tiene un valor incalculable con técnicas sencillas, podemos orientar publicidad, recopilar estadísticas de uso más preciso, mostrar contenido en diferentes idiomas para diferentes regiones y proporcionar información local, como promociones.    Esto se puede lograr en sencillos pasos, primero reconocemos la GeoIP de nuestro visitante, luego pasamos un código que recorra la base de datos de Maxmind, una de las más completas en versión estandar PHP o en versión PEAR, y lo méjor es Gratis 

La orientación por IP es complicada son base de datos de los bloques de IP por país que requieren de una actualización constante, en este caso Maxmind tiene una oferta actualizada y bastante precisa, tecnología de geolocalización de forma gratuita.

Como usar la base de datos de maxmind


Primero descargamos la base de datos  aquí (Download binary format for use with API code). Descomprimimos el archivo para obtener el archivo  GeoIP.dat.

Aquí encontramos APIs para varios lenguajes para este caso descargamos la que corresponde al lenguaje PHP.  Descargar.  Descomprimimos y buscamos el archivo geoip.inc.

En una carpeta en nuestro servidor incluimos:
  • GeoIP.dat  
  • geoip.inc  
  • index.php (creamos un archivo php para incluir el código de prueba)


Incluimos el siguiente código en el archivo index.php
   

require_once('geoip.inc');

$gi = geoip_open('GeoIP.dat', GEOIP_MEMORY_CACHE);
$country = geoip_country_code_by_addr($gi, $_SERVER['REMOTE_ADDR']);
geoip_close($gi);

print "Estoy en ".$country;




Esto nos debe imprimir como resultado dos letras correspondientes al código ISO del país en el que me encuentro.  Podemos modificar este código de muchas formas, o experimentar con los ejemplos que se incluyen dentro de las descargas anteriores para conocer como sacar el mejor provecho de está herramienta. 



Aquí incluimos una pequeña variación de código, para lograr otro objetivo: 

   

require_once("geoip.inc");

$gi = geoip_open("GeoIP.dat",GEOIP_STANDARD);

$country_code = geoip_country_code_by_addr($gi, $_SERVER['REMOTE_ADDR']);
geoip_close($gi);

if($country_code == 'US')
{
        Código para estados unidos 
}
elseif($country_code == 'MX')
{
        Código para México 
}
elseif($country_code == 'CO')
{
        Código para Colombia 
}
else {
        Código para los demás países 
}



Si al utilizar esté código reciben un mensaje en el servidor como este: Warning: fopen(GeoIP.dat) [function.fopen]: failed to open stream: No such file or directory in /absolute/path/to/geoip.inc on line 399 Can not open GeoIP.dat




Remplace en el código  geoip_open("GeoIP.dat",GEOIP_STANDARD) por  geoip_open("/absolute/path/to/GeoIP.dat",GEOIP_STANDARD);

No hay comentarios:

Publicar un comentario

Desea contactar con nosotros, deje un comentario y pronto le daremos respuesta.