Script para enviar Twitts de manera automática usando Bash y Twidge

Hace un tiempo instalé “Twidge“, un cliente Twitter que se utiliza desde el prompt, en este caso lo uso desde Bash, hice un pequeño script que envía tuits automáticamente leyendo línea a línea un archivo de texto, adosa la línea que está leyendo en ese momento y envía el tuit.

La configuración de Twidge es sencilla, se debe ejecutar:

twidge setup

Posteriormente arroja un enlace que se debe abrir desde el navegador web, luego, se ingresa el PIN que determine el Twitter oficial de la cuenta donde esté abierta la sesión en el navegador.

Por ahora utilicé tiempos marcados, es decir, defino un valor constante para variar el lapso de tiempo que usa el script para enviar la línea que está leyendo en un determinado momento.

Ejemplo de un archivo de texto:

Mi twitt número 1 es para hacer una prueba de envío
El segundo para asegurar que llegó
El tercero es para no seguir enviando

El script de prueba que hice quedó de la siguiente manera:

#!/bin/bash

TIEMPO=$1
TIEMPO=$((TIEMPO*60))
ARCHIVO=$2
TAM=$(wc -l "$HOME/$ARCHIVO" | cut -d" " -f1)
CONT=1

cat "$HOME/$ARCHIVO" | while read LINEA
do
 echo "$LINEA" > /tmp/twitt.tmp
 twidge update < /tmp/twitt.tmp
 if [ $CONT != $TAM ]; then
  SEG=$(((TIEMPO/CONT)*TAM))
  CONT=$((CONT+1))
  sleep ${SEG}
 fi
done
rm -rf /tmp/twitt.tmp
exit 0

Lo llamé enviaTwitt.sh, asigné los permisos de ejecución y lo guardé en /usr/local/bin/ para ejecutarlo desde cualquier ruta donde esté ubicado en la shell de comando.

Se usa de la siguiente forma:

enviaTwitt.sh 4 archivoDeTexto

Donde el 4 indica el valor constante para la formula del tiempo y archivoDeTexto es el archivo donde tendré guardadas mis líneas de publicación, cada línea con un máximo de 140 caracteres.

Advertisements
This entry was posted in Bash. Bookmark the permalink.

