Bot en Twitter con Nodejs
En este artículo veremos el paso a paso para crear un bot en Twitter con la api V2 y todo el código será escribo en Nodejs
Antes de comenzar debes tener instalado nodejs en tu computador, te dejo el enlace para que lo puedas descargar 👇
Download | Node.js
Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.
nodejs.org
Creamos el proyecto e instalamos las librerías
Crea una carpeta y dentro corre el siguiente comando:
npm init
Completa los campos y luego abre con VSCode, verás que ya tienes el archivo package.json creado
Instala las librerías dotenv y twitter-api-v2 con los siguientes comandos
npm i dotenv
npm i twitter-api-v2
Crea los clientes
Para poder ejecutar funciones con la api debemos tener dos clientes creados, uno que tenga funciones de desarrollador para hacer la busqueda de tweets y otro que tenga funciones de usuario para darle like, reply y retweet a cada tweet.
Crea la carpeta client en el proyecto y agrega los archivos user_client.js y dev_client.js
En dev_client.js agrega el siguiente código:
require('dotenv').config()
const {TwitterApi} = require('twitter-api-v2');
const dev_client = new TwitterApi(process.env.APP_TOKEN);
module.exports = dev_client;
Ahora en user_client.js
require('dotenv').config()
const {TwitterApi} = require('twitter-api-v2');
const user_client = new TwitterApi({
appKey: process.env.APP_KEY,
appSecret: process.env.APP_SECRET,
accessToken: process.env.ACCESS_TOKEN,
accessSecret: process.env.ACCESS_SECRET,
});
module.exports = user_client;
Ahora crea el archivo .env en la raíz del proyecto y agrega el siguiente código:
#dev
APP_TOKEN=""
#user
APP_KEY=""
APP_SECRET=""
ACCESS_TOKEN=""
ACCESS_SECRET=""
Obtenemos las credenciales para cada client
Para tener acceso a la api de Twitter debes crearte un usuario desarrollador en Twitter Developers 👇
Una vez creado el usuario debes crear un nuevo proyecto y dentro del proyecto una nueva app.
Deberas llenar un formulario para obtener el acceso Elevated
Te recomiendo que el formulario lo llenes con fines educacionales, para que Twitter te entregue el acceso.
Con el acceso Elevated ingresa en la sección Keys and tokens
Para el APP_TOKEN ve a la sección Bearer Token y selecciona Regenerate, te entregará el token que debes pegar en .env
Para el APP_KEY y APP_SECRET ve a la sección
Para el ACCESS_TOKEN y ACCESS_SECRET ve a la sección Access Token and Secret , regenera el token y copa cada variable dentro del .env
Asegurate de tener los permisos de lectura y escritura (read and write)
Listo ya tenemos todas nuestras credenciales ahora ejecutemos la busqueda de tweets!
Rules y Streaming
Crea el archivo index.js dentro de la raíz del proyecto
Copia el siguiente código para obtener los cliente creados y el manejador de eventos de streaming de la api de twitter
const dev_client = require('./client/dev_client.js');
const user_client = require('./client/user_client.js');
const {ETwitterStreamEvent} = require('twitter-api-v2');
Luego crea una función async llamada main y agrega el siguiente código:
async function main(){
//obtiene el user
const user = await user_client.v2.me();
//console.log(user);
//copia el user_id en esta variable
let user_id = '';
//obtiene las reglas de busqueda
const rules = await dev_client.v2.streamRules();
//console.log(rules);
//elimina las reglas de busqueda
// await dev_client.v2.updateStreamRules({
// delete: { ids: rules.data.map( rule => rule.id) }
// })
//crea nuevas reglas de busqueda
// await dev_client.v2.updateStreamRules({
// add: [{ value: 'Javascript'} , {value: 'Nodejs' }],
// });
//crea un nuevo stream
const stream = dev_client.v2.searchStream({
'tweet.fields' : ['referenced_tweets', 'author_id']
});
//ejecuta el stream y muestra los resultados
(await stream).on(ETwitterStreamEvent.Data, async tweet => {
//mostramos el author_id por consola
console.log(tweet.data.author_id);
//mostramos el text por consola
console.log(tweet.data.text);
//like
await user_client.v2.like(user_id, tweet.data.id);
//retweet
await user_client.v2.retweet(user_id, tweet.data.id);
//reply
await user_client.v1.reply('I like this!', tweet.data.id);
});
main();
Con este código ya podremos filtrar por todos los tweets que tengan Javascript o Nodejs en su texto y darles like, retweet y replay
Acá te dejo el video completo de la implementación del código 👇
Suscríbete al canal, estaré subiendo muy buen contenido como este 🙌