lunes, 28 de noviembre de 2016

Shell scripts en Bash para enviar un tweet con un mismo mensaje de texto a usuarios o hashtags diferentes de una lista en Twitter desde el terminal con GNU/Linux

Yo no creo en el hacktivismo como único medio para ganar una revolución social o un proceso de liberación nacional: ese tipo de luchas se ganan en las calles, no delante de las pantallas de ordenador. 

No soy un hacktivista ni mucho menos, pero he creado un par de shell scripts en Bash que permite enviar un tweet de forma masiva a una lista de de usuarios de Twitter y enviar un  tweet asociándolo a un hashtag diferente en cada envío.  Esto puede ser útil y cómodo, si un activista quiere enviar mensajes de forma automática y no manual a través de la red social Twitter, mensajes con  su entrada de blog a una lista numerosa de usuarios de Twitter, o un mensaje de texto y asociarlo en un tweet a una etiqueta (hashtag) diferente por los motivos que sean: alertar de una noticia urgente, anunciar la convocatoria de una manifestación, etc.

Antes de nada, el que sea usuario de Windows y Android y tenga escasos conocimientos informáticos no se asuste: existen herramientas como Hotsuite, Tweetdeck, Bufffer, Timely, Tweet4ame, etc... pero yo soy linuxero y a mí me gusta Twidge. A veces, lo que parece complicado resulta más sencillo.

El programa Twidge sirve para escribir tweets desde el terminal de los sistemas operativos GNU/Linux. He leído que Windows 10  incorpora el terminal de GNU/Linux pero no lo he probado.

Twidge es fácil. Si en el tweet escribes una URL (link, enlace) se acorta gracias a que Twidge usa un acortador de URLs llamado tinyurl.com. Además, con Twidge se pueden crear scripts que permiten ejecutar tareas de forma automática. Por ejemplo; enviar un tweet a una lista de usuarios cada cierto periodo de tiempo, enviar un tweet con un hashtag diferente cada cierto periodo tiempo, etc


El programa twidge en distribuciones de GNU/Linux basadas en Debian (Ubuntu, Linux Mint) se puede instalar con el comando apt-get install twidge. En otras distribuciones de GNU/Linux, también se puede instalar a través del terminal. Si no eres capaz, intenta instalar twidge a través de un gestor gráfico de instalación como sypnactic.

user@linuxmint ~ $ sudo apt-get install twidge

Para configurar twidge, escribe en el terminal de GNU/Linux:

user@linuxmint ~ $ twidge setup

Deberíamos recibir una solicitud de "key", una clave de autorización y también una URL. Copiamos la URL en nuestro navegador y autorizamos a la aplicación Twidge para que acceda a nuestra cuenta de Twitter. En el navegador, aparecerá un código en forma de número, ese número debemos escribirlo en el terminal detrás de "Authoritation key". Pulsamos la tecla Enter y después de un breve instante, ya podemos twittear desde la consola de GNU/Linux.

El funcionamiento básico de Twidge es el siguiente:

user@linuxmint ~ $  twidge update "Este es el contenido de tweet que no puede superar los 40 carácteres"

El mensaje va entrecomillado y aparecerá en Twitter sin comillas. Si escribes más de 140 caracteres, twidge no envía el mensaje y nos alerta del exceso de caracteres enviados.

Your status update was 147 characters; max length 140

Como ya dije anteriormente, he creado 2  Shell scriptst en lenguaje Bash para realizar envíos de tweet de manera automática. Algunos se preguntarán ¿Qué es un Shell script? ¿Qué es Bash?

Shell script es un programa informático diseñado para ser ejecutado por el shell (consola, terminal,etc) de sistemas operativos Unix y basados en Unix (BSD, Linux, etc), un intérprete de línea de comandos. Los diversos dialectos de scripts de shell se consideran lenguajes de script. Leer más: https://en.wikipedia.org/wiki/Shell_script

Bash (Bourne again shell) es un programa informático, cuya función consiste en interpretar órdenes, y un lenguaje de programación de consola. Está basado en la shell de Unix y es compatible con POSIX. Bash es el intérprete predeterminado en la mayoría de sistemas GNU/Linux, además de Mac OS X Tiger, y puede ejecutarse en la mayoría de los sistemas operativos tipo Unix. También se ha llevado a Microsoft Windows por el proyecto Cygwin. Leer más: https://es.wikipedia.org/wiki/Bash

Bueno, y ahora vamos a lo que vamos:

Enviar un tweet a una lista de tuiteros cada cierto tiempo (5 minutos)

Copia y pega el texto en un archivo de texto y renómbralo con la extensión .sh. Por ejemplo: tweet_users.sh



#!/bin/bash
#Este script envía un tweet con un mismo mensaje de texto pero a un tuitero diferente de una lista de #tuiteros cada cierto tiempo (5 minutos)
#autor:Anonymous
echo 'Introduce un tweet de no más de 140 carácteres'
read tweet
item=${nicks[*]}
nicks=("@tuitero01" "@tuitero02" "@tuitero03"  "@tuitero04" "@tuitero05")