22 Responses to Script para enviar Twitts de manera automática usando Bash y Twidge

  1. Joha Durango says:

    ¡waaoo tutor! voy a tener pesadillas hoy de ver tanto código en este blog…

  2. Una pregunta, puedo hacer que lea un txt que se encuentra en mi home? la ruta en este caso sería /home/yeti/radit32-original/Radit-1.0-Lucid/CurrentSound/CurrentSound.txt
    La idea es que lea lo que suena en radit (programa de automatización de radio) cada cierto tiempo y lo publique en twitter.
    Saludos

  3. Bien, creo que pude solucionar lo de la ruta modificando el script asi:
    #!/bin/bash

    TIEMPO=$1
    TIEMPO=$((TIEMPO*60))
    ARCHIVO=$2
    TAM=$(wc -l “$HOME/radit32-original/Radit-1.0-Lucid/CurrentSound/$ARCHIVO” | cut -d” ” -f1)
    CONT=1

    cat “$HOME/radit32-original/Radit-1.0-Lucid/CurrentSound/$ARCHIVO” | while read LINEA
    do
    echo “$LINEA” > /tmp/twitt.tmp
    twidge update < /tmp/twitt.tmp
    if [ $CONT != $TAM ]; then
    SEG=$(((TIEMPO/CONT)*TAM))
    CONT=$((CONT+1))
    sleep ${SEG}
    fi
    done
    rm -rf /tmp/twitt.tmp
    exit 0

    Luego lo ejecuto de la siguiente manera:
    enviaTwitt.sh 4 CurrentSound.txt
    Por lo menos la consola no me da ningun error.
    Podrías explicar como funciona el intervalo de tiempo, yo quiero que tuitee cada 20 min mas o menos.
    Gracias de antemano por el tiempo, esto sería muy util para varias radios comunitarias que usan SL y GNU/Linux

  4. Bien lo que explique en el anterior funcionó pero solo si le agrego mas lineas al archivo CurrentSound.txt y la cuestión es que este siempre tendrá una sola linea, ya que es Radit quien lo modifica cada ves que cambia el tema que reproduce ¿Como puedo modificar el script en ese caso?

  5. felixurbina says:

    Hola Pablo. Gracias por leer.

    Bien, en el caso de enviar sólo un tuit, pudieras quitar toda la parte del “if” para que sólo envíe un tuit y borre el archivo, el “if” hace la función que queda establecido el tiempo. Lo había hecho así para que enviara de manera automática cada cierto tiempo una línea, pero si quieres enviar una sola línea, puedes quitar todo lo referente al tiempo que incluye el “if” y variables asociadas al tiempo.

    En cuanto tenga chance hago un script y lo publico.

    Saludos.

  6. Muchisimas gracias, voy a probar lo que dices. Lo que tengo que borrar es esto?
    if [ $CONT != $TAM ]; then
    SEG=$(((TIEMPO/CONT)*TAM))
    CONT=$((CONT+1))
    sleep ${SEG}
    fi
    Otra cosa bien interesante sería la posibilidad que agregue una frase antes de lo que lee de la linea del archivo de texto, Que el tuit fuera por ejemplo: Ahora estamos escuchando (y aquí vendría lo que lee)
    Luego con cron ejecuto el script cada cierto tiempo.

    • felixurbina says:

      Sí, puedes trabajar con una línea, y también pudieras usar esa parte que quieres añadir como argumeno del archivo script.

      Si quieres, déjame ver en cuanto tenga chance, reescribo un script y lo publico aquí para que lo tengas y lo pruebes a ver qué tal.

      Saludos.

      • Buenísimo… sería de mucha utilidad y no solo para mi te aseguro, yo no pude con la vida del script (eso pasa por no saber nada de código)

      • felixurbina says:

        Ya te escribo el script, escribí otras cosas que no salieron en la respuesta quizás por el editor de WordPress.

      • felixurbina says:

        Te comentaba que puedes usar el mismo script pero más sencillo, quizás:

        #!/bin/bash

        ARCHIVO=”/ruta/de/tu/archivo.txt”

        cat ${ARCHIVO} | while read LINEA
        do
        echo “${LINEA}” > /tmp/tuit
        twidge update < /tmp/tuit
        done

        exit 0

        Ese script lo puedes guardar en /usr/local/bin con permisos de ejecución para que lo uses desde cualquier path de tu sistema.

        También puedes crear un cron que se ejecute automáticamente cuando desees cada cierto tiempo, por ejemplo:

        */30 * * * * username_tuyo /usr/local/bin/script

        Ahí ejecutará tu script cada 30 minutos.

        Saludos.

  7. megavolt2010 says:

    No, no hay caso no me funciona con una sola linea, se ejecuta y la consola no se queja, pero no envia nada. Otra cosa en el script original ¿Cuantas lineas se pueden poner en el archivo de texto? Estoy desde otra cuenta por que en el trabajo no tengo la clave de la otra y no me acuerdo je je

  8. felixurbina says:

    Sí, ese bloque.

  9. Bien, copie lo que pusiste y lo guarde como estamosescuchando.sh, le di permisos de ejecución y lo moví a /usr/local/bin/ el contenido quedó así:
    #!/bin/bash

    ARCHIVO=”$/home/yeti/radit32-original/Radit-1.0-Lucid/CurrentSound/CurrentSound.txt”

    cat ${ARCHIVO} | while read LINEA
    do
    echo “${LINEA}” > /tmp/tuit
    twidge update < /tmp/tuit
    done

    exit 0

    Cuando lo ejecuto la terminal me dice lo siguiente:
    yeti@yeti-eMachines-E725:~$ estamosescuchando.sh
    cat: $/home/yeti/radit32-original/Radit-1.0-Lucid/CurrentSound/CurrentSound.txt: No existe el archivo o el directorio
    yeti@yeti-eMachines-E725:~$

    La ruta es esa seguro, es mas si arrastro el archivo a una terminal me lo pone:
    yeti@yeti-eMachines-E725:~$ /home/yeti/radit32-original/Radit-1.0-Lucid/CurrentSound/CurrentSound.txt
    ¿que puede estar pasando?
    Disculpa las molestias.

    • felixurbina says:

      Qué tal, la variable:

      ARCHIVO=”$/home/yeti/radit32-original/Radit-1.0-Lucid/CurrentSound/CurrentSound.txt”

      Debería ser:

      ARCHIVO=”/home/yeti/radit32-original/Radit-1.0-Lucid/CurrentSound/CurrentSound.txt”

      • Bien vamos avanzando, ya no se queja de que no existe el archivo (paso solucionado) ahora bien no tuitea nada, sin embargo descubrí que si agrego una segunda linea al txt si tuitea la primera, pero si tiene una sola no tuitea nada. Por ejemplo si está así:
        Locucion hora
        No tuitea, pero si el txt está asi:
        Locucion hora
        esta es otra linea
        En ese caso si me tuitea Locucion hora, el problema es que el txt siempre tendrá una sola linea, tiene que tuitear la primera que por otro lado es la única que habra.
        ¿Se entiende?

  10. Las comillas cambiadas las pone el editor de WordPress cuando se publica el post, para pegar el contenido de lo anterior me guié por el post original el que está con fondo negro, en ese si quedan bien.

  11. Bueno por fin lo conseguí!! y sin querer me quedó mejor de lo que pensaba, basicamente como no me tuitiaba nada si solo tenía una linea lo que hice fue decirle en el mismo script que le agregara otra con un texto que yo quiero y antes de que lea la primera le agregue otro texto y quedó como yo quería o sea así:

    Ahora escucho: Melingo – Angurrienta …En mi prueba para radios

    Tal cual te lo acabo de copiar de mi timeline. El script quedó asi:

    #!/bin/bash

    echo ” …En mi prueba para radios” >> /home/yeti/radit32-original/Radit-1.0-Lucid/CurrentSound/CurrentSound.txt
    ARCHIVO=”/home/yeti/radit32-original/Radit-1.0-Lucid/CurrentSound/CurrentSound.txt”

    cat ${ARCHIVO} | while read LINEA
    do
    echo Ahora escucho: “${LINEA}” > /tmp/tuit
    twidge update < /tmp/tuit
    done

    exit 0

    Gracias por todo, en el correr del día lo publicaré en mi blog, por supuesto citando la fuente de la idea principal.
    Saludos

    • felixurbina says:

      Excelente, qué bueno, me alegra mucho. Éxitos y gracias por comentar la solución, también me ayuda a corregir algunas cosas que quizás no tomé en cuenta.

      Saludos.

  12. Bueno ya cree la entrada en el blog sobre la adaptación del script
    http://aprenderconlibertad.blogspot.com/2014/07/como-tuitiar-lo-que-esta-sonando-en.html
    Gracias por todo.

  13. latino says:

    Hola a todos tengo una radio en internet con radionomy que debo hacer para que las canciones que suenan se twetteen automaticamente ?que pasos debo seguir? por ejemplo paso 1)intalar algun programa en mi pc o poner algun codigo en mi web donde tengo el reprofuctor html seria muy bueno si existe algun video tutorial quien me puede colaborar les agradeceria mucho.muchas gracias.

  14. Saludos a todos !!!… Para tuitear lo que emita Guarango debería ser algo como lo siguiente:

    #!/bin/bash

    echo ” …” >> /home/tu-usuario/.guarangoradio/data/tmp/currentsong.txt
    ARCHIVO=”/home/tu-usuario/.guarangoradio/data/tmp/currentsong.txt”

    cat ${ARCHIVO} | while read LINEA
    do
    echo En Mágica 106.3 FMC escuchas: “${LINEA}” > /tmp/tuit
    twidge update < /tmp/tuit
    done

    exit 0

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s