Probando la API de Twitter: tweet archive y delete
Hace mucho tiempo que no me ponía a hacer algo con la API de Twitter, y se que hubo muchos cambios en los últimos meses / años en cuanto a funcionalidades, permisos y limitaciones.
Para este caso en particular necesitaba hacer un cleanup masivo de algunas cuentas de Twitter con decenas de miles de tweets. He aquí algunas cuestiones interesantes, y lecciones aprendidas por pasos para principiantes.
Paso 1: Cuenta Dev de Twitter, permisos y autenticación
Más allá de los pasos para crear la cuenta de Developer de Twitter (y todas las justificaciones necesarias), quiero recalcar un par de tips y problemas que tuve que les pueden llegar a pasar:
- Luego de enviar su request para una cuenta de developer les puede llegar a pasar, como a mí, que en unas pocas horas o días ya van a poder crear su app en el dashboard de Twitter.
Vista principal del dashboard de Twitter Dev
Cuidado, esto es verídico, y por más que creé la app no me funcionaba por problemas de autenticación de tokens (por más que hagan todo bien). Recién un mes después de que me llegó este mail de confirmación pude hacer andar todo. Clave: asegurarse de tener la confirmación por mail de Twitter antes de probar porque no van a poder autenticar.
Ejemplo de mail de confirmación
- Una vez creada la app, asegúrense de:
- crear un dev environment, agregar la app, y agregar el dev environment a las funcionalidades de la app:
- darle los permisos:
- generar y copiar los tokens:
- suscribir su app a los Labs de Twitter.
Yo porque soy medio bruto le doy todos los permisos a mi app (por las dudas) pero haciendo esto no tendrían que tener ningun problema. En caso de necesitar troubleshooting de autenticación para los tokens vayan a este link.
Paso 2: Script para borrar TODOS los tuits de una cuenta
Lamentablemente no hay forma fácil de borrar masivamente tus tuits, y de las herramientas que hay online, una o dos son confiables, pero tenés que pagar. Lo intenté! Pero oh!, el pago es con tarjeta de crédito a través de PayPal, que está bloqueado en el país.
Lo que hice con este script está basado 90% en este código en Python que encontré en GitHub. Está muy bueno y anda perfecto, gran aporte.
Requerimientos: Python, librería Tweepy 3.7.0
- La autenticación se hace en las primeras líneas sólo con sus Tokens. Es lo único que se usa y no hace falta agregar nada más.
Lo único que tienen que hacer es cambiar el max_id con el ID de el tuit que quieren poner como límite y lo que hace el script es borrar todos los tuits empezando por el más viejo. Fácil y simple.
Está limitado a 200 API calls por una cuestión obvia. Borra bastante rápido, a un ritmo de medio segundo por tweet, y no te jode con ninguna limitación o threshold de la cuenta de dev. Ahora… si están buscando borrar tweets de hasta hace un año, no van a tener problemas. El inconveniente es que cuando hacen el get de los tweets, la API te va a limitar el get tweets hasta un año, siempre. Lamentablemente esta es una limitación a la que no le pudimos encontrar la vuelta.
Paso 3: Tweet Archive y lista de IDs de Tweets
La API nos puede limitar, pero una de las cosas que podemos hacer es — desde los settings de la cuenta — bajar un archive completo de toda tu data de Twitter. Esto te baja absolutamente todo: fotos, actividad, etc. Depende de actividad de la cuenta puede pesar hasta mas de 2 GB:
- Una vez bajado el archivo, ir a la carpeta data y editar el archivo tweet.js (va a ser el más pesado de todos). Es un json que se ve así:
Va a tener posiblemente miles de lineas y no está ordenado cronológicamente (no pregunten por qué).
- Ahora lo que tenemos que hacer es traernos los IDs de los tweets. Si tienen alguna herramienta para parsear json, bárbaro. Sino lo que pueden hacer es una búsqueda con regex usando notepad++ del campo “id_str”. Este cheatsheet está bastante simplificado para lo que necesitamos. Una búsqueda así sirve ( ¡cuidado! algunos IDs tienen 18 dígitos, y otros 19)
Muchos IDs les van a aparecer duplicados, pero lo bueno es que los IDs sí están ordenados numéricamente: ID más bajo es el tweet más viejo y ID más alto es el tweet más nuevo. Removemos duplicados y ordenamos hasta tener una lista en un txt así:
- Una vez que tienen el txt listo: ponen el path en el código (línea 100) y va a buscar los IDs y los va a borrar. Si el ID es viejo de un tuit que ya borraron o no existe, lo omite. En max_id hay que poner el límite del último tweet que quieren borrar.
Y listo! Si alguien quiere mejorarlo, adelante :) Acá está el código listo para usar
Créditos a Pablo Pietro, Edu y Godlike que me dieron una mano pensando e investigando
Autor
Mariano Aragunde Periodista, comunicador, IBMer, ultramaratonista, triatleta, músico, hincha de Racing, del Oeste (con eso creo que alcanza). Mis opiniones son personales