Monitorear Tweets en Tiempo Real - API de Twitter en Python

Índice

Introducción:

Buenos días, buenas tardes y buenas noches. En el día de hoy les traigo un articulo un poco corto, pero que nos puede servir para el desarrollo de una gran variedad de aplicaciones.

En el día de hoy usaremos la API de Twitter para monitoriar o procesar Tweets en tiempo real. 

Lo que haremos sera escribir un pequeño programa que se conecte a la API de Twitter, luego en un archivo de texto iremos guardando los Tweets que se vallan publicando con un determinado hashtag (#). Todo en tiempo real, es decir, aceptando nuevos Tweets publicados.

Imagen relacionada

Aplicaciones de Twitter:

Para utilizar la API de Twitter, primero necesitamos crear una Aplicación en Twitter. A continuacion, usare una parte de un articulo escrito hace tiempo en este mismo blog en donde se explican los pasos para crear una aplicación en Twitter.

  • Entrar en el siguiente link https://apps.twitter.com/.
  • Ir al boton "Create New App"
  • Llenar los campos y aceptar las condiciones de Uso. (No probé, pero si no tienen web pueden probar con su cuenta de Facebook que leí que funciona)
  • Una vez creada la App deberán ir a la pestaña "Permissions" y cambiar los permisos a "Read, Write and Access direct messages"
  • Luego vamos a "Keys and Access Tokens" y presionamos sobre "Create My Access Token"


    App en Twitter



    Ya tenemos todos los datos necesarios del lado de Twitter (Puedes verlo en la pestaña "Keys and Access Tokens".


    Muy bien, todas estas llamas y Tokens, serán necesarias para el uso de la API.

    El Atrapa Tweets:

    "El Atrapa Tweets", esa es la manera en la que me referiré al programa.

    Perfecto, una vez tengamos las llaves y los token, ya podemos proseguir con el atrapa tweets.

    Para la creación del atrapa tweets, necesitamos disponer de un modulo de twitter, la verdad es que existe una gran variedad de módulos, pero yo e elegido a "tweepy".

    Podemos descargar "tweepy" desde nuestra linea de comando utilizando PIP. De la siguiente manera se puede descargar "tweepy" desde windows:

    Muy bien, una vez instalado el modulo "tweepy", podemos abrir nuestro editor de texto preferido, y empezar con la creación de nuestro atrapa tweets.


    Lo primero que haremos, como en la mayoría de veces, es importar los módulos que utilizaremos:

    Para poder atrapar Tweets en tiempo real, se deberá usar la API de Streaming en vez de la de la REST, por ello importamos la clase StreamListener, para poder personalizar la forma en que se procesan los datos entrantes.

    Luego de importar los módulos que utilizare, definiré una clase llamada "MyListener":

    Mi clase "MyListener", heredara métodos de la clase StreamListener. En el método "on_data" definimos un bloque de código que lo que hará sera abrir un fichero llamado "Tweets.json", luego en este fichero serán plasmado los Tweets. Pero ¿Que Tweets? En un momento los especificaremos.
    Bueno, luego e escrito algunas cosas en caso de errores.

    Muy bien, esta clase es muy importante ya que esta sera la que "escuchara" o "atrapara" todos los datos que posteriormente serán plasmado en un archivo de formato json. Pero que datos atrapara mi clase? Bueno, lo que haremos sera obtener todos los Tweets que vayan siendo publicados con el hashtag "#Python", estos Tweets serán los datos que atrapara la clase.

    Muy bien, para obtener esos datos, haremos uso de un filtro, pero antes de hacer uso de ese filtro necesitaremos loguearnos con nuestras credenciales (Las llaves y los tokens) que obtuvimos al momento de crear nuestra aplicación en Twitter. 

    Esta parte es como cuando vas a iniciar sesión en Twitter. Como hago es guardar las llaves y los tokens en variables. Creo una variables auth, en la cual llamare al método "OAuthHandler", que es como el que maneja el acceso, a este método le paso como argumentos las variables consumer_key y consumer_secret.

    Luego pido acceso con el método set_access_token, al cual le paso como argumento: access_token y access_secret.

    Luego de esto, creamos una instancia de API ala cual le pasamos como argumento la variable auth. Esta instancia, es la que nos permitirá hacer todas las funcionalidades de Twitter, les sugiero que utilicen el método dir() para que vean todos los métodos que podemos usar.
    Perfecto, ya tenemos acceso a Twitter, lo ultimo que haremos sera filtrar y obtener todos los datos:

    Perfecto, en esta parte especificamos el filtro, en este caso quiero recolectar los tweets que se vallan publicando con el hashtag #Python

    Luego de esto, ya estamos aptos para ejecutar nuestro "Atrapa Tweets".

    Luego de verificar, y obtener acceso, el programa creara un fichero JSON en donde se guardaran los Tweets, en la consola el programa no se detendrá, ya que no dejara de escuchar esta que se cierre la conexión.


    Estas 2 son imágenes diferente, pueden observar como el peso del archivo incrementa a medida que se recolectan más tweets.

    ¿Que esperas? Abre el archivo:

    Observen que los tweets son separados por saltos de linea, cada linea es un tweet diferente. Hasta ahora, e atrapado 35 tweets.

    Perfecto, espero que le des bueno uso a este programa. Uno de los usos que podemos darle es para la minería de datos.

    ¿Que te paresio? ¿Cuantos Tweets atrapaste? Comparte tu experiencia con nosotros dejando un buen comentario.

    Mi nombre es Luis, y fue un placer compartir mis conocimientos con todos ustedes :D.
    1. Josué dice:

      Hola, excelente tutorial, me ha servido muchísimo.
      Solo una duda, ¿Con qué abres el archivo json?
      Lo he abierto con el editor de textos y con el navegador y en ambos me aparece de una forma bastante dificil de leer (Sin saltos de línea y bastante desordenado).
      ¿Alguna sugerencia?
      Gracias de antemano,

      1. Luis Salcedo dice:

        Hola josué, bueno, el archivo lo e abierto con Sublime Text, debes buscar un editor de texto que pueda leer este formato. Te recomiendo Sublime Text, tiene sintaxis para una gran variedad de lenguajes.

    2. Unknown dice:

      Hola Saludos Me parece un excelente articulo aunque tengo una pequeña duda en vez de recolectar los tweets en un archivo .JSON se podrian almacenar en un archivo .CSV (delimitado por comas)? agradezco su respuesta

    3. Angelo M. dice:

      Excelente aporte! muchas gracias por tu tiempo.

    4. xvxvczxc dice:

      Hola buenas tardes, tengo este problema:

      Traceback (most recent call last):

      File "/home/ax/anaconda3/envs/twitter_IA/lib/python3.7/site-packages/IPython/core/interactiveshell.py", line 2963, in run_code
      exec(code_obj, self.user_global_ns, self.user_ns)

      File "", line 1, in
      import tweepy

      File "/home/ax/anaconda3/envs/twitter_IA/lib/python3.7/site-packages/tweepy/__init__.py", line 17, in
      from tweepy.streaming import Stream, StreamListener

      File "/home/ax/anaconda3/envs/twitter_IA/lib/python3.7/site-packages/tweepy/streaming.py", line 358
      def _start(self, async):
      ^
      SyntaxError: invalid syntax

      no sé que hacer, ayuda porfa!!!

    5. Manu Alén dice:

      Buenas, al ejecutarlo me muestra por pantalla un 401 ¿Cuál es el error?

    6. Unknown dice:

      Perfecto Luis, amigo, Gracias. Me funciono perfectamente.

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    Subir
    White Monkey