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);