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.