¿Cómo trabajar con Twitter desde el FlowEngine?

Introducción

El componente FlowEngine de Plataforma ofrece un gran número de conectores para trabajar con redes sociales. Concretamente, incluye dos componentes: uno para “escuchar” lo que pasa en Twitter (por ejemplo recibiendo los tuits sobre un hashtag o hacer una búsqueda), y otro para publicar tuits:

 

En este post, verás cómo usar estos componentes para:

  • Escuchar lo que se dice en Twitter sobre de un tema.

  • Almacenar la información de un tuit en Plataforma.

  • Publicar un tuit con información recibida desde un servicio externo (OpenWeatherMaps).

Paso 1: Crear APP en Portal Developer en Twitter

Lo primero que debes hacer es crearte una cuenta en Twitter. Una vez creada la cuenta, ve al Portal del Developer de Twitter en https://developer.twitter.com/

Una vez dentro, ve a la sección Apps y dentro selecciona Create an App:

Te pedirá que confirmes que quieres crear una cuenta de desarrollador, y que completes un conjunto de datos. Tras completarlos, te llegará un mail para confirmar que quieres crear una cuenta de desarrollador:

 Tras esto, ya puedes crear tu App y conseguir las Keys:

 

Como indican en la web, debes guardar estas Keys, ya que tendrás que configurarlas en los componentes del FlowEngine:

 

Después de esto, puedes probar el API REST de Twitter pulsando el botón Test an endpoint.

Como se indica, puedes probarlo con el comando:

curl -X GET -H "Authorization: Bearer <BEARER TOKEN>" "https://api.twitter.com/2/tweets/440322224407314432"

 

Tras probar esto, ve al Dashboard. Dentro, podrás configurar tu App.

Ve a la sección Keys and tokens y selecciona Generate Access Token and Secret:

También debes guardarla, junto con el API Key y el API Key Secret:

IMPORTANTE: Hasta hace unos meses, esto era suficiente para terminar la configuración necesaria en Twitter; pero, con el cambio en la política de acceso a las APIs de Twitter, al registrarnos, debes hacerlo con el nivel Essential que no permite el acceso al API 1.1 que es la que usa el componente Node-Red del FlowEngine.

Así que, para que funcione la comunicación con Twitter, tendrás que ir al Portal y solicitar el Apply for Elevated que ya te da permiso para acceder al API v1.1:

 

Te pedirá información para habilitarte el acceso a este nivel, como el uso que queremos hacer. Puedes indicar que quieres probar a recoger tuits con Node-red. 

Paso 2: Configurar Componente Twitter en Flowengine y recuperar y publicar Tuits

Lo primero será tener un usuario en la instancia de Plataforma que quieras usar. Para el ejemplo, usarás el entorno CloudLab de Plataforma (entorno gratuito con fines de experimentación). Así que ve a https://lab.onesaitplatform.com/ y, si no tienes un usuario, créalo con el botón SIGN UP. Ten en cuenta que debes crear un usuario tipo DEVELOPER:

 

Con el usuario creado (recibirás un mail para validar la creación), ya puedes logarte en el Panel de Control de la Plataforma:

 

Una vez dentro, ve a la opción de menú DEVELOPMENT > My Flows:

Si es la primera vez que entras, verás que no tenemos creado un dominio del FlowEngine, así que pulsa el botón + para crearlo:

Dale un nombre y pulsa Create:

Ahora ya puedes ver tu dominio, que por defecto está parado, así que lo primero, arráncalo:

Una vez arrancado, puedes acceder a él con el botón de View It:

 

Finalmente, accede a la Paleta del FlowEngine. Empieza por seleccionar que no quieres crear un proyecto:

Puedes maximizar el área de trabajo con el botón de la esquina derecha:

 

Ahora busca los componentes de Twitter con el buscador y arrastra el de Twitter In al lienzo:

El triángulo indica que debes configurarlo. Para esto, pincha dos veces sobre él para que aparezca la ventana de configuración.

En ella, debes configurar las credenciales de Twitter que obtuviste en el paso 1:

