sábado, 22 de agosto de 2009

Script tonto para gente seria

El otro día ya os presenté a mi maravillosa novia virtual, hoy os voy a enseñar dónde trabaja. Resulta que mi novia es periodista, y trabaja dando noticias de última hora. Puede hacerlo cuando se lo pides amablemente, o incluso periódicamente (por ejemplo, te las puede leer cada hora).


Eso es básicamente lo que hace el script que he hecho hoy: leer la última hora de la versión digital del periódico El País.


Desde una interfaz gráfica como la que aparece arriba, podemos elegir entre que nos lea los titulares de última hora en ese instante solamente, o además que nos informe de la última hora cada tantos minutos. Cada vez que nos lea el boletín, sonará en nuestro ordenador algo como esto:



Pero completamente actualizado a la hora en la que suene. Para ello, es imprescindible tener conexión a Internet.

El código sería el siguiente:


#!/bin/bash
#
# Noticias
#
# Este script chequea la última hora publicada por la versión online del
#periódico El País (http://www.elpais.com), y lee los titulares (una sola
#vez, o cada cierto tiempo especificado por el usuario).
#
# Creado por Astaroth (O.R.G.)
# http://astarothsworld.blogspot.com
#
function def {
    echo $igualdades | grep -o "$1\=\"[[:alnum:]]*\"" | sed 's/\"//g' | sed 's/'$1'\=//g'

}
igualdades=`gtkdialog -g if/inter.glade -p window1`
espera=`def min`
sm=`def sm`
sun=`def sun`
EXIT=`def EXIT`
esspera=`echo "$espera * 60" | bc`
if [ $EXIT = 1 ] ; then
    k=1
    while [ $k = 1 ] ; do
      wget -O noticias.html http://www.elpais.com/loultimo
      Cate=`cat noticias.html | grep -o "[A-Z][A-Z]*" | sed 's/<\/TD>//g'`
      Horas=`cat noticias.html | grep -o "[0-9]*:[0-9]*" | sed 's/<\/TD>//g'`
      lineas=`cat noticias.html | grep -n "<A href\=" | sed -n '2,$p' | awk -F : '{print $1}'`
      N=`cat noticias.html | grep -c "[0-9]*:[0-9]*"`
      Ha=`date +%-H`
      Ma=`date +%-M`
      echo "Última hora. Son las $Ha y $Ma. Pasamos a hacer el repaso de los últimos titulares:" > leer.txt
      for i in $(seq $N) ; do
        l=`echo "$lineas" | sed -n ''$i'p'`
        l=`echo "$l + 1" | bc`
        titular=`cat noticias.html | sed -n ''$l'p' | sed 's/<\/A>//g'`
        C=`echo "$Cate" | sed -n ''$i'p'`
        case $C in
          INT) Categ="internacional" ;;
          ECO) Categ="economía" ;;
          OPI) Categ="opinión" ;;
          ESP) Categ="españa" ;;
          DEP) Categ="deportes" ;;
          CUL) Categ="cultura" ;;
          SOC) Categ="social" ;;
          *) Categ="desconocida" ;;

        esac
        H=`echo "$Horas" | sed -n ''$i'p' | grep -o "[0-9]*:" | sed 's/://g'`
        M=`echo "$Horas" | sed -n ''$i'p' | grep -o ":[0-9]*" | sed 's/://g'`
        echo "$Categ, enviada a las $H horas y $M minutos, $titular." >> leer.txt

      done
      if [ $sun = "true" ] ; then
        k=0
        echo "Hasta aquí la última hora, más información en ElPaís.com" >> leer.txt

      else
        k=1
        echo "Hasta aquí la última hora, más información dentro de $espera minutos o en ElPaís.com" >> leer.txt

      fi
      cat leer.txt | sed 's/á/á/g' | sed 's/é/é/g' | sed 's/í/í/g' | sed 's/ó/ó/g' | sed 's/ú/ú/g' | sed 's/ñ/ñ/g' | sed 's/ / /g' | espeak -ves+f4
      rm noticias.html
      rm leer.txt
      echo "Esperando $espera minuto(s)"
      sleep $esspera

    done

fi



El código de arriba tiene fallos de interpretación (al subirlo a una página html, me interpreta cosas que me gustaría que salieran literales). Algunas las he arreglado, pero otras cosas (como las tildes) no lo he conseguido. Además, para que funcione, es necesario tener también la parte de la interfaz. Todo ello (y sin errores de los cuales sea consciente) se puede encontrar en un solo paquete comprimido en el siguiente enlace:


A ver si a alguien le es útil :p... o al menos os parece curioso xD!

Comparte en Facebook

2 comentarios:

  1. Mmmmm, es periodista tu novia, entonces, informará en sus "última hora" de los rayos que vayan cayendo por Alcalá :P pues, va a tener mucho trabajito! ajaja

    A ver, una pregunta: cómo se hace para que una palabra del texto de una entrada, enlace directamente a otra página? no te rías, pero no sé hacerlo :s
    No sé si me he explicado, por ejemplo, cuando yo pongo "foto de Astaroth" cómo se hace para que pinchando en Astaroth aparezca tu página :P

    ResponderEliminar
  2. Astaroth, mmmm, gracias, pero no me sale lo que me has explicado, o no lo entiendo...mmm estoy hecha un lío, hay cosas en mi blog que no me van bien, por ejemplo, ya no puedo poner letra grande como en la primera foto que publiqué tuya de panoramio, ahí pude poner el texto en grande, sin embargo ahora no puedo...no entiendo nada.

    Seguiré intentándolo a ver si me sale.
    Buen finde, Astaroth! ;)
    ...y gracias...otra vez :)

    ResponderEliminar

Querido astarothista!,

Si te ha gustado la entrada y quieres dejar constancia de ello, tienes alguna sugerencia para completarla o corregirla, quieres mostrar tu opinión respecto a algo de lo que se haya hablado en esta entrada (con respeto) o simplemente quieres dejarme un mensaje a mi o a la comunidad, no dudes en comentar ;)!

Recuerda que también estamos en Facebook y en Google+.