A que viene esto? Una imagen vale más que mil palabras, y si tiene letras entonces valdrá aún más (supongo). He notado que una persona en particular, con 203K followers, publica frases motivadoras y le vá bien…. De hecho yo lo sigo y me parece genial, llegó a motivarme con una sola frase; pero yo no hubiera prestado atención a esa frase si tan sólo hubiese sido texto. No. Necesitaba también tener un lindo color atrayente y ser una imagen para que pudiera captar mi atención entre tanta información. Y en eso me puse a pensar que yo también podría hacer lo mismo, pero claro… al estilo de un informático. Como? Pues automatizando un poco el proceso :B
La idea: Está plasmada en el siguiente screenshot:
Twittear el texto y tener el mismo texto pero en una imagen, sencillo.
Que necesitamos?:
- Algo que nos permita generar la imagen a partir del texto: ImageMagick! Y punto. (No tiene rival, desde mi punto de vista)
- Algo que nos permita twittear y adjuntar una imagen: Aquí hay más de una opción, pero como ando en la onda Ruby usaré Twitter cli.
- Algo que enlace ambos: bash. Me gusta más powershell, pero ni modo. (Que no se entere el dueño de este blog).
Según tengo entendido, el paquete ImageMagick viene instalado por defecto en las distribuciones de Linux; al menos yo no recuerdo haberlo tenido que instalar. Pero de tener que hacerlo creo que bastaría lo siguiente:
$ sudo apt-get install imagemagick
Lo siguiente en nuestra lista es twitter cli. El proceso de instalación es algo tedioso y meritorio de un post completo. Es por eso que les dejo el siguiente enlace para que lo instalen: Instalación y los siguientes beneficios inmediatos por si andan dudando si deberían hacerlo o no:
- Lo divertido que es postear desde la línea de comandos: “Somos frikis, yeaah baby”.
- Postear de forma automática usando el comando at o cron :D. Esto si es genial… Al menos un follower se preguntará si en algún momento duermes xD
- Y… eso.
Y ahora la parte importante: el pequeño script en bash.
#!/bin/bash
echo "This will be posted: $1"
file='temporary.txt'
eval \`touch $file\`
eval \`echo $1>>$file\`
picture=\`date +'%F-%T'\`
image\_magick="convert
\-background turquoise
\-fill white
\-pointsize 18
\-size 400x400
\-gravity center
label:@$file
$picture.gif"
eval $image\_magick
eval \`rm $file\`
tweet="t update \\"$1\\" --file=$picture.gif"
eval $tweet
#eval \`rm $picture.gif\`
echo "Done boss."
Copiamos lo anterior en un archivo llamado: post-automatically
Le asignamos permisos de ejecución:
$ chmod +x post-automatically
Y ejecutamos el script pasándole un argumento como parámetro, el texto que deseamos postear, entre comillas dobles o simples. En este caso dobles:
$ ./post-automatically "Hi"
El resultado es el siguiente:
Y la visualización en Twitter :D
Hi pic.twitter.com/QUlL36pmIS
— Rizel Tane a.k.a Liz (@RizelTane) julio 25, 2014
Que hace el script?
Crea un archivo llamado: temporary.txt en donde inserta el texto que hemos pasado como argumento. Obtiene la fecha y hora actual para crear el nombre de nuestra imagen.
Luego ejecuta el comando convert(del paquete ImageMagick) con las siguientes opciones y en este orden:
Color de fondo: turquesa
Color de fuente: blanco
Tamaño de fuente: 18 puntos
Tamaño del canvas: 400x400 pixels
Ubicación del texto: centro
Texto: el contenido de nuestro archivo
imagen a ser creada: el nombre previamente generado, con extensión gif,
Luego eliminamos el archivo en donde se encuentra nuestro texto porque ya no lo necesitamos.
Twitteamos con el argumento recibido y adjuntamos la imagen que ha sido generada.
El script salió de una chispa de locura instantánea por lo que… hay casos en los que no funciona. Los reto a encontrar esos casos y a mejorarlo. Estuve intentando mejorarlo, todavía lo pienso hacer cuando venga otra de esas chispas de locura, mientras aquí posteo el estado dev del script previo. PD. No programo en bash (Este debe ser mi cuarto intento) por lo que mi código(lo que están por ver a continuación) puede llegar a ofender a algunos expertos.
Saludos.
#!/bin/bash
echo "This is the text that will be posted: $1"
#$( echo VAR=value )
file='temporary.txt'
eval echo \`touch $file\`
eval echo \`echo $1>>$file\`
#now="$(date +'%d/%m/%Y')"
#whoami
csv=\`t whoami -c\`
#grep -o . <<< $csv | while read letter; do echo "my letter is $letter" ; done
#echo $csv
for (( i=0, c=0; i<${#csv}; i++ )); do
if \[\[ ${csv:$i:1} == "," \]\]
then
let c++
if \[ $c == 23 \]
then
#while
#echo ${csv:$i:1}
#echo ${csv:$i:2}
#echo ${csv:$i:3}
#echo ${csv:$i:4}
#echo ${csv:$i:5}
#echo ${csv:$i:6}
#echo ${csv:$i:7}
#echo ${csv:$i:9}
#echo ${csv:$i:10}
#echo ${csv:$i:11}
for (( j=1; ${csv:$i:$j} != "," ; j++ )); do
echo ${csv:$i:$j}
done
fi
fi
done
picture=\`date +'%F%T'\`
image\_magick="convert
\-background turquoise
\-fill white
\-pointsize 18
\-size 500x500
\-gravity center
label:@$file
$picture.gif"
eval $image\_magick
echo "Done boss."