martedì 25 settembre 2012

Unire più calendari Google in un unico feed RSS

Per portare a compimento la gestione degli eventi della mia scuola attraverso i calendari di Google, avevo l'esigenza di "fondere" diversi calendari Google in un unico feed RSS da mostrare nella homepage del sito scolastico Plone.

Per raggiungere questo scopo ho usato Yahoo Pipes.
Per prima cosa ho fornito come input i feed RSS di 3 calendari Google cui ho fatto seguire la stringa
"?&futureevents=true"
in modo che già in partenza i feed contenessero solo eventi non ancora passati.

I feed RSS degli eventi Google Calendar forniscono un contenuto del genere:
Il mio scopo è stato di fare un parsing di contenuti come quello sopra in modo da ottenere una voce (che ho chiamato "content2") di questo tipo:
2012 09 28 13:30 (ANNO MESE GIORNO ORA:MINUTO)
L'ordinamento alfabetico in base a content2 provoca l'ordinamento degli eventi dei 3 calendari in base all'inizio dell'evento.
Vediamo i primi 3 blocchi di Yahoo Pipes:
Il primo blocco raccoglie i feed RSS dei calendari Google da "fondere".
Nel secondo blocco viene creata una voce "content2" che duplica il contenuto del feed.
Il terzo blocco rinomina il nome dei mesi usando il relativo numero: questo sarà utile per ottenere l'ordinamento in base all'inizio degli eventi sfruttando un normale ordinamento alfabetico.
Vediamo i blocchi da 4 a 6:

Il blocco 4 copia la voce "content2" dentro la voce "description": in questo modo il feed "fusione" avrà i mesi espressi come numero.
Il blocco 4 scrive il numero del giorno sempre con due cifre (il giorno "5" diventa "05") e produce la data nella forma ANNO MESE GIORNO.
Il blocco 5 fa modifiche analoghe per la voce "description".
Vediamo ora gli ultimi blocchi:
Il blocco 6 svolge una operazione fondamentale:
al link generato dal feed RSS "fusione" viene aggiunta la stringa
"&ctz=Europe/Rome"
grazie alla quale quando si clicca su un evento viene mostrato con il fuso orario corretto.
Senza questo accorgimento, chi non ha un account Google riceve informazioni sull'evento usando il fuso orario di Greenwich.
Il blocco 7 effettua l'ordinamento alfabetico in base alla voce "content2"
Il blocco 8 è l'uscita dal tubo.
Il risultato è questo:
Questo elenco può essere trasmesso come feed RSS, JSON e molto altro verso il proprio sito internet.



mercoledì 5 settembre 2012

Integrazione di Fullcalendar dentro il proprio CMS




TRASCRIZIONE DEL VIDEO

Da qualche tempo sto pensando di gestire gli eventi della mia scuola attraverso Google calendar, la cui flessibilità e facilità d'uso mi sembrano inarrivabili.
Sino ad ora ho sempre utilizzato gli "eventi" proposti da mio CMS Plone, che ben si integrano con il widget "calendario" che ogni installazione di Plone propone in homepage.
Ho pensato dunque di usare i javascript di Adam Shaw per portare gli eventi dei calendari Google dentro Plone.
Avrei potuto usare uno degli innumerevoli plug-in già pronti, ma ho preferito evitare di installare altri plug-in e mi sono limitato a copiare gli script dentro il mio CMS scoprendo che... funzionano quasi senza fatica!
Il mio scopo (almeno per adesso) era di costruire una pagina che mostrasse l'agenda degli eventi del giorno (dalle 8 alle 17, per esempio).
Ho creato nel mio profilo di Google diversi calendari (sportello help, impegni docenti, riunioni varie....); ho reso pubblici questi calendari ed ho permesso ad alcuni utenti di aggiungere eventi o apportare modifiche.
Ho scaricato i files dal sito di Adam: qualche javascript e qualche css
Li ho caricati così come sono dentro Plone, e l'ho istruito affinchè li aggiungesse ai css e ai javascript che manda in ogni pagina.
Poi ho costruito la pagina dell'agenda seguendo il tutorial del sito di Adam.

Questo è il risultato: niente male no?
Certo, siamo lontani dall'accessibilità (puro javascript) e con ie8 ancora il calendario non funge (con ie9 sì) ma.... mi sembra promettente.