Descargar tweets a .csv usando Python

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

  1. Ir a la página de Administración de Aplicaciones de Twitter, hacer sesión.
  2. Usar el botón de “Crear nueva app”
  3. 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
  4. Aceptar los términos y condiciones y dar click en “Crear twitter app”
  5. 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.
  6. 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”
  7. 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.
  8. 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

Women Who Code, Meetup virtual 20 de febrero de 2016

Iniciamos este año Women Who Code Medellín con un Meetup virtual, para que puedas conectarte desde donde quiera que estés en el siguiente evento de google hangout on air, el sábado 20 de febrero a la 1:00 pm.

Regístrate para asistir en http://meetu.ps/2RT7Kg

Queremos escuchar lo que te interesa conocer y aprender durante este 2016, tus preguntas y comentarios durante el hangout son bienvenidos. Queremos que otras chicas se vinculen a la logística de los eventos, tu participación es importante.

En lo técnico estaremos hablando de prototipado rápido de aplicaciones con Invision. Puedes seguirnos y participar desde tu computador en cualquier lugar. Para enviar preguntas y participar puedes hacerlo desde Hangouts On Air, las preguntas pueden hacerse desde antes de que comience https://plus.google.com/events/c8mq0nd7sfmic4dlrjg7ucnrk0s

Para visualizarlo de forma no interactiva, puedes hacerlo desde YouTube.

 

Reabierta – Vacante instructor Redes de datos para el SENA

Empleo

Denominación:
Instructor

Fecha Publicación:
2013/11/12

Compañía:
SENA (Medellín)

Tipo de contratación:
Prestación de servicios, tiempo completo.

Descripción:
Docencia en el área de redes de datos.

Requisitos:

  • Ingeniería electrónica o en telecomunicaciones.
  • Veinticuatro (24) meses de Experiencia: de los cuales Dieciocho (18) meses estarán relacionados con el ejercicio de la profesión u oficio objeto de la formación profesional y Seis (6) meses en labores de docencia. Con capacitación en Administración de Redes de Computadores sobre plataformas Microsoft, Linux, Solaris y CISCO.
  • Pueden aplicar tecnólogos.
  • Debe estar inscrito en el servicio público de empleo del SENA.

Pago:
Por obra, a convenir.

Contacto:
http://sne.sena.edu.co/spe/servlet/BusquedaOferente?accion=vervct&vct_id=1634150

Vacante instructor Redes de datos para el SENA

Empleo

Denominación:
Instructor

Fecha Publicación:
2013/10/03

Compañía:
SENA (Medellín)

Tipo de contratación:
Prestación de servicios, tiempo completo.

Descripción:
Docencia en el área de redes de datos.

Requisitos:

  • Ingeniería electrónica o en telecomunicaciones.
  • Veinticuatro (24) meses de Experiencia: de los cuales Dieciocho (18) meses estarán relacionados con el ejercicio de la profesión u oficio objeto de la formación profesional y Seis (6) meses en labores de docencia. Con capacitación en Administración de Redes de Computadores sobre plataformas Microsoft, Linux, Solaris y CISCO.
  • Pueden aplicar tecnólogos, pero el salario puede ser inferior
  • Debe estar inscrito en el servicio público de empleo del SENA.

Pago:
3.081.000.

Contacto:
http://sne.sena.edu.co/spe/servlet/BusquedaOferente?accion=vervct&vct_id=1588711

Job (Medellin – Colombia) Junior to Mid-Level Developer

Empleo

Position:
Junior to Mid-Level Developer

Company:
Advance Teknologies

Term:
Initial 6 months service contract. A permanent position it is available after the first term

Description:
Junior to Mid-Level Web developer

Requirements:

  • Team player
  • Disposition to work by independently as part of a larger team, and learn new technologies
  • Full time employment with undergraduate or specialist degree in software development
  • Lives or is willing to relocate to Medellin
  • Sufficient proficiency in English in order to communicate at a basic level with English-speaking team members, as well as reading and writing code /documentation in English
  • Knowledge in REST (Consume) and JavaScript
  • Preferrably knowledgable in software engineering processes such as SCRUM or TSP.
  • Read and modify UML diagrams
  • Preferably knowledgeable in node.js, backbone.js and other web development frameworks and languages such as PHP and Python (DJANGO)

