Manejo de la API de Twitter - Parte 1

November 28, 2015

Desarrolladores  Python 


Como proyecto personal, este fin de semana decidí aprender a utilizar la API de twitter en Python, para luego implementarla en dos de los sistemas que estamos desarrollando en Cign.IO, y me pareció una buena idea compartir todo lo que aprendí en estos días. Esta entrada va a estar dividida en varias etapas, cada una incluyendo una de las herramientas que voy a nombrar después y aumentando su complejidad a medida que avance este sistema de demostración.

Herramientas

Si bien es posible hacer todo el desarrollo a mano para lograr la implementación, decidí inclinarme por utilizar Tweepy que es una librería que es bastante completa en ese sentido. Además de esa librería; también Django, un framework genial también basado en Python, con el que estamos haciendo la mayoría de nuestros proyectos, y recomentadmos a nuestros clientes; RabbitMQ como broker de los mensajes que recibamos y luego procesaremos; y por último pero no menos importante, Celery para gestionar todo este enjambre de funciones y procesos, y poder crear un sitio que nos muestre cierta actividad en tiempo real.

Primeros pasos

Antes de poder empezar a desarrollar nuestra aplicación siquiera, debemos ir a Twitter y crearla. Si nunca han creado una aplicación antes, va a pedir que se registren como desarrollador, y un requisito importante para ello, es tener un número de celular asociado a su cuenta.

Una vez registrados y creada la aplicación, vamos a la pestaña Keys and Access Tokens y sacamos nuestros access tokens, tanto para la aplicación como para nuestro usuario, deberíamos quedarnos con algo como esto:

  • Consumer Key (API Key): yaYQWMpc5IRK4uJ6a1rOafROQ
  • Consumer Secret (API Secret): lKaj2tVXbiEyexEBCNAbz8UTGcCJNAvkc7kYJEC02EXZceedCk
  • Access Token: 607301812-dtFJPuuzrerLZVgmtq3OLnvF24rNLWWymCBnDYa2
  • Access Token Secret: QiIR75pbnORW6Tk1sxmuRv1eBsaCqPafYRZkGyDSTFtaP

Estas son las credenciales de nuestra aplicación y del usuario para que podamos utilizar la API. La idea es que las primeras dos son las identificatorias de la aplicación, mientras las segundas son del usuario que está usando la aplicación en cuestión, esto es así porque podríamos imaginar una aplicación que tiene muchos usuarios registrados, y cada uno de ellos le da permiso a nuestra aplicación para que accedamos a sus datos. Si en algún momento, ese usuario decide que no quiere que accedamos más, sólo debe entrar en las aplicaciones autorizadas de su cuenta y quitarla.

¡Hola mundo!

Ahora que tenemos nuestras credenciales, estamos listos para hacer la primer aplicación sencilla que lea desde los streams públicos de twitter, para esto, vamos a crear un archivo .py simple que contenga lo siguiente:

import tweepy

# Variables that contains the user credentials to access Twitter API
access_token= "607301812-dtFJPuuzrerLZVgmtq3OLnvF24rNLWWymCBnDYa2"  
access_token_secret= "QiIR75pbnORW6Tk1sxmuRv1eBsaCqPafYRZkGyDSTFtaP"  
consumer_key= "yaYQWMpc5IRK4uJ6a1rOafROQ"  
consumer_secret= "lKaj2tVXbiEyexEBCNAbz8UTGcCJNAvkc7kYJEC02EXZceedCk"


class TweetHandler(tweepy.StreamListener):  
    """
    Simple class that handles the on_status event and prints the
    text, if the text contains a funny character that raises an
    exception, we show that on the screen and move on.
    """
    def on_status(self, status):
        try:
            print(status.text)
        except:
            print('Tweet with a weird character')
        finally:
            return True


if __name__ == '__main__':  
    listener = TweetHandler()
    auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
    auth.set_access_token(access_token, access_token_secret)

    print("Mostrando stream para el tag #funnycats")

    stream = tweepy.Stream(auth, listener)
    stream.filter(track=['funnycats'])

Guardamos el archivo y lo ejecutamos desde la consola. La salida va a mostrar todos los tweets que contengan el tag #funnycats. Eso es todo, con un par de líneas ya pudimos conectarnos a la API de Twitter y traer todos los tweets públicos que usen el tag que nosotros le solicitamos.

Explicación

La clase TweetHandler, que extiende la clase StreamListener del paquete tweepy, es la que contiene todos los métodos que la API de Twitter tiene para ofrecernos, en nuestro caso, sobreescribimos el método on_status que es el que se llama cuando se recibe un mensaje.

Envolvemos la acción de imprimir el estado en un bloque try/catch porque algunos tweets contienen caracteres especiales que nuestro cliente básico no puede interpretar, por ejemplo, los emojis que son utilizados. En caso de que pase eso, imprimimos el mensaje correspondiente o nuestra aplicación moriría, algo no deseable.

Fuera de la clase, a partir de la línea if __name__ == '__main__':, creamos un objeto del tipo TweetHandler que será el que se utilice cuando ocurra alguno de los eventos dentro de la API.

Luego creamos un objeto de autenticación que crea primero el acceso de nuestra aplicación y después utiliza las credenciales OAuth del usuario asociado, que en nuestro caso somos nosotros mismos.

Por último, creamos un stream utilizando el objeto que gestionará los tweets y las credenciales de acceso y llamamos la función filter con el parámetro track que indica qué es lo que debemos filtrar, en nuestro script es funnycats.

Palabras finales

Podemos ver que con muy pocas líneas, fuimos capaces de crear un cliente básico de twitter que nos permita recibir todas las noticias sobre un tema particular en tiempo real. Con ese conocimiento básico y la documentación de tweepy podremos construir aplicaciones con mucha más complejidad, como haremos más adelante.

Como siempre, si tenés una idea o un proyecto que está dando vueltas en tu cabeza, ya sea diseño, un sitio, o una aplicación móvil, no dudes en ponerte en contacto con nosotros a contacto@cign.io.

¡Hasta la próxima!