Esta pagina se ve mejor con JavaScript habilitado

Integración de los eventos de Google Calendar con Awesome

 ·  🎃 kr0m

El trabajo se dividirá en dos partes:

  • Script en bash para obtener los eventos y parsearlos
  • Widget en LUA que lee el fichero generado por el script en bash

Primero instalaremos la herramienta que nos descargará los eventos de nuestro Gogle Calendar:

cd /usr/src/
git clone https://github.com/insanum/gcalcli.git
cd gcalcli
python setup.py install
emerge dev-python/pip
pip install vobject parsedatetime
emerge dev-python/google-api-python-client

Ahora creamos el script que nos parseará la salida de la herramienta anterior y nos generará el fichero con la sintaxis correcta para ser leído por el widget en LUA:

vi ~/.scripts/cal.sh

#! /bin/bash
NOW=$(date '+%Y-%m-%d %H:%m')
NOWEPOCH=$(date +%s)
#echo -e "NOW: $NOW"
#echo -e "NOWEPOCH: $NOWEPOCH"
# 30days --> 2592000
ENDEPOCH=$((ENDEPOCH=NOWEPOCH+2592000))
#echo -e "ENDEPOCH: $ENDEPOCH"
END=$(date -d @$ENDEPOCH '+%Y-%m-%d %H:%m')
#echo -e "END: $END"

> /tmp/tareas

IFSORI=$IFS
IFS=$'
'
for LINE in $(/usr/bin/gcalcli --tsv --calendar CALENDARIO1 --calendar CALENDARIO2 --calendar CALENDARION agenda "'$NOW'" "'$END'")
do
    YEAR=$(echo $LINE|awk -F "-" '{print$1}')
    #echo -e "-- YEAR: $YEAR"
    MONTH=$(echo $LINE|awk -F "-" '{print$2}')
    #echo -e "-- MONTH: $MONTH"
    DAY=$(echo $LINE|awk -F "-" '{print$3}'|awk -F " " '{print$1}')
    #echo -e "-- DAY: $DAY"
    case $MONTH in
        01) MONTHLETTERS=Jan ;;
        02) MONTHLETTERS=Feb ;;
        03) MONTHLETTERS=Mar ;;
        04) MONTHLETTERS=Apr ;;
        05) MONTHLETTERS=May ;;
        06) MONTHLETTERS=Jun ;;
        07) MONTHLETTERS=Jul ;;
        08) MONTHLETTERS=Aug ;;
        09) MONTHLETTERS=Sep ;;
        10) MONTHLETTERS=Oct ;;
        11) MONTHLETTERS=Nov ;;
        12) MONTHLETTERS=Dec ;;
    esac
    #echo -e "-- MONTHLETTERS: $MONTHLETTERS"
    TXT=$(echo $LINE|cut -f5-)
    #echo -e "-- TXT: $TXT"
    echo -e "** $TXT" >> /tmp/tareas
    echo -e "SCHEDULED: <$YEAR-$MONTH-$DAY $MONTHLETTERS>" >> /tmp/tareas
done
IFS=$IFSORI
chmod 700 ~/.scripts/cal.sh

Realizamos la primera ejecución para que nos pida las credenciales de la cuenta de gmail, a partir de este momento gcalcli almacenará dichas credenciales:

/usr/bin/gcalcli –tsv –calendar CALENDARIO1 –calendar CALENDARIO2 –calendar CALENDARION agenda “’$NOW’” “’$END'”

NOTA: Puede que intente abrir la web para dar acceso a la cuenta con un navegador sin javascript, si es el caso antes de la ejecución del script indicaremos el navegador a utilizar:

export BROWSER=“firefox”

Metemos el script en el cron para que se ejecute cada 5 min:

crontab -e

SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

*/5 * * * * /home/XXXX/.scripts/cal.sh >/dev/null 2>&1

Nos bajamos el widget:

NOTA: El widget de mi web ha sido retocado para que la semana comience en lunes, el script anterior impone la restricción de que los eventos del calendario no pueden tener espacios en blanco, se puede sustituir por _ por ejemplo, para mas información acerca del widget ,

Integramos el widget en el reloj:

vi rc.lua

-- Create a textclock widget
mytextclock = awful.widget.textclock({ align = "right" })
local orglendar = require('orglendar')
orglendar.files = { "/tmp/tareas" }
orglendar.register(mytextclock)

Con esto ya lo tenemos todo, ahora cuando el ratón pase sobre el reloj se desplegará un calendario y una lista de los eventos, el resultado es el siguiente:

Si te ha gustado el artículo puedes invitarme a un RedBull aquí