Control de amigos y followers en Twitter (actualización API 1.1)

Hace ya un tiempillo (¡más de 2 años ya!) publiqué un script en Python para monitorizar una cuenta de Twitter usando Tweepy: obtener información básica de la cuenta, mostrar amigos inactivos, seguidores perdidos y nuevos seguidores. El tema es que desde hace un tiempo había dejado de funcionar porque Twitter introdujo la versión 1.1 de su API, que, entre otras cosas, obliga a autenticar todas las consultas realizadas, mientras que antes en el script no se utilizaba ningún tipo de autenticación. Además, ya no hay límite de consultas por hora, si no que son límites de 15 minutos asociados a cada petición específica. Es decir, para pedir la lista de amigos tienes un límite y otro para los seguidores, por ejemplo. Ya sé que el cambio en la API se hizo hace bastante tiempo, pero la verdad que no me había puesto a mirarlo hasta ahora ;p Los que vais con retraso, como yo, podéis echar un vistazo a todos los cambios introducidos para estar al tanto.

Antes de nada, ya que la API había cambiado había que actualizar Tweepy también. Lo mejor y más fácil es usar pip:
 

$ pip install tweepy

 

Después tocaba modificar el código. El primer cambio importante era el tema de la autenticación, había que cambiar el script a la fuerza. Así que había que crear una nueva aplicación en https://dev.twitter.com/apps/ para obtener la “Consumer key” y el “Consumer secret”, así como un token de acceso para obtener el “Access token” y “Access token secret (seguir el "Step 1" del enlace). En vez de solicitar un token de acceso fijo relacionado con el usuario se puede usar una autenticación de aplicación, pero me pareció más sencillo asociarlo al usuario. Al final, hay que copiar en el script todas estas contraseñas y no es recomendable su difusión, así que de perdidos al río, qué más da cuatro credenciales que dos...

El otro cambio a tener en cuenta era que los límites habían cambiado, así que una ejecución con el código antiguo nos devolvía un bonito error:
 

TweepError([{'message': 'Rate limit exceeded', 'code': 88}],)

 

En la implementación antigua se recogían los followers de 100 en 100 y había un límite de 150 peticiones por hora. Ahora hay un límite de 15 peticiones cada 15 minutos, así que con el mismo código se podía recoger una cantidad bastante menor de resultados. Sin embargo, con la nueva API también introdujeron la posibilidad de consultar los identificadores de todos los amigos/seguidores de 5000 en 5000! Así que la nueva implementación solicita estos identificadores de los followers, los compara con el archivo local y consulta únicamente los datos de los nuevos, no de todos ellos, ahorrando en peticiones.

Después de estos retoques ya se puede usar como antes, con la única pega de tener que crear una nueva aplicación y copiar las credenciales en el script o en alguna opción alternativa, como variables de entorno, por ejemplo. Podéis descargar el código desde este enlace.