Por: Isabel Yepes
Explicamos como acceder a los tweets públicos de un usuario por medio de Python, para almacenarlos en un archivo .csv que posteriormente pueda ser cargado en un DataFrame.
Se requiere instalar la librería tweepy (El manejador de paquetes pip ya debe estar instalado, para instalar pip puedes consultar como Aquí)
pip3 install tweepy
Obtener tokens de acceso para conectarse a Twitter
- Ir a la página de Administración de Aplicaciones de Twitter, hacer sesión.
- Usar el botón de “Crear nueva app”
- Llenar los campos mandatorios de nombre, descripción y sitio web. Este último puede no ser una página activa dado que nuestra conexión será de solo lectura
- Aceptar los términos y condiciones y dar click en “Crear twitter app”
- Una vez creada la aplicación ir a la pestaña de “Permisos” y cambiarlos por “Solo lectura”, esto es importante pues solo la usaremos para descarga de datos, no para publicar nada en tu cuenta.
- Recibirás una alerta de que debes esperar a que los permisos se actualicen, una vez actualizados ve a la pestaña “Tokens de acceso”
- Dar click sobre “Crear Tokens de acceso” para generar las credenciales que la aplicación usará. Estos datos son privados, cualquiera que los tenga podrá conectarse a twitter a nombre de tu aplicación.
- Usa el código a continuación y guárdalo en un archivo de script Python tweets.py
import tweepy #https://github.com/tweepy/tweepy import csv #Credenciales del Twitter API consumer_key = "Agregar Consumer Key" consumer_secret = "Agregar Consumer Secret" access_key = "Agregar Access Key" access_secret = "Agregar Access Secret" #Remover los caracteres no imprimibles y los saltos de línea del texto del tweet def strip_undesired_chars(tweet): stripped_tweet = tweet.replace('\n', ' ').replace('\r', '') char_list = [stripped_tweet[j] for j in range(len(stripped_tweet)) if ord(stripped_tweet[j]) in range(65536)] stripped_tweet='' for j in char_list: stripped_tweet=stripped_tweet+j return stripped_tweet def get_all_tweets(screen_name): #Este método solo tiene permitido descargar máximo los ultimos 3240 tweets del usuario #Especificar aquí durante las pruebas un número entre 200 y 3240 limit_number = 3240 #autorizar twitter, inicializar tweepy auth = tweepy.OAuthHandler(consumer_key, consumer_secret) auth.set_access_token(access_key, access_secret) api = tweepy.API(auth) #inicializar una list to para almacenar los Tweets descargados por tweepy alltweets = [] #Hacer una petición inicial por los 200 tweets más recientes (200 es el número máximo permitido) new_tweets = api.user_timeline(screen_name = screen_name,count=200) #guardar los tweets más recientes alltweets.extend(new_tweets) #guardar el ID del tweet más antiguo menos 1 oldest = alltweets[-1].id - 1 #recorrer todos los tweets en la cola hasta que no queden más while len(new_tweets) > 0 and len(alltweets) <= limit_number: print ("getting tweets before" + str(oldest)) #en todas las peticiones siguientes usar el parámetro max_id para evitar duplicados new_tweets = api.user_timeline(screen_name = screen_name,count=200,max_id=oldest) #guardar los tweets descargados alltweets.extend(new_tweets) #actualizar el ID del tweet más antiguo menos 1 oldest = alltweets[-1].id - 1 #informar en la consola como vamos print (str(len(alltweets)) + " tweets descargados hasta el momento") #transformar los tweets descargados con tweepy en un arreglo 2D array que llenará el csv outtweets = [(tweet.id_str, tweet.created_at, strip_undesired_chars(tweet.text),tweet.retweet_count,str(tweet.favorite_count)+'') for tweet in alltweets] #escribir el csv with open('%s_tweets.csv' % screen_name, "w", newline='') as f: writer = csv.writer(f, quoting=csv.QUOTE_ALL) writer.writerow(['id','created_at','text','retweet_count','favorite_count''']) writer.writerows(outtweets) pass if __name__ == '__main__': #especificar el nombre de usuario de la cuenta a la cual se descargarán los tweets get_all_tweets("Agregar TwitterUser")
Ejecutar el script según se indica a continuación, esto creará un archivo llamado TwitterUser_tweets.csv
python3 tweets.py
Fuente original del código Aquí, se hicieron cambios para compatibilidad con Python 3, para garantizar que todas las columnas quedan entre “”, eliminar los saltos de línea de los tweets y los emoticones que pueden generar problemas al leer el archivo .csv resultante desde python.
Para cargar el archivo .csv en un Dataframe de Python
import pandas as pd archivo_csv = pd.read_csv("ruta/username_tweets.csv", index_col = 0) tweetsDF = pd.DataFrame(archivo_csv) print(tweetsDF)
Más info en How to extract Twitter tweets data and followers to Excel
Sobre otras características que pueden extraerse de los tweets consulta How to Download Twitter data in JSON – Twitter API Python examples
Y finalmente un video explicando el mismo código que presentamos