Español | English
rss facebook linkedin Twitter

Control de amigos y followers en Twitter

Hoy en día casi todo geek que se precie tiene una (o varias) cuentas de Twitter, además de haber probado Google+, que parece haber venido para quedarse. Todos tenemos unos cuantos seguidores y otros cuantos amigos; a veces, tantos que no podemos controlarlos. No podemos saber a ciencia cierta si hace mucho tiempo que uno de nuestros amigos no escribe o si uno de nuestros queridos followers ya no lo es. ¿¿Quieres saber quién te ha hecho "unfollow"?? No, esto no es un mail de SPAM de estos que te dicen que metas tus datos de acceso del messenger para saber quién te ha “desadmitido” ;) Este post trata sobre cómo se puede hacer un sencillo script para controlar estos aspectos en Twitter.

Hablando de Python, que es donde mejor me muevo, hay unas cuantas alternativas a la hora de usar la API de Twitter para hacer nuestros “scriptcillos”. Yo he elegido Tweepy porque me ha parecido bastante fácil de usar y, además, está bastante bien documentada. Lo principal es tener claro lo que queremos:

  • No autenticarnos con ningún usuario

También hay que saber que no se pueden obtener todos los amigos o followers de una vez, sino que sólo se obtienen 100 en cada petición a la API. Para solucionar esto podemos usar los Cursors de Tweepy y con estas líneas obtendríamos todos los followers de una cuenta dada:

followersCursor = tweepy.Cursor(tweepy.api.followers,id=user)
for follower in followersCursor.items():
print follower.name

El tema de las peticiones a la API no es tontería porque están limitadas. Si no estamos autenticados sólo podremos hacer 150 peticiones a la hora, pero si estamos autenticados con OAuth podremos realizar hasta 350 cada hora. El objetivo de nuestro script es comprobar una vez al mes o, como mucho, una vez a la semana los cambios que han sufrido nuestros amigos y followers, por lo que, salvo que tengamos muchos muchos amigos (¡ouch!) y followers, no habrá problemas.

Por último, para saber si tenemos nuevos followers o, quizá más interesante, quién ha dejado de serlo, necesitamos guardar los antiguos followers en algún sitio. Yo me he decantado por guardar los diccionarios de followers en un archivo gracias al módulo shelve, ya que la recuperación e inserción de datos se hace de forma muy intuitiva.

Y con esto y un bizcocho...


Así es como quedaría la salida de nuestro script. Podéis echar un vistazo al código fuente completo aquí. Por supuesto que es mejorable y seguro que tiene unos cuantos bugs y excepciones no contempladas, pero tampoco se puede pedir tanto en tan poco tiempo ;) Lo importante es que ejecutando este script de vez en cuando podemos ver rápidamente:

  • Información de una cuenta de Twitter
  • Amigos que no han actualizado su cuenta desde hace más de X días (inactivos)
  • Nuevos followers
  • Followers que hemos perdido

Espero que os sea de utilidad y que os haya despertado el gusanillo por experimentar con las distintas APIs de Twitter, es realmente fácil y rápido programar un script que se comunique con esta red social gracias a ellas. Si unís esto con algún tema de seguridad seguro que podéis sacar petróleo ;)


Jose Miguel Esparza
S21sec e-crime

(Blog / Twitter)

3 comentarios:

Anónimo dijo...

Muy interesante :-)

Para que funcionara en la Debian
# apt-get install python-twitter python-twyt python-setuptools
# cd /opt
# wget http://pypi.python.org/packages/source/t/tweepy/tweepy-1.7.1.tar.gz
# tar xvf tweepy-1.7.1.tar.gz
# cd tweepy-1.7.1/
# python setup.py install

y al tema :)

-.P

Luis dijo...

Estupenda entrada Jose Miguel,

Quisiera añadir un detalle a este script tan chulo.
Si queréis redirigir la salida de este scrip a un fichero de texto, y el usuario de twitter tiene followers con tildes u otro caracter extraño el script fallará con la siguiente salida:

Traceback (most recent call last):
File "./tweeter.py", line 139, in
print "\t[%s] %s (%s)" % (inactive[2], inactive[0], inactive[1].encode('latin1'))
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 26: ordinal not in range(128)


Para solucionar esto se puede modificar el script añadiendo lo siguiente a las variables que puedan contener estos caracteres:
.encode('utf-8')

Por ejemplo la linea 133 quedaría así:

print '\t['+inactive[2]+'] '+inactive[0].encode('utf-8')+' ('+inactive[1].encode('utf-8')+')'

¡Saludos!

Jose Miguel Esparza dijo...

Muchas gracias por los comentarios, son de gran ayuda a la hora de instalar y ejecutar el script. Además como tampoco me he explayado mucho en estos temas lo complementan muy bien... :)


(+34 902 222 521)


24 horas / 7 días a la semana



© Copyright S21sec 2013 - Todos los derechos reservados


login