Historial de seguidores en Twitter
Desde que empecé a usar Twitter de forma activa me llamó mucho la atención cómo funciona, pero no técnicamente, sino más bien en lo social. El alcance que tiene a poder ver el contenido de casi cualquier persona y hacer re-tuits de personas a las que no seguís. De hecho, gracias a ese feature hemos podido llegar a muchos más lugares con el proyecto.
Si bien no he podido dedicarme mucho tiempo a escribir algunos scripts que hagan este análisis por mí, comencé con algo simple: el historial de seguidores.
¿Cómo es eso? La idea es poder saber quienes te siguen, quién es un nuevo seguidor y quién te dejó de seguir. Claramente, los últimos son los más importantes para evaluar: ¿porqué perdí a este seguidor? es la pregunta del millón.
El problema se dividió -automáticamente, en dos partes. La primera: obtener todos los seguidores de la cuenta @argenpython de forma periódica. La segunda: hacer diff de esos seguidores de forma incremental. ¿Qué quiero decir con incremental? Que no necesito saber la diferencia entre el primer reporte y el último, porque si en los reportes del medio alguien me empezó a seguir y luego me dejó de seguir, también quiero saberlo.
La obtención de los seguidores lo resolví con este pequeño script (en un @daily de CRON):
fades -d twitter -x twitter-follow --oauth argenpython > argenpython.followers_`date +"\%Y\%m\%d"`.txt
Para hacer la diferencia de todos esos seguidores recolectados diariamente con el script anterior, "escribí" [1] un script en Python:
listings/historial-de-seguidores-en-twitter/multiplediff.py
import difflib import os def get_files(): return sorted([f for f in os.listdir() if f.startswith('argenpython.followers_')]) def get_date(filename): return filename[:-4].split('_')[1] def get_diff(old, new): # Since Twitter API doesn't give as the followers list sorted, we # need to sorted it because if not there will be removed and added users # with the same name between 2 different files old_lines = sorted(open(old).readlines()) new_lines = sorted(open(new).readlines()) return ''.join(difflib.unified_diff(old_lines, new_lines)) def compare_files(): files = get_files() olds = ['/dev/null'] + files[:-1] for old, new in zip(olds, files): print('Changes in', get_date(new)) print(get_diff(old, new)) if __name__ == '__main__': compare_files()
Finalmente, para saber cuáles son los seguidores que hemos perdido en el camino utilicé este comando de bash:
python3 multiplediff.py | grep "^-b" | wc -l
Eso me arrojó 39 como resultado. Por lo tanto, como este script está corriendo desde el 1 de Enero de 2016, puedo decir que hemos perdido 39 seguidores en este mes.
[1] | dijo el más mentiroso del mundo, el código me lo pasó Ariel Rossanigo por Twitter, justamente. Yo solo le hice unas pequeñas y mínimas modificaciones. |
Comentarios
Comments powered by Disqus