domingo, 23 de noviembre de 2008

Te sigo de cerca

Como es habitual en mí, en las proximidades de un examen busco imagínativas formas de eluduir la pesada responsabilidad de estudiar. Os podéis hacer una idea de cómo de aburridas deben ser las asignaturas de mi carrera cuando para entretenerme hago algo como esto:


#!/bin/bash
#
# Este script está diseñado para chequear automáticamente si hay actualizaciones
#en un envío realizado por Express Mail Service (EMS) a Japón.
#
# Está basado en el servicio de seguimiento de Japan Post ( http://www.post.japanpost.jp )
#
# Realizado por Astaroth (O.R.G.)
# e-Mail: Webmaster@astarothsworld.zzn.com
# Página: http://astarothsworld.blogspot.com/
#
# Versión 1.0
#
# Para más información, visita: http://astarothsworld.blogspot.com/2008/11/te-sigo-de-cerca.html#arriba
#
carpetainicial=`pwd`
#Leemos los valores de las variables:
function def {
echo $igual | sed 's/\"//g' | grep -o "$1\=[[:alnum:]]*" | sed 's/'$1'\=//g'
}
igual=`gtkdialog -g if/interface.glade -p window1 | grep \=`
n=`def n`
t=`def t`
Informe=`def Informe`
EXIT=`def EXIT`
if [ $EXIT = "Aceptar" -o $Informe = "true" ] ; then
    #Definimos carpeta temporal:
    mkdir $HOME/.EMS$n
    rm $HOME/.EMS$n/*
    cd $HOME/.EMS$n
    w3m http://tracking.post.japanpost.jp/service/singleSearch.do?searchKind=S004\&locale=en\&reqCodeNo1=$n\&x=64\&y=11 > Informe.txt
    if [ $Informe = "true" ] ; then
      gedit Informe.txt

    fi
    if [ $EXIT = "Aceptar" ] ; then
      #Bucle infinito
      k=1
      while [ $k -eq 1 ] ; do
        clear
        T=`echo "$t * 60" | bc`
        hora=`date +%T`
        echo "Son las $hora. Me has mandado dormir $t minutos ($T segundos), así que no molestes."
        sleep $T
        w3m http://tracking.post.japanpost.jp/service/singleSearch.do?searchKind=S004\&locale=en\&reqCodeNo1=$n\&x=64\&y=11 > Informe2.txt
        #Determinación de márgenes:
        Fin=`grep -n ┗ Informe.txt | awk -F\: '{print $1}'`
        Ini2=`grep -n ┏ Informe2.txt | awk -F\: '{print $1}'`
        Fin2=`grep -n ┗ Informe2.txt | awk -F\: '{print $1}'`
        d2=`cat Informe2.txt | awk -F\│ '{print $1}' | grep -n ─ | awk -F\: '{print $1}'`
        P=0
        if [ ! $Fin2 = $Fin ] ; then
          a=`echo "$Fin + 1" | bc`
          for i in $d2 ; do
            if [ $i -gt $Fin ] ; then
              if [ $i -lt $Fin2 ] ; then
                P=`echo "$P + 1" | bc`
                I=`echo "$i - 1" | bc`
                cat Informe2.txt | sed -n ''$a','$I'p' > proc$P.txt
                a=`echo "$i + 1" | bc`

              fi

            fi

          done
          P=`echo "$P + 1" | bc`
          I=`echo "$Fin2 - 1" | bc`
          cat Informe2.txt | sed -n ''$a','$I'p' > proc$P.txt

        fi
        #Lectura de procesos nuevos:
        function unalin {
          echo "$1 $2 $3 $4 $5"

        }
        for proc in $(seq $P) ; do
          Fecha=`cat proc$proc.txt | sed 's/├/│/g' | sed 's/┤/│/g' | sed 's/─//g' | sed 's/┃//g' | awk -F\│ '{print $1}'`
          Fecha=`unalin $Fecha`
          Estado=`cat proc$proc.txt | sed 's/├/│/g' | sed 's/┤/│/g' | sed 's/─//g' | sed 's/┃//g' | awk -F\│ '{print $2}'`
          Estado=`unalin $Estado`
          Detalles=`cat proc$proc.txt | sed 's/├/│/g' | sed 's/┤/│/g' | sed 's/─//g' | sed 's/┃//g' | awk -F\│ '{print $3}'`
          Detalles=`unalin $Detalles`
          Oficina=`cat proc$proc.txt | sed 's/├/│/g' | sed 's/┤/│/g' | sed 's/─//g' | sed 's/┃//g' | awk -F\│ '{print $4}'`
          Oficina=`unalin $Oficina`
          Prefectura=`cat proc$proc.txt | sed 's/├/│/g' | sed 's/┤/│/g' | sed 's/─//g' | sed 's/┃//g' | awk -F\│ '{print $5}'`
          Prefectura=`unalin $Prefectura`
          zenity --warning --title="Nueva actualización de su envío" --text="Hemos localizado una actualización en su envío\!\n\nA continuación, pasamos a detallarle los datos de la misma:\n\n\t- Fecha y Hora:$Fecha\n\t- Estado del envío: $Estado\n\t - Detalles: $Detalles\n\t - Oficina: $Oficina\n\t - Prefectura: $Prefectura."

        done
        mv Informe2.txt Informe.txt
        rm proc*.txt

      done

    fi

fi
cd $carpetainicial
gtkdialog -g if/interface.glade -p window2



Que qué es?, pues es un práctico script que te avisa de las actualizaciones que sufra un paquete enviado desde/a Japón por Express Mail Service (EMS).

Es frecuente en las relaciones comerciales por Internet que acabemos pendientes del envío de un paquete desde Japón, con nuestra PlayStation nueva, por ejemplo, o nuestro reloj de TokyoFlash. Hay veces que es al contrario, y somos nosotros los que enviamos algo para allá, al servicio de reparación, por ejemplo, como ha sido mi caso.

En cualquier caso, ya no será necesario meterse cada dos por tres en la página para hacer el seguimiento. Ahora EMStracer (que es como he llamado a esta maraña de código que he escrito) se encarga de revisarlo periódicamente (con el periodo que tú decidas) y de avisarte cuando de verdad se haya producido alguna novedad en tu envío, informándote de qué se trata.

Al inicialrlo aparecerá una ventana como la siguiente:


En ella escribiremos nuestro número de envío (un número de 13 dígitos que nos tienen que dar para seguir el rastro de un paquete registrado por EMS) y el tiempo en minutos que queremos que espere entre comprobación y comprobación.

Si pinchamos en "Ver Informe", nos abrirá una ventanita del gedit (conocido editor de texto de Linux) con el informe descargado en el momento de ejecutar el programa. Si le damos a "No chequear" el programa acaba ahí, pero si le damos a "Chequear", el programa comparará los informes que vaya descargando periódicamente, y mostrará una alerta como la siguiente cuando encuentre alguna novedad:


Al finalizar el programa, aparecerá algo como esto:


Cunado le damos al botón "Chequear", el programa entra en un bucle infinito que no acaba hasta que matamos el proceso o reiniciamos el ordenador.


Requisitos:
  • Linux (funciona bajo shell bash).
  • Conexión a Internet (para descargar la información de Japan Post).
  • gedit (para mostrar los informes).
  • gtkdialog (para la interfaz gráfica en glade).
  • w3m (es la forma que utiliza el script para leer las páginas web).

Advertencias:

Este script es aún experimental, y puede tener fallos. Así mismo, no me responsabilizo de que pueda ocasionar algún daño en un ordenador por el hecho de ejecutarlo, aunque, evidentemente, ha sido diseñado para que esto no ocurra, por lo que es improbable.


Descarga:

http://usuarios.lycos.es/astarothsworld/EMStracer.zip


Nota sobre la descarga:

Lycos, para tocar un poco las narices xD, no deja acceder a la descarga si provienes desde otra página (que es el caso en el que te encontrarías si pinchas directamente el link anterior), así que si quieres descargar el programa deberas copiar la dirección, y pegarla en la barra de direcciones de tu explorador (así contará como una visita directa, y no como una visita desde una página externa y te dejará bajarte el archivo).

No hay comentarios:

Publicar un comentario

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+.