for item in ${nicks[*]}
do
    twidge update "$item $tweet"
    sleep 5m
done



Explicación: Este script permite enviar un tweet a una lista de tuiteros cada cierto tiempo (5 minutos)
El programa te pide que escribas un tweet. nicks contiene la lista de todos los tuiteros con sus nicks escritos entrecomillas y dejando un espacio de separación, todos ellos  recibirán el tweet que usted escriba, los destinatarios podrían ser centenares o miles de tuiteros, eso depende de usted. El comando sleep envía un tweet cada 5 minutos (5m) a todos los tuiteros hasta finalizar la lista pero el tiempo es configurable 5 segundos (5s), 5 horas (5h), etc.



Abra el terminal de GNU/Linux (consola, shell, etc) y  conceda permisos de ejecución como administrador del sistema al archivo tweet_hashtags.sh :

user@linuxmint ~ $ sudo chmod +x /home/user/scripts/tweet_hashtags.sh

Ejecuta el script en el terminal:

user@linuxmint ~ $ bash tweet_hashtags.sh

El programa Twidge empezará a enviar mensajes a la lista de tuiteros que haya escrito cada cierto tiempo.

Enviar un tweet asociándolo con un hashtag diferente cada cierto tiempo (5 minutos)



#!/bin/bash
#Este script envía un tweet con un mismo mensaje de texto pero asociándolo con un hashtag diferente #cada cierto tiempo (5 minutos)
#autor:Anonymous
echo 'Introduce un tweet de no más de 140 carácteres'
read tweet
item=${hashtags[*]}
hashtags=("#hashtag01"#hashtag02" "#hashtag03" "#hashtag04" "#hashtag05")

for item in ${hashtags[*]}
do
    twidge update "$hashtags $tweet"
    sleep 5m
done



Explicación: El script  pedirá que escriba un tweet. hashtags es una variable array  que contiene como valores un conjunto de hashtags escritos entrecomillas y con un espacio de separación entre sí, el tweet se escribirá tantas veces como hashtags haya. Cada tweet contendrá el mismo mensaje de texto pero con un hashtag diferente y se publicará cada 5 minutos. El tiempo es configurable 5 segundos (5s), 5 horas (5h), etc

Programar crontab para que ejecute el script en un momento determinado

Mediante  crontab, podemos ejecutar estos scripts cuando se desee: un día concreto de cada mes, una vez al día, una vez por semana, etc. Para ello, tendremos que editar el archivo crontab de la siguiente forma:

user@linuxmint ~ $  sudo nano /var/spool/cron/crontabs

30 21 * * * /home/user/scripts/tweet_users.sh

#Así ejecutamos el script tweet_users.sh a las 21:30 cada día.

@weekly  /home/user/scripts/tweet_hashtags.sh

#Así ejecutamos el script tweet_hashtags.sh una vez por semana desde el instante que guardamos el archivo crontab. No se olvide de guardarlo.

Para más información de cómo programar la ejecución de tareas automáticas en el sistema operativo GNU/Linux, visite el siguiente enlace: https://es.wikipedia.org/wiki/Cron_(Unix)


Enviar un tweet a una lista de tuiteros o de hashtags contenida en un archivo de texto.

Un script puede recoger datos de una lista de nicks y hashtags contenida en un archivo de texto que vamos a llamar "lista.txt". Para ello, hay que crear un archivo de texto en el mismo directorio donde esté ubicado el script:

user@linuxmint ~ $  sudo nano /home/user/scripts/lista.txt

Puede añadir una lista de tuiteros al archivo de texto; escriba un nick de tuitero por linea, podrían ser varios, pero a lo mejor, el tweet superaría el límite de los 140 caracteres permitidos impuesto por Twitter:

@tuitero01
@tuitero02
@tuitero03
@tuitero04
@tuitero05

O puede añadir una lista de hashtags al archivo de texto; escriba un hashtag por linea:

#hashtag01
#hashtag02
#hashtag03
#hashtag04
#hashtag05

Este es el código del script que podría llamarse como ustedes quieran:



#!/bin/bash
#Este script envía un tweet con un mismo mensaje de texto a un tuitero o hashtag diferente de una lista contenida en un archivo de texto cada cierto tiempo (5 minutos)
#autor:Anonymous
FILENAME=lista.txt

echo 'Introduce un tweet de no más de 140 carácteres'
read tweet

while read line      
do      
    twidge update "$line $tweet"
    sleep 5m
done < $FILENAME



Explicación: Este script te pide que escribas un tweet y permite enviar ese tweet a una lista de tuiteros o hashtags contenida en un archivo de texto cada cierto tiempo (5 minutos).

Nota: los códigos de estos scripts son mejorables. El programa Twidge no admite mensajes de más de 140 caracteres, reporta un mensaje error y sigue ejecutándose escribiendo tweets con los siguientes tuiteros o hashtags de una lista; por esa razón, pienso que no es necesario crear un bucle para limitar el número de caracteres de los tweets.