Mes calendriers ICS mis à jour dans Owncloud

Les fichiers ICS sont des fichiers comportant des événements générés par des outils types calendriers et agendas en ligne (Google Agenda par exemple, mais aussi pleins d'autres).

À la base, Owncloud permet d'importer les évènements d'un fichier ICS dans votre calendrier.

  1. J'exporte mon calendrier à partir de mon outil en tant que fichier ICS
  2. Je copie le fichier ICS dans Owncloud (partie fichiers)
  3. Je vais sur les fichiers Owncloud avec mon navigateur, trouve le fichier ICS, et clique dessus
  4. Il m'est proposé d'importer les événements dans l'un de mes calendriers existants
firefox_2016-02-01_09-33-52
Import des évènements dans Owncloud

Le problème de cette méthode, c'est qui si le calendrier original change (un calendrier partagé en ligne sur Google Agenda, par exemple, ou votre emploi du temps généré par votre établissement scolaire), votre calendrier dans Owncloud ne verra pas ces modifications. Il restera dans l'état du jour de l'import... Pas cool.

Généralement, les outils proposent de « lier » votre calendrier à un fichier ICS, mais pas Owncloud...

Heureusement, il existe un petit script qui permet d'importer automatiquement un fichier ICS en ligne de commande, et donc de planifier la mise à jour de votre copie sur votre serveur Owncloud (toutes les nuits par exemple).

Attention, c'est à sens unique et définitif : le calendrier de votre Owncloud sera à chaque fois totalement vidé et remplacé par le contenu du fichier ICS, même si vous aviez fait des modifications... Et des modifications faites dans votre calendrier Owncloud ne seront pas répercutées sur le serveur distant.

Cet outil se trouve ici : https://github.com/georgehrke/cl-calendarimport avec les explications d'utilisation.

Utilisation

D'abord, il faut récupérer le script, puis l'adapter le script php à votre installation Owncloud.

wget https://github.com/georgehrke/cl-calendarimport/archive/master.zip
unzip master.zip
mv cl-calendarimport/automatedimport.php /home/eric/scripts/
nano /home/eric/scripts/automatedimport.php

Dans le script, il faut compléter la variable OCROOT et indiquer où est situé Owncloud sur votre serveur.

define('OCROOT', '/var/www/owncloud');

Puis vous quittez (CTRL+X en enregistrant).

Il va falloir maintenant créer un calendrier qui sera destiné à être rempli par ce script. Pour ce faire, un tour sur votre Owncloud / Calendrier, puis créer un calendrier au nom que vous voulez (vous pouvez en créer plusieurs au passage).

Ensuite, en utilisant par exemple PhpMyAdmin, Adminer ou équivalent, il faut analyser la base de données pour trouver l'identifiant de l'utilisateur et du calendrier.

  • id du propriétaire du calendrier : dans la base « owncloud », trouver la table « oc_users » et notez le « uid » de l'utilisateur concerné
  • id du calendrier : dans la base « owncloud », trouver la table « oc_clndr_calendars » et notez le « id » du calendrier concerné

Enfin, lancer la commande pour tester :

sudo -u <utilisateur du serveur web> php <chemin du script php> <lien vers le fichier ics> <id du propriétaire du calendrier> <id du calendrier> <fuseau horaire du calendrier>

Soit, dans mon cas (sous Ubuntu 14.04) :

  • <utilisateur du serveur web> = www-data
  • <chemin du script php> = /home/eric/scripts/automatedimport.php
  • <lien vers le fichier ics> = https://www.google.com/calendar/ical/eric%40gmail.com/private-sdfc8sfsdf3qsdfsdfsqdfsdff/basic.ics
  • <id du propriétaire du calendrier> = ericb
  • <id du calendrier> = 7
  • <fuseau horaire du calendrier> = Europe/Paris

D'où la commande complète :

sudo -u www-data php "/home/eric/scripts/automatedimport.php" "https://www.google.com/calendar/ical/eric%40gmail.com/private-sdfc8sfsdf3qsdfsdfsqdfsdff/basic.ics" ericb 7 Europe/Paris

Pour la liste des fuseaux horaires : http://www.php.net/manual/fr/timezones.php

Ça fonctionne ? Alors passons à l'étape suivante.

Automatisation

J'utilise le cron qui effectue régulièrement les taches sur le serveur. Je pourrais lancer directement l'import avec le cron, mais comme j'ai plusieurs calendriers à gérer, je préfère passer par un script qui effectue les imports un par un (moins de lignes dans mon cron, et gestion des calendriers dans le script). En fait, j'ai même créé deux scripts que j'appelle à des fréquences différentes :

  • un fichier lancé toutes les 2 heures (calendriers qui changent souvent)
  • un fichier lancé toutes les nuits (calendriers mis à jour pas très souvent et de grande taille)

Le fichier import_ics.sh

Ce script comporte les commandes à exécuter.

Créer le fichier

nano /home/eric/scripts/import_ics.sh

Y adapter votre code

#!/bin/bash
# Import Google
sudo -u www-data php "/home/eric/scripts/automatedimport.php" "https://www.google.com/calendar/ical/eric%40gmail.com/private-sdfc8sfsdf3qsdfsdfsqdfsdff/basic.ics" ericb 7 Europe/Paris

L'enregistrer puis sortir.

Rendre le fichier exécutable

chmod ugo+x /home/eric/scripts/import_ics.sh

Le cron

Le cron va automatiser le lancement du script régulièrement.

Éditer le cron

crontab -e

Y rajouter la ligne correspondant à l'exécution du script toutes les 2 heures.

* */2 * * * sh /home/eric/scripts/import_ics.sh

Et voilà, y'a plus qu'à laisser faire...

2 réflexions sur « Mes calendriers ICS mis à jour dans Owncloud »

  1. Bonjour,

    J’utilisais ce script il y a un moment mais depuis le passage à la dernière version du DSM sur mon NAS Synology, il ne semble plus fonctionner et je suis retourné à l’ancienne méthode manuelle.

    Auriez-vous une idée pour mettre à jour automatique le calendrier Owncloud sur la base d’un fichier .ics stocké sur le NAS et mis à jour régulièrement ?

    Merci d’avance.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.