El Twitterverse

Nos guste o no, Twitter es una fuerza a tener en cuenta. Millones de personas utilizan Twitter para hablar sobre acontecimientos generales en el mundo y sus vidas. Grandes eventos como convenciones, elecciones, y levantamientos tienen la costumbre de chocar los servidores de Twitter.

Si usted es un hacker DIY ávido y quiere saber cómo utilizar ese flujo masivo de los medios sociales digitales, este es el tutorial indicado.

Hay un montón de divertidos proyectos construidos en torno a twittear algo que sucede. Hoy, le ofrecemos una alternativa: hacer que algo suceda cuando se produce un Tweet específico.

Se trata de un proyecto básico que le guiará a través de los pasos para obtener un LED parpadeante cuando un hashtag específico aparece en la cuenta de Twitter. Mientras que un LED parpadeante podría no ser el más emocionante de los resultados, conectar Twitter con el mundo físico le ayudará a empezar en la creación de ese “robot Twitter controlado”.

twraspbe1

Parpadeo de un LED cuando un hashtag especifico aparece en Twitter

Sugerencias

Necesitamos construir un circuito de LED simple para conectarlo a los pines GPIO de la Raspberry PI. Asegúrese de estar familiarizado con los conceptos y funciones de LEDs y resistencias.

Componentes Necesarios

Usted tendrá que tener un sistema operativo Linux corriendo en su Raspberry Pi de alguna forma. Le recomendamos la versión más reciente de Raspbian, ya que viene pre-cargada con las librerías de Python y pines GPIO. Además, el RPi tendrá que estar conectado a Internet para que pueda monitorear el flujo de Twitter. Esto se puede lograr mediante un cable Ethernet o un adaptador USB WiFi. Si te gustan las listas de verificación, esto es para ti:

  • LED Rojo 5mm
  • Resistencia 330 Ohm 1/6th Watt PTH
  •  Cables Jumper Premium 6″ M/F Pack de 10
  • CAT 6 Cable – 5ft
  • Cargador de pared – 5V USB (1A)
  • USB microB Cable – 6 Foot
  • Tarjeta MicroSD con adaptador – 8GB
  • Raspberry Pi Modelo B

Si usted no está planeando utilizar SSH para acceder a su RPi, también necesitará un teclado y un monitor.

Conexión Hardware

Conecte un LED a la Raspberry Pi siguiendo este esquema:

twraspbe2

Además, tendrá que conectar el resto de los periféricos (teclado, monitor, tarjeta SD, Ethernet / WiFi) a su RPi. Si no está utilizando un teclado y un monitor, entonces tendrá que encontrar alguna manera de acceder a su RPi, como es el caso de SSH.

twraspbe3

Pines GPIO conectados al LED

Registre su Twitter App

Con el fin de interactuar con Twitter (incluyendo la búsqueda, seguimiento, publicación, etc.), usted tendrá que registrar su solicitud. Esto se logra al ir a https://dev.twitter.com/.

Haga clic en “Iniciar sesión” situado en la parte superior derecha de la pantalla e introduzca sus credenciales de Twitter (también se puede registrar si usted no tiene una cuenta de Twitter).

twraspbe4

Una vez que haya iniciado sesión, haga clic en su icono de usuario y seleccione “Mis Aplicaciones”.

twraspbe5

Haga clic en el botón “Crear una nueva aplicación”, y se le presentará con un formulario para llenar sobre su aplicación. Rellene los campos de nombre y descripción. Por “Sitio Web”, usted puede poner algo al azar, como http://github.com o alguna otra cosa que parezca legítima. En la parte inferior de la página, haga clic en la casilla para aceptar las normas, rellene el Captcha y haga clic en el botón “Crear la aplicación de Twitter”.

twraspbe6

Una vez completado, se presentará un dashboard (panel de configuración) para su aplicación registrada. Es necesario crear un token de acceso, así que haga clic en el botón “Crear mi token de acceso” en la parte inferior de la pantalla.

twraspbe7

Espere unos segundos y luego actualice la página. Debería ver una sección titulada “Su token de acceso” en la parte inferior. Copia “Consumidor”, “secreto del Consumidor”, “token de acceso” y “acceso secreto token.” Necesitaremos estos para nuestra aplicación. Tenga en cuenta que hemos creado esta aplicación Twitter como un ejemplo. Se habrá borrado el momento de leer esto, así que no se trata de utilizar nuestros tokens!

twraspbe8

 Instalar los paquetes requeridos

Si está utilizando una relativamente nueva versión de Raspbian, ya debería contener Python y los módulos necesarios para hablar con los pines GPIO del RPi. Todavía tendremos que instalar módulos para buscar Twitter con Python. Varios existen, pero le recomiendo Twython si usted está siguiendo este tutorial. Arranque el RPi y conéctese a Internet (Ethernet, WiFi, etc.). Para instalar Twython en su RPi usted debe abrir una ventana de la consola e ingresar las siguientes líneas de comandos:

