GeoLocalizacion a través de la IP

Miércoles, 18 de Noviembre de 2009

Hoy en una lista de distribución alguien ha hecho una consulta sobre GeoLocalizacion a través de la IP. La verdad es que he hecho muchas pruebas con diferentes entornos de programación utilizando las librerías que proporciona MaxMind. Por eso en este artículo voy a explicar como implementar un sistema de GeoLocalicacion basado en IP usando PHP y Python.

PHP

Empezaremos por PHP ya que quizá sea la opción mas útil y mas fácil de implementar. En esta ruta podéis descargaros las librerías necesarias y algunos ejemplos:

http://geolite.maxmind.com/download/geoip/api/php/

Por tanto para empezar con el ejemplo nos bajaremos los siguientes archivos:
http://geolite.maxmind.com/download/geoip/api/php/geoipcity.inc
http://geolite.maxmind.com/download/geoip/api/php/geoipregionvars.php
http://geolite.maxmind.com/download/geoip/api/php/geoip.inc

También deberemos bajarnos la base de datos donde se encuentran todas las relaciones entre IP y su localización.

http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz

Por tanto copiamos los archivos .inc en nuestra ruta de pruebas /var/www/prueba y extraemos en GeoLiteCity.dat en la misma ruta. Finalmente creamos un GeoipTest.php con el siguiente código:

<?php
include(“geoipcity.inc”);
include(“geoipregionvars.php”);

$ip = $_SERVER['REMOTE_ADDR'];

$gi = geoip_open(“./GeoLiteCity.dat”,GEOIP_STANDARD);
$record = geoip_record_by_addr($gi,$ip);

echo “<br/>”.$record->city;
echo “<br/>”.$record->country_code;
echo “<br/>”.$GEOIP_REGION_NAME[$record->country_code][$record->region];
echo “<br/>”.latitude($record->latitude);
echo “<br/>”.longitude($record->longitude);

?>

Python

La mejor manera de instalar las librerías para python si estáis en un entorno Debian es usar apt-get:

En este caso la instalación guarda los diferentes archivos (librerías y base de datos) en sus rutas por defecto, por tanto nos abstraeremos de esa información (el caso de querer definir una ruta o usar una base de datos determinada usar la definición de GeoIP.Open comentada en el ejemplo).

apt-get install python-geoip

Para usar las librerías usaremos el siguiente ejemplo GeoipTest.py

Import GeoIP

ip =<metodo_para_obtener_ip>
gi = GeoIP.new(GeoIP.GEOIP_MEMORY_CACHE)
# gi = GeoIP.open(“/usr/local/share/GeoIP/GeoIPCity.dat”,GeoIP.GEOIP_STANDARD)
gir = gi.record_by_addr(ip)

if gir != None:
  print gir['city']
  print gir['country_code']
  print gir['region_name']
  print gir['latitude']
  print gir['longitude']

Con este código obtendríamos la misma información que en el caso anterior (con PHP).

Iker Tecnologia , , , ,

  1. Pedro
    Jueves, 10 de Diciembre de 2009 a las 12:23 | #1

    Existen APis para otros lenguajes?

    gracias.

  2. Jueves, 10 de Diciembre de 2009 a las 12:28 | #2

    Aqui tienes un listado de las APis disponibles: Apache, C, C#, Java, MS COM Object, Pascal, Perl, PHP, Python, Ruby y VB.Net

    http://www.maxmind.com/app/mod_geoip

  1. Sin trackbacks aún.