
Archivo temático:
Lo más leído (o visto):
Hace algún tiempo hice un programita en Python que resume los accesos al servidor, pero echaba en falta que me informara las páginas referentes, generalmente buscadores, a veces de imágenes. Iba a rehacerlo para cumplir esa función cuando se me ocurrió que quizás lo podía hacer con un "script" de comandos y efectivamente, así fue. El resultado es más rápido y ahora con un vistazo me entero de cómo va el tráfico, mediante una lista ordenada de números IP, cada una con sus términos de búsqueda. Imagino que puede servirle a alguien, así que aquí va. El núcleo del libreto es una línea larquísima que hace prácticament todo.
(1) fecha=$(date "+%e")
(2a) grep "\[$fecha" /ruta/al/registro/de/accesos.log \
(2b) |egrep -v -w "Googlebot|msnbot|Slurp|Gigabot|robots.txt" \
(2c) |cut -d " " -f 1-11 | cut -d " " -f 2-10 --complement \
(2d) |sed -e 's/\"http:.*images%3Fq%3D/i=/g' -e 's/%26.*//g' -e
's/\"http.*[?|&]q=/b=/g' -e 's/+/ /g' -e 's/&.*//' \
(2e) |sort -n |uniq -c -w 32 > archivoresumen2
(3) diff --suppress-common-lines archivoresumen1 archivoresumen2
(4) mv archivoresumen2 archivoresumen1
uniq) queden agrupadas y se totalice el número de accesos por IP. Las líneas (3) y (4) simplemente comparan el resultado más reciente con el almacenado, muestran la diferencia y almacenan; de este modo siempre se puede ver lo último de la acción.
[ haga un comentario, ( 0 ) ]
[ otras notas similares ]
Comenzó como un pequeño libreto (script) auxiliar para contar los accesos de visitantes al servidor de estas páginas. Pero fue evolucionando y ahora es un pequeño programa (en Python) que cumple varias funciones de análisis de registros (está pensado para Apache, pero podría servir para otras cosas, con pequeñas modificaciones).
Ahora con sólo escribir 'visitantes talcosa' en el terminal de mi máquina, obtengo una lista cuantificada y ordenada de todos los números IP que accedieron a esta máquina y que incluyen el término 'talcosa'. Lo mejor -dice uno- es que el programa filtra automáticamente los accesos de los robots y cualquiera que uno no desee contar. Finalmente, también puede obtener la geolocalización de los visitantes mediante conexión con HostIp.info.
El código completo se encuentra disponible libremente.
[ haga un comentario, ( 0 ) ]
[ otras notas similares ]
Ya se encuentra disponible una primera versión funcional de 'mapista', un pequeño programa que dibuja en un mapamundi la procedencia de las visitas a este sitio de Internet. El resultado actual puede verse en la misma página, que muestra la ubicación de las visitas de la pasada semana. Sólo las visitas con más de 3 solicitudes y que no corresponden a robots, etc. Por ahora, la ubicación de los puntos es exacta en longitud, pero a la latitud le falta precisión. Igualmente se podría mejorar mucho la presentación, en todo caso, funciona. Quizás una próxima versión vaya construyendo en vivo el mapa, y hay más opciones que se le pueden agregar. Veremos, dijo Homero.
[ haga un comentario, ( 0 ) ]
[ otras notas similares ]
Ya tengo un adelanto del programa que quizás en algún futuro muestre un mapa del mundo con las ubicaciones de las máquinas que accesan a este servidor. Por el momento, nada gráfico, hay una versión inicial que revisa el registro del servidor "web", totaliza los accesos por cada número IP y localiza -si está registrado en HostIP.info- cada número IP en algún lugar del mundo. Lo mejor, creo, es que tiene la capacidad de filtrar aquellos registros que no corresponden realmente a visitas (robots, mayormente). Lo peor, que es un poco lento y que no acumula de una semana a otra, o de una utilización a la siguiente. Antes de ponerse gráfico habrá que arreglar estas cosas.
[ haga un comentario, ( 0 ) ]
[ otras notas similares ]
Ya me voy familiarizando con Python. Una de los aspectos simpáticos de este lenguaje es lo fácil que puede resultar hacer un CGI (un programita que funciona sobre -o tras- el servidor HTTP). He realizado uno de tales CGIs, que partiendo de un formulario HTML hace una solicitud a una base de datos y presenta los resultados ordenadamente en una tabla.
La utilidad de tal artefacto informático es muy variada; basta pensar en todos los usos que se le puede dar a un frente "web" de una base de datos. Así que ha resultado interesante hacer este esfuerzo, cuyos aspectos resaltantes paso a resumir.
En primer lugar hay que decir que hacer un CGI no es distinto de hacer cualquier 'script' en Python: primera ventaja. En segundo, para utilizar los valores que provienen de un formulario hay que importar el módulo 'cgi'; así: import cgi y, para acceder a la base de datos: import MySQLdb. Pero el truco realmente está en que el primer envío de información a la página HTML debe -necesariamente- ser una declaración de tipo de documento, por ejemplo: print 'Content-type: text/html\n\n'. De otro modo la página no se producirá.
Luego viene el asunto de la conexión a la base de datos, no crea que va a conseguir esa información con 'google'... está oculta entre millones de líneas que no vienen al caso. El asunto es así: se debe crear un objeto para realizar la conexión, ej.: miobjetoBD = MySQLdb.connect(host="localhost", user="fulano", passwd="laquesea", db="mibasededatos"). Colocando los valores correctos se debe producir la conexión, pero para hacer algo útil, hay que crear un 'cursor', que es el que permite la relación con los datos: micursor = mibasededatos.cursor(). Al cursor se le hace la solicitud SQL: micursor.execute("SELECT Campo1,Campo2,Campo3 FROM Tabla1") (y aun así no tenemos resultado aún). Luego hay que extraer los datos de esa consulta: losdatos = cursor.fetchall(); en este caso se extraen todos (fetchall). Por último, los datos estarán en la variable losdatos que casualmente es un diccionario en Python y se puede manejar como tal. ¡Uf!
[ haga un comentario, ( 0 ) ]
[ otras notas similares ]
He realizado mi primer programa en PythonCard (bueno, faltan algunos ajustes, pero ya funciona). Se trata de una 'fachada' para el comando 'montage', que crea una imagen compuesta por una retícula de cualquier cantidad de otras imágenes; como es un poco fastidioso recordar todas las opciones (aún las pocas que normalmente uso) el nuevo programa facilita mucho el manejo. Es realmente sencillo crear los programas con esta herramienta: en primer lugar, se diseña la disposición de las ventanas que el programa va a utilizar (con 'resourceEditor') y luego se crea el código propiamente dicho (con 'codeEditor').
El posible problema es que para funcionar (en cualquier plataforma) requiere Python2.3 y wxPython 2.5 (al menos hasta que vea una manera de compilarlo o integrarlo con las bibliotecas de funciones necesarias). Por lo demás, Python parece un muy buen lenguaje para resolver la mayoría de las situaciones que se presentan en el uso intensivo del computador. Pronto haré una página para los detalles, que incluirá un brevísimo manual y el código completo.
[ haga un comentario, ( 0 ) ]
[ otras notas similares ]
62