sudo apt-get update
sudo apt-get install python-pip
sudo pip install twython

Código

Con nuestros paquetes instalados, podemos escribir nuestro programa. Abre un editor de texto y haz un nuevo script en Python. Por ejemplo:

nano TweetBlinky.py
En el nuevo archivo, agrega el siguiente código:
import time
import RPi.GPIO as GPIO
from twython import TwythonStreamer
# Search terms
TERMS = '#yes'
# GPIO pin number of LED
LED = 22
# Twitter application authentication
APP_KEY = 'erRilYZd8UzsXEFycmg'
APP_SECRET = 'Yt0fGlNvCyr1sFaC6ymdNhphHchaWbz0ECdotEXIQQ'
OAUTH_TOKEN = '1969690717-6a2RgVPXanSBaAjuie7EmUWZh78me8UZ6UxcM8V'
OAUTH_TOKEN_SECRET = 'UIrYV2XbYZC3vHzer6ZxIDwqVa0VvynQLDJYnSQV0R3xt'
# Setup callbacks from Twython Streamer
class BlinkyStreamer(TwythonStreamer):
        def on_success(self, data):
                if 'text' in data:
                        print data['text'].encode('utf-8')
                        print
                        GPIO.output(LED, GPIO.HIGH)
                        time.sleep(0.5)
                        GPIO.output(LED, GPIO.LOW)
# Setup GPIO as output
GPIO.setmode(GPIO.BOARD)
GPIO.setup(LED, GPIO.OUT)
GPIO.output(LED, GPIO.LOW)
# Create streamer
try:
        stream = BlinkyStreamer(APP_KEY, APP_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET)
        stream.statuses.filter(track=TERMS)
except KeyboardInterrupt:
        GPIO.cleanup()

Como alternativa, puede descargar un archivo zip de la secuencia de comandos aquí.

IMPORTANTE: Usted tendrá que cambiar los tokens de autenticación de Twitter! En este momento, ellos se ponen a mi ejemplo de aplicación. Copie las cuerdas en la página de su dev.twitter.com (son necesarias las comillas simples):

APP_KEY = ‘<Your Consumer Key>’
APP_SECRET = ‘<Your Consumer Secret>’
OAUTH_TOKEN = ‘<Your Access Token>’
OAUTH_TOKEN_SECRET = '<Your Access Token Secret>’'

Guarde y salga (ctrl + X and “Y” si está usando nano)

Disección del Código

Sólo le podíamos dar el código para copiar y pegar en su RPi (lo que hicimos). Sin embargo, la secuencia de comandos de Python es un poco más complicado que simplemente hacer parpadear un LED, por lo que debemos tomar un momento para hablar de lo que está pasando.

En la parte superior del código, importamos nuestros módulos de Python necesarios. Necesitamos “tiempo” para llamar a nuestro ½ segundo de retraso cuando parpadeamos nuestro LED. “RPi.GPIO” es un paquete Python pre-construido para el Raspberry Pi, que nos da acceso a los pines GPIO. Es por esto que se recomienda la Raspbian de Linux. Por último, “Twython” es el paquete que nos conecta a Twitter y que nos permite monitorear la corriente, la búsqueda, y post.

import time
import RPi.GPIO as GPIO
from twython import TwythonStreamer

A continuación, añadimos nuestras constantes globales. “TERMS” sostiene una cadena (o cadenas) de cosas que queremos buscar en Twitter. El LED contiene el número de pin para el encabezado GPIO. Tenga en cuenta que este es el número de PIN del header y no el número GPIO. Las constantes de autenticación de Twitter tienen las cadenas de tokens que copiamos de la página dev.twitter.com. Recuerde: usted tiene que cambiar esta sección para sus cadenas específicas de tokens de Twitter.

# Search terms
TERMS = '#yes'
# GPIO pin number of LED
LED = 22
# Twitter application authentication
APP_KEY = ‘<Your Consumer Key>’
APP_SECRET = ‘<Your Consumer Secret>’
OAUTH_TOKEN = ‘<Your Access Token>’
OAUTH_TOKEN_SECRET = '<Your Access Token Secret>’'

La siguiente sección es el quid del monitor Twitter. Si usted nunca ha tratado con “herencia de clase” o  “callbacks” antes, se recomienda repasar  esos conceptos con el fin de entender realmente esta sección del código.

