Geolocalizar una IP con GeoLite City

GeoLite City es la versión gratuita de Geo City, sirve para conocer la localización aproximada de una IP. Como se puede imaginar, tiene muchas aplicaciones, por ejemplo a partir de los visitantes online en una web tener un mapa o una estadística por países o... Hay que destacar también otra funcionalidad interesante, que es poder consultar la información de un dominio igual que una IP.

Para utilizar este producto, que como es de imaginar tiene menos detalle de datos respecto a la versión de pago, podemos descargarnos los csv y cargarlo en nuestra base de datos, o utilizar un fichero .dat binario con un API open source disponible para varios lenguajes de programación(en mi caso el API Java).

Un ejemplo básico con el API de java, para conocer dónde están los servidores de danilat.com ;):

try {
LookupService cl = new LookupService("mypath/GeoLiteCity.dat", LookupService.GEOIP_MEMORY_CACHE );
//Se podría hacer cl.getLocation de una IP de la misma forma
Location location = cl.getLocation("danilat.com");
System.out.println("País: " + location.countryName +
"\n latitud: " + location.latitude +
"\n longitud: " + location.longitude));
cl.close();
}
catch (IOException e) {
e.printStackTrace();
}

Y ahora un poco de crítica, los atributos de la clase Location están como public(en algunas otras también y en otras usan set/get...), también hay dos clases que sólo tienen métodos estáticos con nombre en minúscula, supongo que para diferenciarlas como clases de utilidades... ¿no sería mejor llamarla por ejemplo TimeZoneUtils que timeZone, y así no salirse de la convención de que los nombres de las clases comiencen con mayúscula?

En conclusión, un producto con funcionalidades interesantes, pero con una implementación del API (de Java) que deberían retocar.