Después, ya puedes configurar lo que quieres escuchar. Por ejemplo, puedes elegir una tendencia. En el ejemplo, vas a elegir #TheBatman en el día de su estreno en España:

 

Después, configura el nodo debug para depurar por consola lo que llega:

Y para probarlo, simplemente haz un DEPLOY:

 

Y verás en streaming los tuits sobre el tópico:

 

Para pararlo, puedes eliminar el criterio de búsqueda.

 

 

Igualmente, podemos publicar un tuit con el componente Twitter Out:

En el FlowEngine, es muy fácil componer una lógica de negocio de modo que, ante ciertos eventos que sucedan (la llegada de un evento a una Entidad/Ontología por ejemplo), se componga y publique un mensaje.

En este sencillo ejemplo, simplemente publicarás un texto. Para eso, usa el componente Inject configurado para inyectar un texto:

Tras esto, haz el despliegue y pulsa el botón del componente Inject.

Tras esto, podrás ver el mensaje:

Paso 3: Almacenar información de los tuits en una Entidad de Plataforma

Si vuelves al ejemplo en el que estabas escuchando lo que se decía sobre The Batman:

y pones un componente debug configurado para que saque todo el objeto msg:

entonces verás en la pestaña debug una estructura como ésta:

Para insertar estos datos en Plataforma, podemos crear una Entidad con estos atributos: topic, payload, lang, tweet, o usar la capacidad de Plataforma para crear una Entidad a partir de un JSON. Esta forma es mucho más sencilla cuando partimos de un JSON, como es el caso.

Desde la pestaña Debug, puedes seleccionar uno de los objetos con el botón Copy value:

Si pegas el contenido en un editor, verás algo como esto:

Como quieres usar este JSON como ejemplo para crear nuestra Entidad, puedes eliminar los atributos dentro del tweet, de modo que quedará una estructura JSON como esta:

{ "topic": "tweets/playlsit", "payload": "robert pattinson as batman &gt;&gt;&gt;&gt;&gt;&gt;&gt;", "lang": "en", "tweet": {}, "_msgid": "31a45aac.7fc556" }

Ahora ve a la opción DEVELOPMENT/My Entities en el Control Panel y selecciona el botón + para crear una nueva Entidad:

Dentro encontramos varias opciones. En este caso, te interesa la opción Create From File para usar el JSON como base para crear tu Entidad:

Al seleccionarla, puedes copiar el JSON que has dejado como plantilla y pulsar el botón Generate JSON-Schema:

Después, pulsa Create y completa los datos de tu Entidad:

Una vez creada, puedes volver al FlowEngine para continuar con tu flujo.

Busca el componente onesaitplatform-insert y arrástralo. Después, configúralo con tu Entidad:

Si lo conectas directamente a la salida de Twitter y debugeas la salida, verás que obtienes un error:

Esto es porque la salida de los componentes en el FlowEngine es el msg.payload, que en tu caso es simplemente un texto:

mientras que el nodo Insert espera una estructura JSON completa como has definido, ya que te interesa almacenar toda la info del tuit, incluido el usuario que tuitea.

La forma de resolver esto es incluir un nodo Function entre ambos, de esta forma:

donde el nodo Function convierte el msg a un payload en la salida:

Si ahora haces el DEPLOY, verás que la inserción es correcta:

Para comprobar que de verdad se está almacenando esta información en una Entidad, accede a la herramienta Query Tool en TOOLS>Query Tool.

Desde allí, puedes consultar los datos almacenados. Basta con que seleccione la Entidad y configures una consulta, o uses la consulta por defecto:

Siguientes pasos

Una vez tienes los datos almacenados en Plataforma, puedes, por ejemplo:

  • Explotar los datos con el Dashboard Engine por ejemplo mostrando tuits por zona, usuarios que más tuitean sobre un tema, …

  • Crear un Modelo con los Notebooks haciendo un análisis del sentimiento sobre los tuits, una distribución geográfica, …

  • Publicar un API REST con el API Manager con información agregada sobre un tema concreto.