Creamos una nueva clase que hereda TwythonStreamer (una clase dentro Twython). Mientras TwythonStreamer maneja un montón de cosas en el fondo (incluyendo la comunicación con la API de Twitter), sólo estamos preocupados por el callback on_success (). Este es un método especial que es llamado cada vez que un Tweet aparece a juego con los criterios de los términos de búsqueda. Lo importante es entender que no llamamos a este método desde dentro de nuestro script. Una fuerza externa (por ejemplo, hilo, programa) llama on_success () por nosotros. Sólo tenemos que definir lo que sucede cuando se llama a ese método. Para usarlo, creamos un objeto BlinkyStreamer y Twython se encarga del resto.

Dentro de on_success () es lo que queremos que suceda cada vez que se produce un exitoso golpe de Twitter. En este caso, nos aseguramos de que hay un campo “texto” dentro del Tweet (lo que significa que el Tweet contiene texto real de un usuario), e imprimimos el texto del Tweet a la consola y hacemos parpadear el LED para el ½ segundo.

# Setup callbacks from Twython Streamer
class BlinkyStreamer(TwythonStreamer):
        def on_success(self, data):
                if 'text' in data:
                        print data['text'].encode('utf-8')
                        print
                        GPIO.output(LED, GPIO.HIGH)
                        time.sleep(0.5)
                        GPIO.output(LED, GPIO.LOW)

Para aquellos de ustedes que son de “código inteligente”, podrían decir: “Hey, espera un minuto! Que la función sleep está bloqueando! No puedo recibir los tweets mientras parpadea el LED ” y estaría en lo correcto. Esto es sólo una manera simple y plana para monitorear tweets. Para hacer esto “adecuadamente”, podría establecer un hilo separado en Python que monitorea los Tweets y las pone en cola. Otro hilo leería esa cola y parpadearía el LED tan rápido como los Tweets se ponen en la cola.

La sección de configuración GPIO debería parecerle familiar si alguna vez ha jugado con un Arduino u otros microcontroladores. Tenemos que decirle a la Raspberry Pi que vamos a hacer referencia a sus cabeceras GPIO por los números de la tarjeta (pin 1, pin 2, pin 3, etc.), que queremos que nuestro pin LED sea una salida, e inicializar el LED apagado (LOW lógico).

# Setup GPIO as output
GPIO.setmode(GPIO.BOARD)
GPIO.setup(LED, GPIO.OUT)
GPIO.output(LED, GPIO.LOW)

Por último, creamos una instancia de nuestra clase BlinkyStreamer y dejamos que haga lo suyo. Cuando creamos un objeto TwythonStreamer (recuerde: nuestro BlinkyStreamer hereda TwythonStreamer), tenemos que darle de comer a la información de autenticación de Twitter que hemos creado antes. Twython utiliza esta información para conectarse a los servidores de Twitter. Proporcionamos el método de filtro () dentro TwythonStreamer, algunos términos de búsqueda y el streamer comienza a monitorear Twitter. Cada vez que uno de los términos aparece en la cuenta de Twitter, se llama al método on_success () (definido anteriormente).

# Create streamer
try:
        stream = BlinkyStreamer(APP_KEY, APP_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET)
        stream.statuses.filter(track=TERMS)
except KeyboardInterrupt:
        GPIO.cleanup()

Debido a que el método de filtro () es el bloqueo, el programa se ejecutará por siempre, hasta que lo eliminemos manualmente. Podemos terminar el programa pulsando las teclas CTRL + C. Envolvemos los streamers calls en una sentencia try/catch para que los pines GPIO puedan ser liberados cuando le decimos a Python que salga. Si no hacemos esto, Python emitirá una severa advertencia de que los pines GPIO están en uso por otro programa.

¡Run!

Esto es importante. Para utilizar los pines GPIO desde un script Python, es necesario ejecutar la secuencia de comandos con privilegios de superusuario. Entonces, ingrese el siguiente comando:

sudo python TweetBlinky.py

Siéntese y vea la diversión! Mientras la gente emita el omnipresente hashtag #lol, podrás ver los Tweets aparecer en la consola.

Exención de responsabilidad: estamos hablando de Twitter. No podemos hacer ninguna garantía respecto a la idoneidad de los comentarios que pudieran aparecer en su pantalla

twraspbe9

Ahora, dele una mirada a su Raspberry Pi. El LED que conectó debería parpadear con cada Tweet entrante que contiene el hashtag #lol.

twraspbe10

 El LED parpadea cada ½ segundo en un Tweet entrante con el hashtag apropiado

 Cuando quiera cerrar el programa, presione CRTL+C

Ir más lejos

Así que, ¿tiene algo que brilló para notificarle de Tweets? ¡Excelente! El LED es sólo un comienzo. Casi cualquier cosa puede ser conectada a la Raspberry Pi para notificarle de la actividad de Twitter. Deje que su imaginación vuele…

twraspbe11

¿Una bocina de automóvil para que le avise de los tweets entrantes? ¡¿Por qué no?!