Base Salary:
Between $2’000.000 – $3,500,000 colombian pesos monthly, based upon prior experience
Depending on the CV and experience the salary may be negotiable after an initial test period

Contact:
info @ advteknology.com

FLISOL Medellín 2013 en el SENA este 4 de mayo

Flisol-Logo-Small1

El Festival latinoamericano de Software Libre (Flisol) se realizara este sábado 4 de mayo desde las 8:30 de la mañana en el Centro de Servicios y Gestión Empresarial del SENA Medellín, en la calle Calle 51 No. 57-70.

Este evento tiene como objetivo promover la apropiación social de la tecnología, la innovación, la divulgación del conocimiento, la investigación, entre otras nuevas propuestas de ciudad a través de la promoción del uso del software libre y el Open Source, dando a conocer al público en general su filosofía, alcances, avances y desarrollo.

Durante esta jornada se realizaran conferencias, desconferencias y charlas, al tiempo que se ofrecerán ponencias y talleres sobre temáticas locales, nacionales y latinoamericanas en torno al software libre.

El ingreso a este festival es gratuito y las personas pueden llevar su equipo de cómputo si desean instalar programas de software libre y sistemas operativos Linux.

Página web del evento http://www.flisolmedellin.org

Los conferencistas invitados son:

Ponente: Juan Fernando Villa
Conferencia: la Innovación social a través del Open Source
Temas: Apropiación social de la tecnología y la innovación.
Hora: 9:00-10:00

Ponente: Fernando Giraldo
Conferencia:sobre redes libres
Temas: Conectividad y redes de datos
Hora: 10:00-11:00

Ponente: Sebastian Velásquez
Conferencia:subete a mi nube que es libre
Temas: Computación en la nube
Hora: 13:00-14:00

Ponente: Christian Gutierrez
Conferencia: Aplicaciones de Tiempo Real
Temas: Telecomunicaciones y Programación
Hora:14:00-15:00

Ponente: Oscar Daniel Gómez Padilla
Conferencia: Estrategia de protección de los activos intangibles y producción colaborativa
Temas: Jurisprudencia Electrónica y Crowdsourcing
Hora:15:00-15:45

Ponente: Carlos Alberto Ramirez
Conferencia: Creación de video juegos con unity y Blender y realidad aumentada
Temas: Modelado en 3d, Animación Digital, Industrias creativas y Vídeo Juegos de Ultima generación.
Hora: 16:15-17:15 – 9:00-10:30

Ponente: Duvan Gallego
Conferencia: El software libre en las empresas
Temas: Emprendimiento, Responsabilida Social Corporativa, Reducción de Costos con Aumento en la producción.
Hora: 17:15-18:00

Ponente: Steven Zuluaga
Conferencia: Automatización de tareas mediante scripts
Temas: Automatización, Aceleradores de Productividad
Hora: 9:00-10:30

Ponente: Willinton Acevedo
Conferencia: Linux en su simplicidad
Temas: GNU/Linux, Informatica, Open Source
Hora: 13:00-14:30

todo el día habra desconferencias, actividades expontaneas y mucho mas.

No te puede perder este evento!

Invita a tus amigos y amigas a conocer un propuesta diferente e interesante para la ciudad de medellín

Difunde esta información a tus amigos y diles que nos acompañen en redes sociales con el Hash Tag #flisolmedellin

Gracias por tu tiempo! nos vemos temprano en el FLISOL!

Lanzamiento AppsCo en Medellín 17 de septiembre 2012

 Los invitamos al lanzamiento regional de la iniciativa Apps.co en la ciudad de Medellín.

  • Lugar: Auditorio Fernando Gómez Martínez del Politécnico Colombiano Jaime Isaza Cadavid.
  • Fecha: Lunes 17 de septiembre.
  • Hora: 7:30 a.m hasta las 12 m.

Hablaremos de las nuevas fases de Apps.co, los Bootcamps (sesiones de entrenamiento en lenguajes de programación) y todas las herramientas que ponemos a disposición desde el Ministerio TIC para que conviertas tus ideas en negocios.

Si deseas asistir debes inscribirte al siguiente correo envíando tu nombre y número de documento a: comunicaciones@futurodigital.org 

Los cupos son limitados y se asignarán por orden de llegada de correos.

Te esperamos.
Equipo Apps.co

Apps.co es una Iniciativa de MinTIC Colombia