Puede sonar complejo para algunos, pero engancharse de Twitter es bastante simple y si encima usamos una biblioteca para NodeJS se vuelve extremadamente simple, por eso hago este post, para los que pensaban que era un despelote puedan ver lo simple y divertido que es.

Objetivo

Supongamos que queremos ver lo que sucede en Twitter y bajo un texto en un Tweet responderle alguna locura, cualquier Tweet, alguien nos dice algo exacto que esperamos y le respondemos …

Primero deberíamos conectarnos por Streaming, de esta manera estamos en “escucha” continua de lo que sucede y vamos leyendo lo que nos “dicen”, una vez que nos tuitean lo que esperamos, respondemos haciendo un tuit en modo “Respuesta”.

Creando una aplicación en Twitter Dev

Antes de meterme en tema, para engancharnos a Twitter necesitamos crear una aplicación en Twitter para que el último nos de unas claves secretas con el acceso.

Así que, entremos a dev.twitter.com y creemos una app yendo a SignIn, nos logeamos, vamos al mismo botón y hacemos click en Mis Aplicaciones.
Le damos al Create an Aplication, y llenamos toda la info (callback URL lo dejamos en blanco) y click a Crear.
Después sólo queda ingresar a la nueva app y generar las claves.

Listo!, tenemos la app creada y sus claves, ahora nos creamos un app.js en nuestro local y vamos a la parte divertida:

Escuchando la User Stream API

Para simplificar la comunicación con Twitter desde NodeJS vamos a usar la biblioteca Tuiter creada por Dan Zajdband (ahí van a encontrar más info de como usarla), pero vamos a arrancar con nuestro objetivo.

Bajamos Tuiter desde NPM en nuestro proyecto:

npm install tuiter
 

Y abrimos el app.js para hacer la lectura del Streaming :)

//Acá reemplazamos las claves que generamos para nuestra app en dev.twitter.com

var keys = {
    "consumer_key" : "blablabla"
  , "consumer_secret" : "blablabla" 
  , "access_token_key" : "blablabla"
  , "access_token_secret" : "blablabla"
};

//referenciamos al módulo Tuiter

var tu = require('tuiter')(keys);

//Nos ponemos en escucha de nuestra frase

tu.filter({track: 'hola twitter stream'}, function(stream){
  
  //cuando aparezca un tweet para nosotros, se dispara el callback

  stream.on('tweet', function(data){

    //Alguien nos Tuiteó "hola twitter stream"!

    console.log(data);
    
    //acá vamos a responder el tweet

    responder(data);
  });
});
 

Tengamos en cuenta que estamos utilizando la User Stream API por lo que solo tenemos una cuenta (y una conexión a la vez) para hacer los seguimientos, la cuenta con la que creamos las claves. Si quisiéramos utilizar varias cuentas deberíamos usar la Site Stream API, pero no está abierta al público por lo que hay que pedir acceso a Twitter.

Respondiendo un Tweet

Ahora nos queda responder ese Tweet para completar nuestro objetivo, pero para poder responder necesitamos saber que usuario nos habló y que Id tiene el Tweet. Hasta ahora sabemos que en data tenemos el Tweet, este último es un JSON con la información detallada del Tweet:

Si vemos el detalle, en la propiedad id_str y user.screen_name vamos a tener el id del Tweet y el usuario que envió el Tweet respectivamente, asi que vamos a responderle implementando la función responder()

function responder(tweet){
  var usuario = tweet.user.screen_name,
    id = tweet.id_str;

  tu.update({
    status: '@' + usuario + ' hola de vuelta!',
    in_reply_to_status_id_str: id
  });
}
 

De donde saqué el “update” y los parametros?, bueno Tuiter implementa todos los metodos de la API, solo nos fijamos que “post” o “get” es el de twitter y que parametros recibe, por ejemplo: documentación del update

Para poder enviar Tweets tenes que cambiar los permisos de tu app en dev.twitter.com de Read-only a Read and Write, sino te va a tirar un error de “Prohibido”

Objetivo cumplido!, escuchamos una frase y respondemos con un tweet, y no fue nada complicado.

Dejo el Showcase de apps que están utilizando la biblioteca Tuiter, donde van a encontrar también TuiterFighter! (una pelea entre palabras que arme hace unas semanas utilizando Tuiter) :)

Links útiles

He aquí app.js completo

var keys = {
    "consumer_key" : "blablabla"
  , "consumer_secret" : "blablabla" 
  , "access_token_key" : "blablabla"
  , "access_token_secret" : "blablabla"
};

var tu = require('tuiter')(keys);

tu.filter({track: 'hola twitter stream'}, function(stream){

  stream.on('tweet', function(data){
    responder(data);
  });

});

function responder(tweet){
  var usuario = tweet.user.screen_name,
    id = tweet.id_str;

  tu.update({
    status: '@' + usuario + ' hola de vuelta!',
    in_reply_to_status_id_str: id
  });
}