logoCoderhouse.png
By Oscar Lopez • noviembre 25, 2015

Node.js: Crea tu propia aplicación en tiempo real

¡Buenas a todos! Soy Oscar López,  profesor de Fullstack en Coderhouse y desarrollador Node.js en Despegar, y les traigo este post para mostrarles como hacer rápidamente una aplicación que extrae palabras clave de Twitter con Node.js

Node.js es la herramienta ideal para realizar aplicaciones de red, tales como una API, un chat, servidor web, monitores de aplicaciones y muchas otras más.

El crecimiento de Node.js y JavaScript se hace notar en la cantidad de librerías que se crean cada día en github y en el mercado con la cantidad de personas que cada vez más programan aplicaciones web utilizando Node.js.

Dicho todo esto ¡Empecemos!

1° Setup Twitter App

Para hacer esta aplicación empecemos por crear una carpeta que contenga el proyecto y luego instalar la librería que nos permitirá conectarnos al stream de twitter.

En la terminal

mkdir twitter-app && cd twitter-app

npm init para indicar los datos de la aplicación (Nombre de la app, versión, licencia)

npm install --save node-tweet-stream (Agrega la librería como dependencia del proyecto)

npm install twitter

2° Iniciar la aplicación

Tengan en cuenta que necesitarán una API key de twitter para que funcione el proyecto. Para crearla deben crearse una cuenta de desarrollador y  luego crear una aplicación de twitter.

twitterconsole

Para crear la App, tendrás que definir un objeto TwitterCollectorAPP que contendrá la configuración de la librería de twitter y futuras librerías para nuestro proyecto.

initScript

Una vez que tengan los datos de la configuración de twitter pueden crear el archivo que contenga la aplicación y setearle los mismos.

"use strict";
var TwitterCollectorAPP = {
init: function() {
var TwitterStream = require("node-tweet-stream");
this.twitter = new TwitterStream({
consumer_key: 'TU CONSUMER KEY ',
consumer_secret: ' TU CONSUMER SECRET',
token: ' TU TOKEN',
token_secret: 'TU TOKEN SECRET '
});
}
};

3° Trackeando Tweets

Node.js es una gran herramienta para aplicaciones en Real Time, en gran parte por su Stream API. En este caso, al conectarnos a Twitter tenemos que mantener una conexión constante, por este motivo no es útil un HTTP convencional y necesitamos una aplicación de red que maneje streams. Si bien esto es posible con otros lenguajes como Java y .NET (de hecho existen librerías de twitter para estos), no es tan fácil o natural como en Node.js (Warning! Node.js no es un lenguaje de programación, es un entorno de programación en la capa del servidor basado en el lenguaje de programación Javascript).

Si quieren saber más pueden ver cómo consumir la Streaming API de Twitter ingresando aquí.

La librería que utilizamos particularmente para este proyecto usa este recurso, que sirve para trackear o seguir todos los tweets que tienen una keyword (palabra clave en particular).

Para consumir los tweets, define un método track que recibe un array de keywords a trackear en Twitter. Este utiliza el método track de la librería de Twitter que recibe un String.

twitterapp2

"use strict";
var TwitterCollectorAPP = {
init: function() {
var TwitterStream = require("node-tweet-stream");
this.twitter = new TwitterStream({
consumer_key: 'XXXXX',
consumer_secret: 'XXXXX',
token: 'XXXXX',
token_secret: 'XXXXXXX'
});
},
track: function(keywords) {
var _this = this;
keywords.forEach(function(keyword) {
_this.twitter.track(keyword);
});
}
};

4° Visualizar tweets

Para poder consumir los tweets utilizando la Streaming API es necesario escuchar un evento, el evento que notifica la llegada de un tweet que contenga la keyword que especificamos.

Ya que Node.js también usa event-driven model, no es casualidad que la librería también lo haga.

Para poder escuchar estos eventos inicializamos la aplicación y definimos los siguientes listeners.

listeners

TwitterCollectorAPP.init();

TwitterCollectorAPP.twitter.on('tweet', function(tweet) {
console.log(tweet);
});

TwitterCollectorAPP.twitter.on('error', function(error) {
console.log(error);
});

TwitterCollectorAPP.track(["coderhouse", "nodejs"]);

Con este código lo que logramos es registrar dos listeners que escuchan dos eventos. Uno es tweet y otro error.

En el callback del evento tweet, recibo el objeto que representa un tweet exactamente igual a como lo envía twitter.

En el evento error manejo errores como el límite de request de las apis, tokens inválidos, permisos y errores con la streaming API.

La última sentencia es la que le solicita a twitter que establezca una conexión y notifique todos los tweets que contengan la palabra clave coderhouse o nodejs.

5° Real Time Test

Ya estamos aptos para correr la aplicación y ¡obtener todo los tweets que queramos!

Ubicados en la carpeta de la aplicación (twitter-app) corremos el siguiente comando.

startApp

node app.js app.js

Si traqueamos una keyword muy importante, probablemente, al segundo van a ver el objeto tweet.

tweet

Si quieren probar un mensaje desde su cuenta y verlo en la consola, es más fácil si colocan una keyword poco frecuente. En mi caso elegí TestNodeJS.

testStreamingApi

Hice click en el botón Twittear e instantáneamente apareció el siguiente tweet en mi consola.

tweetMio

7° Conclusión

Es muy fácil solucionar un problema cuando utilizas la herramienta es la adecuada. En este caso en particular, para el desarrollo de una aplicación real time, Node.js es la herramienta ideal para manejo de aplicaciones de red. También es una excelente herramienta para el manejo de eventos, entrada y salida (I/O).

Espero que puedan ejecutar todos los ejemplos con facilidad, porque la idea es que se sientan cómodos con la herramienta.

8° Siguientes pasos

Con esto ya podemos hacer muchas funcionalidades, podemos guardarnos todos los tweets, podemos hacer estadísticas, podemos mostrarlos por pantalla.

Dejo el código en mi GitHub

 

¡Queremos conocer su experiencia! Los leemos y nos vemos el próximo mes con un nuevo post ¿Sugerencias?