Invisible o desaparece (Consumiendo la API de Twitter)

enredoEmpezamos a desenredar el ovillo.

Como si de una receta se tratara, los ingredientes que entran en juego en este proyecto son:

1) Consultar los mensajes que se publican en Twitter.
2) Sistema que nos diga si un mensaje es bueno o malo
3) Aparato que conecte por bluetooth a la lámpara
4) Alguna forma de comunicar el "sistema" que nos dice si un mensaje es bueno o malo, con el "aparato" que conecta por bluetooth a la lámara.

Pues empezamos.

Consultar los mensajes que se publican en Twitter es bastante fácil, de hecho, el servicio de microblogging expone dos tipos de APIS para hacer consultas según tus necesidades: REST API y Streaming API. REST API, según la propia documentación, proporciona acceso a leer y escribir datos de Twitter, escribir un mensaje nuevo, leer los datos de un usuario y normalmente se usa autentificándose (mediante OAuth). Sin embargo, la propia documentación te recomienda: Si tu intención es monitorizar o procesar los Tweets en tiempo real, considera utilizar la Streaming API.

Utilizar una u otra es, efectivamente, una cuestión de cómo quieres enfocar el proyecto. En nuestro caso, en principio, nos gustaba más la idea de dejar la lámpara encima de la mesa, o en cualquier sitio y que se fuera iluminando en tiempo real con las opiniones.

Para tener más información sobre la utilización de la API de Twitter te aconsejo que leas la documentación oficial. Está muy bien explicado, en varios idiomas, con ejemplos, con esquemas y enlaces a bibliotecas que te pueden facilitar el trabajo en cualquier lenguaje en el que programes.

Nosotros decidimos hacer esta parte en NodeJS.

Por supuesto la elección ha sido subjetiva (no me voy a poder a discutir si ha sido la mejor, o la peor). Nosotras, en concreto, lo programamos en NodeJS por tres razones (y una de bonus):
1) Mi pasado como front-end developer, más de cinco años programando en JavaScript, hace que me sienta muy cómoda con el lenguaje.
2) Tanto si queríamos plantear una arquitectura en la que el "cacharro" que conecte con la lámpara via bluetooth sea el que haga directamente la petición a la API de Twitter, como si de un modo más elegante, queremos alojar esta parte en algún tipo de servicio que corra en background (en Azure), NodeJS será una solución que podremos reutilizar.

arqu
3) Tanto para Visual Studio como para Visual Studio Code, tenemos total integración con este lenguaje.
4) Tenemos este paquete de NPM que nos hace la interaccion con la API de Twitter (también la de Streaming) el procedimiento más sencillo del mundo.

Todo el código de la solución esta publicado en este repositorio (mío) de GitHub.

En concreto, el archivo que utiliza la API de Twitter y hace esta consulta es este: server.js

Para que no te abrumes con el código, hago una extracción de las líneas importantes:

var twitter = require('twitter'); //enlazamos el paquete npm de twitter var tweetsTopic = "LaPalabraQueQuierasBuscar"; //ya veremos cómo informar de esta palabra dinámicamente var tweetsLanguage = "es"; //"es", "en", "fr", "pt" //sólo queremos resultados en español function search() { var myJSON = { "documents": [] }; stream = client.stream('statuses/filter', { track: tweetsTopic, language: tweetsLanguage }); stream.on('data', handleTweet); //cada vez que recibimos un tuit hacemos un pequeño "tratamiento" para limpiarlo stream.on('error', function (error) { console.log('search: '+error); }); analyzeTweets(); //nos encargaremos más adelante de saber qué hace esta función exactamente (analiza el sentimiento) }

El archivo completo con este código finalmente ha terminado en un WebJob en Azure. Un WebJob es un servicio muy sencillito que nos permite ejecutar tareas en segundo plano dentro de una Web Application.

Como ves en la documentación, crear un WebJob es muy asequible, tan sólo hay que añadir uno nuevo y subir el código dentro de un fichero .zip que puede contener cualquier tipo de script. Nuestro fichero .zip también está subido en github, por si quieres ver la estructura del mismo. (package.zip)

 

webjobConectar mi Azure WebJob con algún dispositivo no es algo que nos preocupara seriamente: tenemos muchos servicios IoT en Azure, o a las malas, comunicarse con algún otro mecanismo no va a resultar muy complicado.

Lo que a estas alturas nos resultaba un verdadero reto es: ¿cómo conseguimos saber si los mensajes de los tuits son buenos o malos?

¡No te pierdas el próximo post!

Isabel Cabezas
@isabelcabezasm
Technical Evangelist

 

(Editado) Links a todos los post de la serie:

Invisible o desaparece (El principio o cómo se nos ocurrió la idea)
Invisible o desaparece (Consumiendo la API de Twitter)
Invisible o desaparece (Interpretando los tuits)
Invisible o desaparece (el Internet de los Cacharritos)
Invisible o desaparece (comunicándonos con las nubes)