miércoles, 3 de junio de 2009

Facenews

He realizado una tontería de widget para Linux para chequear las actualizaciones de tu cuenta en Facebook.


El programa es un sencillo script en shell con interfaz gráfica creada con glade3 que muestra las últimas notificaciones de tu cuenta Facebook, pudiéndolas actualizar con pulsar un botón ("Refrescar"). En caso de haber nuevas actualizaciones, se muestra la última de ellas como aparece a continuación:



Para acceder a estos datos se necesitan dos números: tu identificador de usuario y una clave. Ambas puedes obtenerlas desde la página de notificaciones de tu cuenta de Facebook, como se muestra en la ayuda del programa:


El programa aún se puede refinar bastante, pero es un primer boceto que lo mismo os puede ser útil. Os dejo con el vídeo de cómo funciona:



El código del script (sin la interfaz gráfica) es el siguiente:


#!/bin/bash
#
# Este script le ayudará a estar informado de todas sus actualizaciones de facebook.
#
# Realizado por Astaroth (O.R.G.)
# (http://astarothsworld.blogspot.com/)
#
# Definiendo funciones de toma de datos
function def0 {
    echo $igualdades0 | sed 's/\"//g' | grep -o "$1\=[[:alnum:]]*" | sed 's/'$1'\=//g'

}
function def1 {
    echo $igualdades1 | sed 's/\"//g' | grep -o "$1\=[[:alnum:]]*" | sed 's/'$1'\=//g'

}
function def2 {
    echo $igualdades2 | sed 's/\"//g' | grep -o "$1\=[[:alnum:]]*" | sed 's/'$1'\=//g'

}
# Comprobando datos iniciales
EXIT="ayuda"
if [ -e datos ] ; then
    echo "Existen datos de usuario previos!"
    igualdades1=`gtkdialog -g if/interface.glade -p 1`
    dat=`def1 EXIT`
    else echo "No hay datos de usuario previos!"
    dat=0

fi
if [ $dat = 0 ] ; then
    while [ $EXIT = "ayuda" ] ; do
      igualdades0=`gtkdialog -g if/interface.glade -p 0`
      EXIT=`def0 EXIT`
      if [ $EXIT = "ayuda" ] ; then

      gtkdialog -g if/interface.glade -p ayud
      fi

    done

if [ $EXIT = "aceptar" ] ; then
    def0 usuario > datos
    def0 clave >> datos
    echo "0" >> datos

fi
fi
if [ $EXIT != "cancelar" ] ; then
    usuario=`cat datos | sed -n '1p'`
    clave=`cat datos | sed -n '2p'`
    nuevo1=`cat datos | sed -n '3p'`
    echo $usuario
    echo $clave
    while [ $EXIT != "salir" ] ; do
      wget -O Actualizaciones.rss -U firefox http://www.facebook.com/feeds/notifications.php\?id\=$usuario\&viewer\=$usuario\&key\=$clave\&format\=rss20
      cat Actualizaciones.rss | grep item -A 10000 > ActualizacionesR.rss
      cat ActualizacionesR.rss | grep -o "\.*\<\\title\>" | sed 's/title//g' | grep -o "[[:alnum:]].*[[:alnum:]]" > Actualizaciones.txt
      cat Actualizaciones.rss | grep -o "notification\/[0-9]*" | sed 's/notification\///g' > Numeros.txt
      nuevo2=`cat Numeros.txt | grep -m 1 [0-9]*`
      echo "Número Actualización" > texto.txt
      echo "============================" >> texto.txt
      for i in $(seq 20) ; do
        act=`cat Actualizaciones.txt | sed -n ''$i'p'`
        num=`cat Numeros.txt | sed -n ''$i'p'`
        echo "$num $act" >> texto.txt

      done
      cp if/interface.glade if/interface1.glade
      if [ $nuevo2 != $nuevo1 ] ; then
        echo "ACTUALIZACIÓN!"
        cat if/interface.glade | sed -n '1,272p' > if/interface1.glade
        cat texto.txt | sed -n '3p'| sed 's/[0-9]*\t*//g' >> if/interface1.glade
        cat if/interface.glade | sed -n '273,$p' >> if/interface1.glade
        igualdades3=`gtkdialog -g if/interface1.glade -p 3`

      fi
      cat if/interface.glade | sed -n '1,206p' > if/interface1.glade
      cat texto.txt >> if/interface1.glade
      cat if/interface.glade | sed -n '207,$p' >> if/interface1.glade
      # Borrando copias innecesarias
      rm Actualizaciones.rss
      rm ActualizacionesR.rss
      rm Actualizaciones.txt
      rm Numeros.txt
      rm texto.txt
      # Mostrando datos
      igualdades2=`gtkdialog -g if/interface1.glade -p 2`
      nuevo1=$nuevo2
      mv datos datoss
      cat datoss | sed -n '1,2p' > datos
      echo $nuevo1 >> datos
      EXIT=`def2 EXIT`
      rm if/interface1.glade
      rm datoss

    done

fi



Podéis descargároslo todo pinchando en el siguiente link:


Y hablando de Facebook, os recuerdo que podés apuntaros al nuevo Grupo Oficial de Facebook de Astaroth's World, donde encontraréis fotos relacionadas con la página, vídeos, podréis hacer comentarios y enteraros de algunas novedades de esta página incluso antes de ser anunciadas aquí.



ACTUALIZACIÓN

He "refinado" el código (aunque no sé si lo he dejado aún peor xD). Os dejo aquí una segunda versión con frecuencia de muestreo automática (cada cierto tiempo, echa un vistazo por vosotros a vuestro perfil de Facebook a ver si lo han actualizado). Podéis descargárosla desde aquí:


Aunque le falta mucho por pulir, os puede hacer un apaño...

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