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 (Código fuente)

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