iCal report

, par MiKaël Navarro

Pour mes besoins personnel, un petit script permettant de représenter de façon synthétique les événements enregistrés dans un ou plusieurs calendriers.

L’idée était de disposer d’un outil qui permettrait de lire un calendrier électronique au format ICalendar afin de produire différents rapports synthétiques (aux formats TXT, ReST, CSV ou HTML).

P.I. le format ICalendar est un standard (RFC 5545) pour les échanges de données de calendrier.
Il est supporté par un grand nombre de logiciels tels que :
 Apple iCal & iSync
 Chandler
 Google Agenda
 IGoogle
 IBM/Lotus Notes & Domino
 KOrganizer
 Mozilla Lightning & Sunbird
 Mulberry
 Microsoft Outlook (versions récentes, et pas Outlook Express)
 Netvibes
 PHP (via une librairie d’extension)
 Posh
 ScheduleWorld
 SOGo
 Ximian Evolution
 Windows Calendar
 Zimbra
 ...

Ci-joint le fameux script Python :

icalreport.py
$ python.exe -O icalreport.py -h
Usage: python -O icalreport.py [options] <cal1.ics> [cal2.ics ...]

Open and read iCal (ics) files then output report.

Options:
 -s START, --start=START
                       start date (YYYY-MM-DD)
 -e END, --end=END     end date (YYYY-MM-DD)
 -o OUTPUT, --output=OUTPUT
                       outpout format ['txt', 'rest', 'csv', 'html']
 -l LANG, --lang=LANG  output language ['C', 'fr_FR.utf8', 'fr-FR', ...]
 -u UTC, --utc=UTC     UTC offset (Europe/Paris= GMT +01:00 = 1)
 -t, --test            auto test
 --version             show program's version number and exit
 -h, --help            show this help message and exit

A noter que l’option -t utilise un calendrier auto-généré comportant les dates des fêtes françaises pour la fin de l’année 2013. C’est cet agenda que l’on prendra en exemple ci-dessous.

Outre les options :
 --start YYYY-MM-DD et --end YYYY-MM-DD qui permettent de n’afficher qu’une partie de l’agenda,
 --utc 1 qui permet de positionner le décalage UTC
 et --lang fr_FR.utf8 (sous GNU/Linux) ou --lang fr-FR (sous MS/Windows) qui permet de chaoisir la langue d’affichage,

je ne m’attarderais ici qu’aux différents rapports disponibles via l’option --output.

txt

Format par défaut, une simple liste des événements triés par date :

$ python -O icalreport.py -s 2013-11-01 -u 1 -l fr-FR sample.ics -t -o txt
sample.txt

rest

Format reStructuredText représentant les évenements regroupés par date :

$ python -O icalreport.py -s 2013-11-01 -u 1 -l fr-FR sample.ics -t -o rest
sample.rst

Puis grâce aux docutils, conversion en un format pour LibreOffice par exemple :

$ python rst2odt.py --generator --date --time sample.rst sample.odt
sample.odt

csv

Format prêt à être importé dans un tableur, les événements sont regroupés par semaine :

$ python -O icalreport.py -s 2013-11-01 -u 1 -l fr-FR sample.ics -t -o csv
sample.csv

html

Enfin, une présentation des évenements sur un calendrier par mois :

$ python -O icalreport.py -s 2013-11-01 -u 1 -l fr-FR sample.ics -t -o html
sample.html

Puis impression via un document au format PDF grâce à Firefox ou en passant par le format XPS sous Windows :

sample.pdf