Friday, June 23, 2006

Mapa de Hits




Mapa de Hits


Este es un prototipo que utiliza las Google Maps API para mostrar la ubicación de quienes visitan este blog sobre un mapa de la superficie de la tierra.


Existen algunas limitaciones impuestas en este prototipo:

  • No trabaja en tiempo real : Es un acumulado de quienes visitaron el blog en los últimos 60 minutos

  • El mapa se refresca cada 60 minutos : Si bien es simple que el mapa se actualice cada vez que es mostrado significaría una tarea pesada e innecesaria para el ya sobrecargado servidor donde reside este blog.

  • La ubicación de los visitantes sólo es a nivel de pais sin llegar al nivel de ciudad


  • Por lo demás es bastante sencillo el funcionamiento de este prototipo:

  • Obtener la IP del visitante y obtener el país donde se ubica esta IP

  • Almacenar los valores obtenidos en el punto anterior en una base de datos

  • Generar el mapa cada 60 minutos


  • Obtener la IP del visitante y obtener la ubicación geográfica de esta IP:



    Existen varias maneras de obtener la IP del visitante, la más immediata es a través del logfile del servidor web dado que allí quedan registradas de manera automática pero esto tiene complicaciones interesantes como determinar a partir de dónde (qué línea del logfile) se encuentran los visitantes de los últimos 60 minutos, manejar adecuadamente la rotación automática del archivo logfile o analizar el logfile (tail -f) abierto y procesar cada línea para añadirla a la base de datos. Pero por desgracia mi proveedor de hosting no me permite tener acceso al logfile activo del servidor web por lo que apelamos a un pequeño script que es llamado desde la misma página web, por ejemplo :



    <img src="/cgi-bin/mapadehits/wrapper.pl" width="1" height="1">


    Este tag debería añadir una imagen de 1 pixel por 1 pixel a la página pero en realidad está llamando a un script en Perl que obtiene fácilmente la dirección IP del visitante consultando las variables de entorno :



    my $ip_address = $ENV{REMOTE_ADDR};



    Luego obtiene el país correspondiente a esta IP consultando la información obtenida de webhosting.info y que ha sido previamente cargada en la base de datos.

    Al terminar de ejecutarse este script se devuelve un pixel en blanco que es el resultado esperado por el tag <img> :



    print "Location: $SERVER/$DIR/blank.gif\n\n";
    exit (0);


    Almacenar los valores obtenidos en el punto anterior en una base de datos:



    La base de datos empleada es MySQL pero el sencillo esquema empleado puede ser reproducido con cualquier otro manejador de BD. El script en Perl emplea DBI para conectarse a la base de datos.

    Generar el mapa cada 60 minutos



    El mapa no es generado como un archivo gráfico , en su lugar se genera un archivo XML cada 60 minutos mediante un script llamado por crontab a partir del cual la Google Maps API se encargará de generar el mapa deseado. Modificar el script para que las estadísticas sean mostradas actualizadas al segundo consiste en no llamar al archivo XML mencionado sino a otro script que se encargue de consultar la BD y entregar como salida el formato XML necesario.

    El resultado lo pueden ver en : Mapa de Hits

    Mejoras:



    Siendo este un prototipo existen varias mejoras que se pueden hacer :

  • Actualizar a la versión 2 del API de Google

  • Integrar el API de hostip.info para la información geográfica y evitar el tener que actualizar manualmente esta información

  • Precisar mejor la ubicación de los visitantes especificando incluso la ciudad y no solo el país

  • Actualizar el mapa en tiempo real via AJAX


  • Si conocen a alguien que ya haya desarrollado esto dejenme un comentario con la URL correspondiente para no tener que reinventar la rueda ...

  • 6 comments:

    1. Saludos

      ¿Sólo muestra las visitas de los últimos 60 minutos (posterior, claro, a la actualización)? Está curiosa la herramienta, es la primera que veo con el API de Google, aunque no la primera de este estilo -localización de IPs en un mapa- para poner en webs, bitácoras o estadísticas varias (aunque no recuerdo urls ni nada por el estilo).

      Hasta Luego y suerte ;)

      ReplyDelete
    2. Hola Jomra, gracias por escribir. Actualmente muestra las visitas de los últimos 60 minutos pero esto es plenamente configurable. Puedo mostrar todas las visitas que tengo almacenadas en la base de datos o las de los últimos segundos pero configurando a 60 minutos tengo un número decente de puntos marcados sobre el mapa.

      Hay varias herramientas que emplean el API de Google aunque las primeras requerían que el visitante marcara sobre el mapa su ubicación y entre las últimas tenemos a Google Analytics que incluso llega al detallar la ciudad desde donde se origina la conexión. Por supuesto que esto último depende de que tan buena o actualizada esté la base de datos que relaciona IP's con ubicación geográfica.

      Saludos

      ReplyDelete
    3. Hola tocayo, en algún blog que visité de curioso tenía la opción de marcar la posición exacta de las visitas en un mapa de google, claro que el visitante tenía que hacer la marca. Me sorprendió ver la cantidad de visitantes vecinos cercanos. El resto ya es complicado para mi. Saludos.

      ReplyDelete
    4. hola,
      tengo una consulta, cómo puedo averiguar el ip desde el cual se escrube un blog. Dicho de otro modo: quiero saber el ip del autor de un blog... es eso posible?

      ReplyDelete
    5. Rex, es posible. La pregunta es ¿por qué quieres saberlo? . Debes considerar que el autor del blog puede estar usando varias IP's por ejemplo si escribe desde casa, desde el trabajo y desde un cibercafé pero por supuesto, estos lugares se encontrarían - geográficamente - cercanos uno del otro a menos que el autor trate de encubrir su dirección IP mediante el uso de proxys anónimos.

      Obviamente el lector del blog no puede ver directamente (vale decir en el blog) desde qué dirección se conecta su autor. Probablemente ni siquiera esté configurado para mostrar las direcciones IP de quienes hacen comentarios en el blog - como ocurre en este blog , a pesar de que puedo ver tu dirección IP desde el panel de control del blog -.

      Así que si quiero saber la dirección IP desde la que suele conectarse el autor debo recurrir a otros medios indirectos para determinarla. La pregunta es ¿Qué otro medio de comunicarse en Internet suele revelar la dirección IP de los involucrados?. No respondo porque desconozco el motivo por el que haces esta pregunta.

      Saludos

      P.D. Busqué tu dirección de correo en Internet ... parece que siempre suele terminar sus comentarios con una pregunta? :)

      ReplyDelete
    6. Hola,

      me interesaria ver lo de generar el mapa cada 60 minutos, pero el link no está disponible, podrías pasármelo??

      gracias

      ReplyDelete