¡Buenas! Como ya os habréis dado cuenta, una de las cosas que más me gusta es automatizar procesos y tratar de conseguir un gran impacto con ello, hoy toca hablar sobre la automatización de Twitter. Si eres usuario de esta red social seguramente te habrás fjado que la mayoría de cuentas funcionan de manera automática parcial o completamente y cada vez hay más cuentas que utilizan la API de Twitter para publicar su contenido.
Hace unos meses se hizo muy viral el WorldWarBot, se trataba de una cuenta que simulaba una guerra mundial entre países y que obtuvo una gran repercusión y le salieron muchos clones, pero si estás leyendo este artículo, seguramente lo que te interese de los bots de twitter es cómo aplicarlos a tu estrategia de Marketing Online para promocionar tu contenido, así que vamos a ello!
Contents
- 1 Creando un bot de Twitter utilizando NodeJs
- 2 ¿Cómo utilizar la API de Twitter con Node?
- 3 Utilizando el bot para dar Retweets automáticamente
- 4 Cómo dar Me Gusta a Tweets de forma automática
- 5 Seguir cuentas de Twitter automáticamente
- 6 Cómo Twittear automáticamente tus post antiguos
- 7 Cómo publicar en Twitter los artículos nuevos de tu web
- 8 Conclusiones y código de ejemplo
Creando un bot de Twitter utilizando NodeJs
En este caso vamos a utilizar NodeJs para la creación del bot ya que es una tecnología relativamente sencilla de utilizar si se tienen conocimientos de programación y su gestor de paquetes NPM tiene librerías para casi cualquier cosa que se te ocurra.
El primer paso para la creación del bot es instalar Node, si todavía no lo tienes lo puedes descargar desde su web oficial, recomiendo descargar la versión LTS ya que es la más estable y la que tiene soporte. Una vez lo hayas instalado puedes comprobar que está operativo poniendo este comando en la consola:
node --version
Si todo está bien podemos seguir e inicializar el proyecto de Node donde estará nuestro bot, para ello muévete desde el terminal a la carpeta donde quieras que esté el bot y ejecutar el siguiente comando para crear el proyecto:
npm init
Tras ejecutar esto nos saldrán una serie de preguntas en el terminal, tendrás que poner el nombre del proyecto, el nombre del autor, las keywords y la licencia que tendrá.
Una vez completado este proceso se nos generará la carpeta del proyecto que contendrá un archivo llamado package.json este es el archivo que contiene las dependencias necesarias para que el proyecto funcione y los datos relativos al proyecto que hemos introducido previamente. ¡Ahora es el turno de empezar con el bot!
¿Cómo utilizar la API de Twitter con Node?
Utilizar la API de Twitter con Node es muy sencillo, hay varias librerías que permiten hacerlo, pero mi favorita es Twit, para poder utilizarla tenemos que añadirla a nuestro proyecto, para ello debemos de introducir el siguiente comando en nuestro terminal:
npm install -s twit
Con esto descargaremos la librería dentro de la carpeta node-modules y podremos utilizarla en nuestro proyecto, además, gracias al parámetro «-s» la añadiremos a nuestro package.json, de forma que si queremos mover nuestro bot a otro ordenador o a un servidor podremos instalar todas las dependencias que haya en el package.json con el comando:
npm install
Una vez tengamos la librería lista ya la podemos importar en nuestro proyecto, para ello debemos incluir en nuestro index.js la siguiente linea:
const Twit = require("twit");
Una vez importada debemos configurar nuestras credenciales:
var T = new Twit({ consumer_key: "Tu Consumer Key", consumer_secret: "Tu Consumer Secret", access_token: "Tu Access Token", access_token_secret: "Tu Access Token Secret", timeout_ms: 60 * 1000, // optional HTTP request timeout strictSSL: true // optional - requires SSL certificates to be valid. });
Si todavía no tienes las credenciales de Twitter las puedes solicitar desde la página para desarrolladores de Twitter, el proceso es bastante sencillo, en primer lugar te tendrás que enviar una solicitud para que te habiliten la cuenta de desarrollador (Tardarán unas horas en aprobar la solicitud), una vez te hayan aprobado tendrás que crear una aplicación y te darán las credenciales.
Utilizando el bot para dar Retweets automáticamente
Una de las funcionalidades que probablemente más te interese para llamar la atención de otros usuarios y además publicar nuevo contenido en tu cuenta es la opción de dar Retweets de forma automáticamente.
Para ello debemos definir un stream, el cuál detectará todos los tweets que contengan una cierta palabra, hashtag o frase que le indiquemos y una vez que lo detecte le daremos indicaciones sobre que hacer con ese tweet, para crear el stream debemos incluir la siguiente línea en nuestro código:
const stream1 = T.stream("statuses/filter",{track:"#SEO"});
En este caso estaremos escuchando todos los tweets que contengan el hashtag #SEO, para interaccionar con los tweets que escuche debemos de crear el hook que lo active:
stream1.on("tweet",reTweet);
Esto lo que hará es que cada vez que detecte un tweet llamará a la función «reTweet» la cual debemos definir:
function reTweet(tweet) { T.post("statuses/retweet/:id", { id: tweet.id_str }, function( err, data, response ){ console.log("RT dado a: @" + tweet.user.screen_name); }); }
Con esto daremos Retweet a todos los tweets que contengan la cadena de texto que hayamos indicado, obviamente esto es una locura y es posible que sobrepases los límites de uso diarios de la API de Twitter en poco tiempo, por ello es recomendable limitar los ReTweets diarios y «randomizar» un poco el comportamiento para que no interactue con todos los tweets y sea un comportamiento más natural, en el código que dejaré al final del post podrás ver un ejemplo de como hacer esto.
Cómo dar Me Gusta a Tweets de forma automática
Otra de las formas de llamar la atención de otros usuarios es dando me gusta a sus publicaciones, además, a diferencia de los retweets, los Me Gusta no se ven en nuestra timeline, por lo que es una forma un poco más discreta de interaccionar con otros usuarios.
Al igual que para dar Retweets, debemos declarar un stream que escuche el hashtag o texto que deseemos (Podemos utilizar el mismo stream para todas las acciones).
const stream2 = T.stream("statuses/filter",{track:"#SocialMedia"});
Y al igual que para los retweets, tenemos que llamar a la función que deseemos cuando escuchemos un nuevo tweet:
stream2.on("tweet",MeGusta);
Y para que esto funcione tenemos que declarar la función MeGusta:
function meGusta(tweet) { T.post("favorites/create", { id: tweet.id_str }, function( err, data, response ) { console.log("Me gusta dado a: @" + tweet.user.screen_name); }); }
De la misma forma que con los Retweets, es importante limitar el número de Me gusta que se dan por día para no incumplir con las políticas de uso de Twitter y evitar que bloqueen nuestra cuenta. En el ejemplo que adjuntaré más adelante podrás ver como hacerlo de una forma sencilla.
Seguir cuentas de Twitter automáticamente
Sin ninguna duda, esta es la forma más efectiva (Y probablemente la más antigua) de conseguir seguidores, si seguimos a un usuario que publica cosas de nuestra temática es muy probable que nos siga el a nosotros también (El famoso followback), sin embargo Twitter es bastante estricto con esto y hay que limitarlo bastante si queremos evitar bloqueos de nuestra cuenta.
Al igual que para los Retweets y los Me Gusta, debemos declarar un stream, y cuando ese stream detecte un tweet llame a la función de seguir usuario:
stream1.on("tweet",seguirCuenta);
Declaramos la función para seguir cuentas:
function seguirCuenta(tweet) { T.post( "friendships/create", { screen_name: tweet.user.screen_name }, function(err, res) { if (err) { console.log(err); } else { console.log("Has seguido a: " + tweet.user.screen_name); } } ); }
Cómo Twittear automáticamente tus post antiguos
Muchas veces creamos contenido para nuestro blog, lo compartimos una vez y nos olvidamos de el, pero si tenemos un blog con contenido evergreen, es interesante ir compartiendo de forma periódica esas entradas que publicamos hace unos meses y ya nadie recuerda, de esta forma conseguiremos que nuestro contenido llegue a más gente y mantener nuestra cuenta de Twitter más activa, hay un plugin muy famoso de WordPress llamado Revive Old Post que se puede utilizar para esta funcionalidad, pero ya que estamos creando nuestro propio bot, ¿Por que no programar nosotros mismos esta funcionalidad?
Aprovechando que existen infinidad de librerías para Node que hacen todo tipo de cosas podemos combinar varias de ellas para que cada cierto tiempo revise la feed de nuestra web, seleccione un post al azar y lo publique en nuestra cuenta.
Configurando el cron para la publicación de tweets
Vamos a empezar por la programación de los tweets, necesitamos un cron que se active cada cierto tiempo y que llame a la función que se encarga de publicar en Twitter, para ello vamos a utilizar node-cron, para instalarlo utilizamos el siguiente comando en el terminal:
npm install -s node-cron
Una vez instalado lo importamos en nuestro código:
const cron = require("node-cron");
Utilizarlo es muy sencillo, debemos indicarle en que momento queremos que se ejecute y todo lo que haya dentro se ejecutará una vez que el reloj de nuestra máquina coincida con los parámetros que le hemos indicado:
cron.schedule("10 20 8 * * *",()=>{ //Funciones a ejecutar });
El código anterior hará que todos los días a las 8 horas 20 minutos y 10 segundos, se ejecute el código que pongamos dentro.
Publicando tweets desde una feed
Una vez sabemos hacer que nuestro código se ejecute solo cada cierto tiempo, toca elegir la fuente de contenidos y poder leer sus datos, para ello vamos a utilizar la librería Rss Converter, la cual nos permite parsear una feed a formato JSON y nos facilita trabajar con ella, para instalar la librería:
npm install -s rss-converter
Para importarla en nuestro código:
const rssConverter = require("rss-converter");
Ahora tenemos que indicar la url de la feed de la que queremos publicar posts antiguos, para ello utilizamos la siguiente línea de código:
const blog_feed = "https://quieroserseo.com/feed";
Ahora solo queda elegir uno de esos posts al azar para poder publicarlo:
let feed = await rssConverter.toJson(blog_feed); obj = feed.items; //Elegimos uno al azar const length = Object.keys(obj).length; const random = Math.floor(Math.random()*length+0); //Creamos el Tweet const tweet = feed.items[random].title + " #RecordandoPosts\n" + feed.items[random].link; console.log("Tweet publicado:\n" + tweet); nuevo_tweet(tweet);
Esta parte es un poco liosa y puede que falle por temas de asincronidad, he tratado de resumir el código para que se vea más legible, pero recomiendo ver el código completo que pondré al final del post donde verás como se debe configurar de forma correcta.
Ahora falta declarar la función nuevo_tweet que será la encargada de publicar en nuestra cuenta:
function nuevo_tweet(texto) { var params = { status: texto }; T.post("statuses/update", params, function(err, data, response) { console.log("Tweet publicado: "+data.text); }); }
Combinando el cron y la publicación desde lectura de feeds conseguirás que cada día a la hora que le indiques «reviva» uno de los posts de tu web. Si tienes una web muy grande también puedes crear dos cron distintos y publicar dos veces al día.
Cómo publicar en Twitter los artículos nuevos de tu web
Hemos visto como publicar nuestros artículos antiguos de forma automática, pero ¿Qué pasa con los nuevos?, también podemos automatizar su publicación, en este caso vamos a utilizar la librería rss-emitter-ts, esta librería funciona de forma similar a los stream de la API de twitter, escucha la feed y cuando recibe una actualización lanza un evento. Para instalar la librería hacemos:
npm install -s rss-emitter-ts
Lo importamos en nuestro bot:
const { FeedEmitter } = require("rss-emitter-ts"); const emitter = new FeedEmitter();
Una vez declarado ya podemos añadir la feed de nuestra web:
emitter.add({ url: "https://quieroserseo.com/feed/", refresh: 20000, ignoreFirst: true });
Con el parámetro ignoreFirst lo que hacemos es que no active el evento con los posts que hay previamente en la feed.
Una vez añadida nuestra feed (También podemos añadir feeds de blogs de nuestra temática para generar más contenido) tenemos que indicarle que función queremos activar cuando detecte un nuevo elemento en la feed, para ello debemos incluir esto en nuestro bot:
emitter.on("item:new", item => { const tweet = item.title + " --> " + item.link; console.log("Tweet publicado:\n" + tweet); nuevo_tweet(tweet); });
Conclusiones y código de ejemplo
Hemos visto como automatizar nuestra cuenta de Twitter para compartir contenido interesante para nuestros usuarios e interaccionar con cuentas de nuestra temática, pero hay que tener cuidado con las automatizaciones y no sobrepasar los límites de uso de la API ni infligir sus normas de uso, por eso es fundamental limitar el bot y no pasarse con las acciones que este realiza.
Una de las ideas básicas que nos pueden ayudar a cumplir estas premisas es no interaccionar con todas las publicaciones que contengan un cierto hashtag, si no hacerlo de una forma aleatoria, por ejemplo establecer que solo lo haga el 10% de las veces. Además es interesante limitar el número de acciones diarias, esto es tan sencillo como crear un contador y resetearlo una vez al día utilizando la función cron.
Tras un mes utilizando el bot en la cuenta de @QuieroSerSeo estos han sido los resultados:
Espero que este artículo os haya sido útil y os sirva para automatizar vuestra cuenta y sacarle el máximo partido a esta red social.
Esto funciona actualmente?
Hay algun riesgo de banneo?
Gracias por la info!
Un saludo
Si, claro que funciona, y en cuanto al riesgo de baneo siempre existe, aunque si no te excedes en el número de acciones diarias no debería haber ningún problema, yo estoy ejecutando el bot en la cuenta de este blog (@QuieroSerSeo) desde Noviembre y no he tenido ningún problema.
Hola, soy nuevo en el mundo de los bot y me intereso el proyecto. al ejecutar el paso de colocar las credenciales me dice (undefined). que puedo hacer ante eso?
Buenas Erick, si has introducido las credenciales que te ha proporcionado Twitter en el lugar adecuado no te debería salir ese error, imagino que es porque alguno de los tokens no lo habrás puesto de forma adecuada.
El formato de las credenciales debe ser similar a este:
Si sigue dándote error puedes enviarme un mail a contacto@quieroserseo.com con el código que tengas y lo revisamos.
Un saludo!
Que programa usas para editar el código?
Buenas, en mi caso utilizo VS Code, pero puedes utilizar cualquier otro, a parte de VS Code te recomendaría ATOM o Sublime
no consigo lograr que funcione.
Buenas, puedes indicarme el error que te da para que pueda intentar ayudarte?
Un saludo!
Hola, estoy intentando hacerlo pero no consigo pasar de lo siguiente (copio primero el texto que pones en el artículo):
Una vez tengamos la librería lista ya la podemos importar en nuestro proyecto, para ello debemos incluir en nuestro index.js la siguiente linea:
const Twit = require(«twit»);
Pongo esta línea en el terminal y me indica lo siguiente:
-bash: syntax error near unexpected token `(‘
¿Qué estoy poniendo mal?
Hola Dani, esa línea no la tienes que pegar en el terminal si no el el archivo index.js.
El terminal solo lo tienes que utilizar para instalar los paquetes de node (npm instal …) y para la ejecución del bot con «node index.js» el resto de cosas las tienes que escribir en el archivo.
Un saludo!
Buenas, tengo varias dudas, las «peticiones» a Twitter como tal y demás las entiendo, lo que no se es como ejecutar, he estado usand Glitch y ahí se realiza de forma automática pero tiene el defecto que de no se puede mantener siempre activo el programa, si yo tengo mis ficheros en el PC como se ejecutan? De que forma puedo mantener la conexión siempre activa para por ejemplo programar que se de like a un determitado tweet que se publica? Gracias
Buenas Sergio, si lo malo de Glitch es lo que dices que se para si en 5 minutos no recibe tráfico, eso te lo puedes saltar enviándole pings, pero sigue sin ser una solución estable, quizás Heroku si que te pueda servir como solución gratuita para probar el bot.
En caso de querer utilizar el bot en local el comando que tienes que utilizar es
, lo malo de esta opción es que cuando apagues el PC el bot se parará y lo tendrás que volver a ejecutar cada vez que lo enciendas.
Espero haberte resuelto todas las dudas, si algo no ha quedado claro dímelo y trato de explicarme mejor.
Un saludo!
Buenas soy Sergio de nuevo, he resuelto el problema de que se duerma con Heroku, ahora estoy intentando realizar un stream que detecte cuando alguien me siga para enviar un mensaje directo de «bienvenida», el mensaje directo lo envío sin problema pero no soy capaz de encontrar el evento que detecta cuando alguien me sigue, hago T.stream.on(follow, function) pero al igual que el de detectar un tweet con determinado contenido si soy capaz no encuentro el que detecta los seguidores nuevos, gracias por tu ayuda.
Para poder hacerlo con Python? Podrias facilitar el código?
Muy buen artículo, por cierto, gracias.!
Buenas, pues con python no lo he probado, pero seguro que hay alguna librería similar que se puede utilizar sin problema.
Un saludo y gracias!
En el cmd se me queda en buscando tweets…, he hecho algo mal o tengo que darle mas tiempo?
Buenas, pues es raro que se quede buscando sin hacer nada, sin ver el código tampoco te puedo decir mucho porque pueden ser muchas cosas, has probado a cambiar el texto de búsqueda del stream?
Buenas, ahora me da error,
prob_mg is not defined, y lo mismo con el de seguir y el de rt
Eso es porque te debe faltar declarar esa variable, prueba a poner arriba del todo:
Y debería funcionar, si te sigue dando fallos fijate en el código completo que está enlazado al final del artículo por si te falta algo más
Tampoco me funciona tu código, lo he probado sin cambiar nada y se queda la consola en buscando tweets como con mi código, qué podrá ser?
¡Hola!
A mí también se me queda en buscando tweets.
Este es el archivo con el que trabajo: http://www.mediafire.com/file/z0unss1n5lq76tz/index.js/file
He revisado tu archivo al final de la página, he hecho varias correcciones pero sigue sin funcionar:/
¡Gracias!
¡Hola de nuevo! Disculpa por el doble comentario (borra el primero si quieres).
He conseguido que funcione. Dice: «hoy llevas 1 me gusta dado. Me gusta dado a @…)
Sin embargo, compruebo si efectivamente el me gusta se ha dado y qué va, no aparece en mi cuenta de TT.
Por otro lado, ¿cómo funciona el bot? ¿Lo inicias, lo dejas abierto y funciona «solo» a lo largo del día?
Lo digo porque lo he iniciado y solo ha dado 1 me gusta (que realmente no lo ha dado). Y parece que se ha parado, que no sigue buscando tweets. ¿Se inicia automáticamente cada cierto tiempo?
Disculpa las preguntillas de novato. No estoy muy familiarizado con el código.
¡Gracias!
Puedes pasar tu codigo que ha funcionado?
¡Hola!
El código que me ha funcionado es el que está en el primer mensaje.
Realmente no funciona. Identifica bien los tuits con la palabra clave que busco y marca que ha dado like, pero realmente no lo da. Cuando me meto en la cuenta de twitter esos likes no se ven reflejados. He hecho varios cambios de código y probado otras cosas pero nada. A ver si alguien nos puede echar un cable!
Saludos
¡Ya lo averigüé!
Tienes que dar permisos en Developers de Twitter. Tenía los permisos en Solo lectura y por eso no se daba el like. Como mi hasgtag tiene poca popularidad he eliminado las limitaciones de la función cron. ¿Puedo dejar el bot abierto varias horas? ¿O aunque haga 10 likes cada hora, el bot está haciendo peticiones todo el rato y Twitter lo puede detectar?
Saludos.
Si, puedes dejarlo abierto, si solo da 10 likes por hora no hay problema