lunes, 24 de noviembre de 2008

Ni GODZILLA podrá evitar que estemos al tanto de nuestros envíos a Japón

Se acerca el día de mi proximo examen, y ya sabemos todos lo que eso significa: más actividad en Astaroth's World que me distraiga del peñazo que tengo que estudiarme XD!


Como actividad difusa que "me obligue" a no estudiar hoy, he elegido la de retocar el programa que hice hace poco para poder controlar los envíos de correo que se hagan a Japón o desde Japón a través de EMS (Express Mail Service).

(Pinchar sobre la imagen para verla a tamaño real)

Básicamente, el programa se metía en la página de Japan Post cada cierto tiempo especificado por tí y te informaba de cada cambio individual que detectase. Así te evitaba el tener que meterte tu mismo cada dos por tres.

Esta nueva versión mejora la forma de mostrar esos cambios, los cuales aparecerán todos en una tabla (en vez de uno por uno, como ocurría anteriormente) como esta:

(Pinchar sobre la imagen para ver a tamaño real)

Además, incluye la opción de buscar en un mapa de Google la localización de tu paquete en cada etapa (pinchando en la opción "Mapa" en la fila que corresponda.

El código del programa (a excepción de la parte gráfica realizada en glade) es el siguiente:


#!/bin/bash
#
#*********************
# EMStracer v2.0
#*********************
#
# 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/
#
# Para más información, visita: http://astarothsworld.blogspot.com/2008/11/ni-godzilla-podr-evitar-que-estemos-al.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 > Informe.txt
    if [ $Informe = "true" ] ; then
      gedit Informe.txt

    fi
    if [ $EXIT = "Aceptar" ] ; then
      #Bucle infinito
      k=1
      Actualiz=0
      while [ $k -eq 1 ] ; do
        clear
        T=`echo "$t * 60" | bc`
        hora=`date +%T`
        echo "Qué quieres?, son las $hora"'!!!'
        echo "Me has mandado dormir $t minutos ($T segundos), así que ahora no molestes..."
        echo "En la última revisión encontré $Actualiz actualizaciones."
        sleep $T
        w3m http://tracking.post.japanpost.jp/service/singleSearch.do?searchKind=S004\&locale=en\&reqCodeNo1=$n > 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
        Actualiz=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
          Actualiz=$P

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

        }
        echo 'zenity --list --checklist --height=300 --width=1000 --title="Nueva actualización de su envío :D\!" --text="Hemos localizado '"$Actualiz"' actualizacion(es) en su envío\! A continuación, pasamos a detallarle los datos de la(s) misma(s):\n\n *Datos referentes al código EMS: '"$n"'" --column "Mapa" --column "#" --column "Mes" --column "Día" --column "Hora" --column "Estado" --column "Detalles" --column "Oficina" --column "Código Postal" --column "Prefectura"' > tabla.txt
        for proc in $(seq $P) ; do
          Date=`cat proc$proc.txt | sed 's/├/│/g' | sed 's/┤/│/g' | sed 's/─//g' | sed 's/┃//g' | awk -F\│ '{print $1}'`
          Date=`unalin $Date`
          Mes=`echo $Date | sed 's/[0-9]*//g' | sed 's/://g'`
          Dia=`echo $Date | sed 's/[0-9]*:[0-9]*//g'| grep -o "[0-9]*"`
          Hora=`echo $Date | grep -o "[0-9]*:[0-9]*"`
          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`
          Nomof=`echo "$Oficina" | sed 's/[0-9]*-[0-9]*//g'`
          CP=`echo "$Oficina" | grep -o "[0-9]*-[0-9]*"`
          Prefectura=`cat proc$proc.txt | sed 's/├/│/g' | sed 's/┤/│/g' | sed 's/─//g' | sed 's/┃//g' | awk -F\│ '{print $5}'`
          Prefectura=`unalin $Prefectura`
          echo "\" \" \"$proc\" \"$Mes\" \"$Dia\" \"$Hora\" \"$Estado\" \"$Detalles\" \"$Nomof\" \"$CP\" \"$Prefectura\"" >> tabla.txt

        done
        if [ ! $Actualiz = 0 ] ; then
          tabla=`cat tabla.txt`
          echo $tabla > tabla.txt
          Mapa=`bash tabla.txt`
          for nm in $(seq $Actualiz) ; do
            if ( echo $Mapa | grep $nm ) ; then
              io=`echo "10 * $nm - 1" | bc`
              ip=`echo "10 * $nm + 1" | bc`
              Oficina=`cat tabla.txt | awk -F"\" \"" '{print $'$io'}' | awk '{print $1}'`
              Prefectura=`cat tabla.txt | awk -F"\" \"" '{print $'$ip'}' | awk '{print $1}'`
              firefox http://maps.google.es/maps\?f\=q\&hl\=es\&geocode\=\&q\=$Oficina,+$Prefectura


            fi

          done

        fi
        mv Informe2.txt Informe.txt
        rm proc*.txt
        rm tabla.txt

      done

    fi

fi
#rm -R $HOME/.EMS$n
cd $carpetainicial
gtkdialog -g if/interface.glade -p window2



Os podéis descargar el programa de la siguiente dirección (será necesario copiarla y pegarla en tu navegador web):



---------------------------

Actualización

Ahora que estoy en racha, aprovecho para sacar una nueva versión XD, saco una por día XD! Esta tercera versión la coloco aquí, como un anexo de la segunda, porque en realidad tampoco difiere tanto de ella. El primer cambio es un nuevo diseño en la skin principal:


La otra diferencia es que en vez de dibujar un mapa por ubicación seleccionada (abriendo varias ventanas o pestañas en el Firefox), ahora intentará localizar todas las direcciones que seleccionemos en un único mapa. Este procedimiento no es fácil (al menos con mis conocimientos :p), y lo que he hecho es basarme en el sistema de "rutas" de Google Maps.


Este sistema presenta problemas en nuestro caso. Por ejemplo, cuál es la ruta entre dos puntos iguales? (parece la pregunta de un intrigante profesor de física XD). Según Google, la respuesta es "ninguna", y si nos equivocamos y seleccionamos para que nos localice dos ubicaciones iguales, el programa falla. También falla si no encuentra mecanismos para unir ambos puntos (esto pasa para puntos internacionales distantes entre sí).

Todo esto era para intentar mejorar la representación en un mapa de varias localizaciones que pudiesen haber salido en una única actualización (es decir, si hacemos caso a los valores por defecto, todas las actualizaciones que hayan ocurrido en 15 minutos). Como no es normal (o al menos en los casos que yo he vivido) que haya más de dos o tres actualizaciones al día, resulta bastante improbable que coincidan varias en una actualización que se hace cada 15 minutos, por lo que lo mismo os vale la versión anterior de EMStracer (la del principio de esta entrada) que va bien para representar localizaciones de una en una.

Os dejo el código y el link de descarga:


#!/bin/bash
#
#*********************
# EMStracer v3.0
#*********************
#
# 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/
#
# Para más información, visita: http://astarothsworld.blogspot.com/2008/11/ni-godzilla-podr-evitar-que-estemos-al.html#arriba
#
#
# NOTAS DE LA VERSIÓN:
#
# Esta versión se diferencia de la anterior en la representación de los mapas. En
#esta versión, se hace en forma de ruta, así que en vez abrir varias ventanas de
#Firefox para mostrar varios resultados, se muestran en un sólo mapa. Esto puede
#fallar porque Google maps a veces no calcula con facilidad trayectos internacionales.
#
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 > Informe.txt
    if [ $Informe = "true" ] ; then
      gedit Informe.txt

    fi
    if [ $EXIT = "Aceptar" ] ; then
      #Bucle infinito
      k=1
      Actualiz=0
      while [ $k -eq 1 ] ; do
        clear
        T=`echo "$t * 60" | bc`
        hora=`date +%T`
        echo "Qué quieres?, son las $hora"'!!!'
        echo "Me has mandado dormir $t minutos ($T segundos), así que ahora no molestes..."
        echo "En la última revisión encontré $Actualiz actualizaciones."
        sleep $T
        w3m http://tracking.post.japanpost.jp/service/singleSearch.do?searchKind=S004\&locale=en\&reqCodeNo1=$n > 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
        Actualiz=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
          Actualiz=$P


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

        }
        echo 'zenity --list --checklist --height=300 --width=1000 --title="Nueva actualización de su envío :D\!" --text="Hemos localizado '"$Actualiz"' actualizacion(es) en su envío\! A continuación, pasamos a detallarle los datos de la(s) misma(s):\n\n *Datos referentes al código EMS: '"$n"'" --column "Mapa" --column "#" --column "Mes" --column "Día" --column "Hora" --column "Estado" --column "Detalles" --column "Oficina" --column "Código Postal" --column "Prefectura"' > tabla.txt
        for proc in $(seq $P) ; do
          Date=`cat proc$proc.txt | sed 's/├/│/g' | sed 's/┤/│/g' | sed 's/─//g' | sed 's/┃//g' | awk -F\│ '{print $1}'`
          Date=`unalin $Date`
          Mes=`echo $Date | sed 's/[0-9]*//g' | sed 's/://g'`
          Dia=`echo $Date | sed 's/[0-9]*:[0-9]*//g'| grep -o "[0-9]*"`
          Hora=`echo $Date | grep -o "[0-9]*:[0-9]*"`
          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`
          Nomof=`echo "$Oficina" | sed 's/[0-9]*-[0-9]*//g'`
          CP=`echo "$Oficina" | grep -o "[0-9]*-[0-9]*"`
          Prefectura=`cat proc$proc.txt | sed 's/├/│/g' | sed 's/┤/│/g' | sed 's/─//g' | sed 's/┃//g' | awk -F\│ '{print $5}'`
          Prefectura=`unalin $Prefectura`
          echo "\" \" \"$proc\" \"$Mes\" \"$Dia\" \"$Hora\" \"$Estado\" \"$Detalles\" \"$Nomof\" \"$CP\" \"$Prefectura\"" >> tabla.txt

        done
        if [ ! $Actualiz = 0 ] ; then
          tabla=`cat tabla.txt`
          echo $tabla > tabla.txt
          Mapa=`bash tabla.txt`
          dibmap=0
          NP=0
          for nm in $(seq $Actualiz) ; do
            echo 'http://maps.google.es/maps?f=d&saddr=' > Mapa.txt
            if ( echo $Mapa | grep $nm ) ; then
              NP=`echo "$NP + 1" | bc`
              dibmap=1
              io=`echo "10 * $nm - 1" | bc`
              ip=`echo "10 * $nm + 1" | bc`
              Oficina=`cat tabla.txt | awk -F"\" \"" '{print $'$io'}' | awk '{print $1}'`
              Prefectura=`cat tabla.txt | awk -F"\" \"" '{print $'$ip'}' | awk '{print $1}'`
              if [ $NP = 1 ]; then
                echo "$Oficina,+$Prefectura" >> Dires.txt

              else
                echo "+to:$Oficina,+$Prefectura" >> Dires.txt

              fi


            fi

          done
          if [ $dibmap = 1 ]; then
            url=`cat Mapa.txt Dires.txt`
            url=`echo $url | sed 's/ //g'`
            firefox $url

          fi

        fi
        mv Informe2.txt Informe.txt
        rm proc*.txt
        rm tabla.txt
        rm Mapa.txt
        rm Dires.txt

      done

    fi

fi
#rm -R $HOME/.EMS$n
cd $carpetainicial
gtkdialog -g if/interface.glade -p window2


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

Tal vez te intesere:

3 comentarios:

  1. jejejejej

    estás siguiendo a tu reloj???l preocupado t veo,deberías d haberle implantado un chip cómo si fuera una mascota para poder detectarlo...

    cómo va ese exámen?´
    akí llueve y hace un frío k no veas así k cómo entretenimiento difuso voy a seguir ojeando x akí a ver k se cuenta la página de astaroth...

    jejejejejejejejejejejeje

    besos mil
    lady savan

    ResponderEliminar
  2. ajaja tienes k ponerte el modo acecho en lo de seguir al reloj
    :)

    ResponderEliminar
  3. ayyyyy astaroth
    k rallao t tiene éste exámen t debería d haber conocido cuándo estaba en el instituto k llegué a cou con la física y las mates de segundo pendientes ajajajaja

    es curioso éste programa..pero sigo pensando en lo del modo acecho ajajaja ganas 5 puntos d vida si lo sigues hasta su destino sin perderlo de vista ;)


    k sueño hay hoy con éste frío ártico y polar!!!zzzz

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