Geolocalización de los visitantes de nuestra web

Escrito por el ene 5, 2012 en Programación | 0 comentarios

Geolocalización de los visitantes de nuestra web
{lang: 'es'}

 

En algún momento de nuestro desarrollo en PHP necesitaremos averiguar donde radica nuestro visitante, para en funcion de ello poder ofrecerle productos y/o servicios personalizados.

 ¿Cómo obtener esta información?

Bueno, no es fácil en principio acometer este reto de manera aislada y desde cero, ya que no existe ninguna funcion PHP que nos permita resolver ésto de manera directa.

Partiremos de la base de que sabemos calcular la dirección IP del visitante y suponemos ésta alojada en la variable $ip.

Primera aproximación, realizando una llamada a esta url nos devuelve el código de país con dos letras:

$cc = file_get_contents(“http://geoip.wtanaka.com/cc/{$ip}”);

esto para el caso de España nos devolvería ‘es’ en la variable $cc

puede ser una aproximación interesante para conocer el pais de origen de nuestro visitante. Pero si necesitaramos determinar con más detalle la region/provincia/estado, etc… necesitaríamos información adicional.

Segunda aproximación:

La empresa maxmind comercializa una base de datos para geolocalización con sus respectivos interfaces en php (entre otros), también dispone de versiones libres de las mismas bases de datos (ver http://www.maxmind.com/app/php )

Un ejemplo de utilización de la misma sería tan sencillo como ésto:

include("geoipcity.inc");
include("geoipregionvars.php");
$gi = geoip_open("./GeoLiteCity.dat",GEOIP_STANDARD);
$record = geoip_record_by_addr($gi,$ip);
print "<hr/>".$record->country_code . " " . $record->country_code3 . " " . $record->country_name . "\n<br/>";
print $record->region . " " . $GEOIP_REGION_NAME[$record->country_code][$record->region] . "\n<br/>";
print $record->city . "\n<br/>";
print $record->postal_code . "\n<br/>";
print $record->latitude . "\n<br/>";
print $record->longitude . "\n<br/>";
print $record->metro_code . "\n<br/>";
print $record->area_code . "\n<br/>";
print $record->continent_code . "\n<br/>";
geoip_close($gi);

Podemos verificar los datos aquí http://www.maxmind.com/app/locate_my_ip

, cualquier diferencia seguro es debida a la gratuidad de la base de datos, la cual en su modalidad de pago es mucho mayor y con más detalle.

La tercera aproximación podríamos desarrollarla a partir de la dirección de comprobación que he puesto más arriba, donde una vez cargada nuestra página en el navegador del cliente podríamos por ajax recuperar esa información y parsearla para devolverla a nuestro servidor también por ajax, quizá algo rebuscado, no muy efectivo para soluciones con mucho tráfico en tiempo real, de todas maneras dejo de la mano del lector ahondar en esta material tan apasionante.

Hasta la próxima entrega.

Autor imagen principal: lusi

Deje una respuesta.