Por un puñado de tweets

En los últimos días hemos visto el enorme revuelo que se montado por unos tweets publicados hace 4 años. Y lo peor de todo es que parece que ha desatado toda una moda de «arqueología social», buscando aquel tweet o aquella expresión que pudiera provocar una situación embarazosa. Pero, ¿como se hace esto? Vamos a hacer un sencillo ejemplo de cómo se puede, gracias a la magia de la programación, realizar esta labor «arqueológica».

Paso 1: Obtener las claves de la API de Twitter

Para poder acceder al streaming de Twitter, el primer paso es obtener las claves para poder llamar a su API desde programación. Es muy sencillo:

  • Accede a apps.twitter.com con tu cuenta de Twitter (si no tienes, puede ser un buen momento para crearla).»
  • Pulsamos el botón de «Create a new app»
  • Rellenamos el formulario, aceptamos los términos y pinchamos en «Create yout Twitter application».
  • En la siguiente página, en la pestaña API keys, tendremos los datos que necesitamos, que son 3:
    • API keys
    • API secret
    • Y el access token, que se obtiene pulsando el botón que aparece en la parte inferior.

Paso 2: Conexión y descarga de datos

Para poder gestionar el streaming de tweets, lo mejor es utilizar una librería. En este caso, vamos a utilizar Tweepy. Su instalación es muy sencilla:

pip install tweetpy

Una vez instalada, el siguiente código nos dará lo que necesitamos para conectarnos a Twitter:

# Importamos los metodos necesarios de tweepy
from tweepy.streaming import StreamListener
from tweepy import OAuthHandler
import tweepy
import csv

#Variables that contains the user credentials to access Twitter API
access_token = ""
access_token_secret = ""
consumer_key = ""
consumer_secret = ""

if __name__ == '__main__':

 #This handles Twitter authetification and the connection to Twitter Streaming API
 auth = OAuthHandler(consumer_key, consumer_secret)
 auth.set_access_token(access_token, access_token_secret)
 stream = Stream(auth, l)

 api = tweepy.API(auth)

Por defecto, únicamente podríamos bajar 200 tweets como máximo, a través del siguiente comando:

new_tweets = api.user_timeline(screen_name = screen_name,count=200)

Desde el punto de vista «arqueológico», esto tiene poco valor. Afortunadamente, hay pequeños scripts que nos ayudan a solventar estos problemas:

#keep grabbing tweets until there are no tweets left to grab
while len(new_tweets) > 0:
 print "getting tweets before %s" % (oldest)

 #all subsiquent requests use the max_id param to prevent duplicates
 new_tweets = api.user_timeline(screen_name = screen_name,count=200,max_id=oldest)

 #save most recent tweets
 alltweets.extend(new_tweets)

 #update the id of the oldest tweet less one
 oldest = alltweets[-1].id - 1

 print "...%s tweets downloaded so far" % (len(alltweets))

Y con esto, tenemos recopilados todos los tweets. En la próxima entrega veremos como podemos hacer búsquedas en ellos, y empezar a buscar.

Borja Sanz
Acerca de
Investigador de S3lab
Expertise: Malware, Artifical Intelligence, Mobile Security, Android