22 de Agosto, 2005

Contando suscriptores

Al hilo de una anotación de JJ Merelo: compartiendo suscriptores. ¿Cómo podemos aproximar cuántos suscriptores tenemos?

En mi caso es bastante sencillo: tengo a mi disposición los logs del servidor y solo proporciono un sumario RSS.

Primero obtenemos un subconjunto de los logs, por ejemplo este último mes de Julio:

$ grep "/Jul/2005" < /var/www/logs/access_log > log.julio

Ahora solo queremos las direcciones IP únicas que accedan al fichero /blackshell.rss, que es el sumario que proporciono a los lectores de esta bitácora:

$ awk '/GET\ \/blackshell\.rss\ / { print $1 }' < log.julio | sort -u > ip.julio

Notar que he usado awk, y para que la cadena a buscar (primer término entre /) se ajuste a una expresión regular constante, hemos de escapar los caracteres especiales empleando la barra hacia la izquierda (los espacios, la propia barra a la derecha y el punto, en este caso porque buscamos "GET /blackshell.rss ").

Si quisiéramos añadir más ficheros al análisis de awk, emplearíamos el operador OR (|). Un ejemplo:

$ awk '/GET\ \/blackshell\.rss\ |GET\ \/blackshell\.rdf\ / { print $1 }' \
< log.julio | sort -u > ip.julio

Ahora podemos contar las direcciones recogidas:

$ wc -l ip.julio
     526 ip.julio

Lo que da en mi caso una estimación de 526 suscritos al sumario RSS (620 si tenemos en cuenta el desaparecido RDF).

Ahora si queremos comparar qué suscriptores compartimos con otra bitácora, solo tenemos que anonimizar un poco estos datos para poder pasarlos a quien esté interesado:

$ for ip in $(cat ip.julio); do echo $ip | openssl sha >> ip_sha.julio; done

Tampoco es que resulte imposible obtener las direcciones IP, pero cuanto menos es muy molesto, con lo que nadie nos podría acusar de no intentar preservar su privacidad ;).

Ahora solo falta ver qué cadenas aparecen en tu ip_sha.julio y en el del vecino para tener una aproximación de cuántos suscriptores leen ambas bitácoras.

Nota: Como indica Pau, algunos agregadores web nos muestran en la cadena del agente el número de suscritos que tenemos. En mi caso y con Bloglines indica 100 suscritos. Así que aplicando una correción a la cifra de antes (que indica estaciones en realidad), y comprobando que todas las peticiones de Bloglines vienen de la misma dirección IP, restaríamos uno y sumaríamos 100, quedándonos en una estimación de 625 suscritos.

También he añadido el GET a las lineas de awk, para asegurarnos de que no se procesan peticiones de forma equivocada.

Anotación por Juan J. Martínez, clasificada en: scripting, blog.

Hay 3 comentarios

Gravatar

Si es que los logs son utilisimos, no sé porque diantres muchos hostings no te dan acceso a ellos.

por Saiyine, en 2005-08-22 15:11:25

Gravatar

Con tu método te olvidas de contar los suscriptores que usan agregadores web, como bloglines, rojo, feedness, etc... En el caso de bloglines te informa de cuantos suscriptores tienes al feed en la cadena user agent del log:

216.148.212.188 - - [22/Aug/2005:16:01:20 +0200] "GET /blog/feed/rss2/ HTTP/1.1" 200 8571 "-" "Bloglines/2.0 (http://www.bloglines.com; 35 subscribers)"

También sería interesante ver cuantos user-agent únicos hay que recojan el feed para hacer una estadística de cual és el lector de feeds que usa mas gente para leerte, etc... seguro q pronto los parsers de logs al estilo awstats o webalizer nos darán esta información de la misma manera que lo hacen ahora con los navegadores.

por pof, en 2005-08-22 17:48:28

Gravatar

La propuesta no es perfecta... no calculo realmente lectores sino estaciones que descargan el sumario, sin poder contar de forma fiable una posible redifusión de ese sumario descargado (como en el caso de bloglines).

Es cierto lo del Agente... mi bloglines marca 100 suscritos en las últimas entradas de Julio.

Además me has hecho ver un fallo en el código (debería comprobar "GET /blackshell.rss ").

Corrijo el fallo y gracias por el apunte :).

por Juanjo, en 2005-08-22 17:53:14

Los comentarios están cerrados: los comentarios se cierran automáticamente una vez pasados 30 días. Si quieres comentar algo acerca de la anotación, puedes hacerlo por e-mail.

Algunas anotaciones relacionadas: