0
7
:
0
7
:
2
9

Cómo hacer un bot de Twitter parte I

2019-09-23T00:00:00.000Z

Obtiene una imagen random de Giphy y la publica en Twitter, a una hora específica del día.

Primero, se inicializan los paquetes necesarios:

require('dotenv').config()
const fetch = require('node-fetch');
const schedule = require('node-schedule');

Esta línea haría que el bot tuiteara cada 6 horas. Más detalles en https://crontab-generator.org/

const cronInterval = '* */6 * * *';

Aquí se inicializa el objeto que nos da acceso a twitter con el npm twit.

 
const t = require('twit');
const Twitter = new t({
  consumer_key: process.env.CONSUMER_KEY,
  consumer_secret: process.env.CONSUMER_SECRET,
  access_token: process.env.ACCESS_TOKEN,
  access_token_secret: process.env.ACCESS_TOKEN_SECRET
})

Esta función recibe una url y publica un tuit con ella

const redactaTuit = (url) => {

	const tuit = `🐹 ${url}`;

	const options = { status: tuit };
	const cb = () => {};

	Twitter.post('statuses/update', options, cb);
};

Línea por línea, esto es lo que hace la función redactaTuit:

Esta cadena almacena el texto del tuit tal cual será publicado, la url es la proporcionada por Giphy en la función buenasTardes.

	const tuit = `🐹 ${url}`;

Aquí configuramos los campos de la solicitud POST, sólo necesitamos el texto del tuit como valor de la propiedad status .

	const options = { status: tuit };

cb (callback) se refiere a una función que se ejecutaría después de tuitear, por ahora lo definimos como una función vacía.

	const cb = () => {};

Esta línea envía el tuit para su publicación con los parámetros que le fueron dados.

	Twitter.post('statuses/update', options, cb);

La función buenasTardes hace una consulta a la api de Giphy, definimos la url con el paquete dotenv. desde la primera línea del código. Cuando se recibe una respuesta, se envía a la función redactaTuit.

const buenasTardes = () => {	
	fetch(process.env.GIPHY_URL)
	  .then( response => response.json() )
	  .then( json => redactaTuit( json.data.url ) )	  
}

Gracias al paquete node-schedule podemos realizar el tuit a una hora y minuto específicos.

const job = schedule.scheduleJob(cronInterval, buenasTardes);

último commit por ti.