Export iCal pour mini agenda sous SPIP

Permet d’exporter le mini-agenda SPIP sous forme iCalendar ou vCalendar pour le récupérer sous Mac iCal ou Mozilla Calendar

Préambule

J’ai décidé de faire un export « iCalendar » (anciennement « vCalendar ») de mon agenda simple pour SPIP.

Introduction

« iCalendar » est un format d’échange d’agenda, et permet de transférer des rendez-vous.

C’est à l’origine un format d’import/export de rendez-vous créé par un consortium Apple/AT&T/IBM/Siemens et principalement utilisé par une application sous Mac (iCal).

L’idée de réutiliser ce format d’échange a été adopté par quelques logiciels de calendrier comme Mozilla.

Pré-requis

Le seul pré-requis est d’avoir installé la contribution « Mini agenda ultra simple », et évidemment, de l’utiliser.

Cette contribution va vous permettre de faire une exportation de votre mini agenda au format iCalendar afin de le récupérer dans votre logiciel d’agenda favori.

Ajouter un filtre

Vous allez devoir ajouter un filtre dans votre fichier mes_fonctions.php3 comme suivant :

/*****************************************************************************/
/**  Cette fonction permet de générer une date iCal au format Ymd
/**
/**  Auteur  : F. Quointeau
/**  Version : 0.0.1
/**  Date    : 9 Juin 2004
/*****************************************************************************/
function date_ical_courte($date_heure, $jours = 0) {
  return date("Ymd", mktime(0,0,0,mois($date_heure),jour($date_heure)+$jours,annee($date_heure)));
}

Ce filtre va être utilisé pour générer une date compatible avec le format d’export des données.

Le fichier agenda-ical.php3 :

Créez un fichier agenda-ical.php3 contenant le code php suivant :

J’ai donné un délai de 24 * 3600 ce qui donne une mise en cache d’une journée. Le fichier sera généré une fois par jour.

Par rapport à un fichier .php3 SPIP habituel, vous retrouvez en plus la ligne

@header ("content-type:text/calendar");

qui permet de spécifier que vous ne renvoyez pas une page HTML, mais un fichier de type « calendar ».

<?php

$fond = "agenda-ical";
$delais = 24 * 3600;

@header ("content-type:text/calendar");

$flag_preserver=true;
include ("inc-public.php3");


?>

Le fichier agenda-ical.html :

Voici le source du squelette proprement dit :

BEGIN:VCALENDAR
CALSCALE:GREGORIAN
X-WR-CALNAME;VALUE=TEXT:[(#NOM_SITE_SPIP|filtrer_ical)]
X-WR-RELCALID;VALUE=TEXT:[(#URL_SITE_SPIP|filtrer_ical)]
VERSION:2.0

<BOUCLE_articles(ARTICLES) {tout} {par date_redac} {age_redac <= 0}>
BEGIN:VEVENT
SUMMARY:[(#TITRE|filtrer_ical)]
UID:article#ID_ARTICLE @ [(#URL_SITE_SPIP|filtrer_ical)]
DTSTAMP:[(#DATE_REDAC|date_ical)]
DTSTART;VALUE=DATE:[(#DATE_REDAC|date_ical_courte)]
DTEND;VALUE=DATE:[(#DATE_REDAC|date_ical_courte{1})]
LOCATION:[(#SOUSTITRE|filtrer_ical)] [ - Organisateur: (#SURTITRE|filtrer_ical)]
DESCRIPTION:[(#DESCRIPTIF|filtrer_ical)]
URL:#URL_SITE_SPIP/#URL_ARTICLE
STATUS:CONFIRMED
END:VEVENT
</BOUCLE_articles>

END:VCALENDAR

Convention pour l’écriture des articles

Autant sur votre site SPIP vous pouvez gérer les données de l’article à votre convenance, j’ai pour ma part utilisé un certain nombre de conventions :

-  Le sous-titre de l’article correspond au lieu de l’événement
-  Le sur-titre de l’article correspond à l’organisateur de l’événement

Résultat :

Voici ce que donne la récupération d’un événement avec Mozilla Calendar :

Un événement sous Mozilla Calendar

Pour information...

Un événement est noté pour une journée complète, puisque SPIP ne gère pas d’heure dans la date de publication.

L’échange de calendrier a été testé avec succès sur
-  Apple iCal (sur un Mac OS X 10.3)
-  Mozilla Calendar (suite Mozilla 1.6 sous Windoze XP)

Voici un exemple de synchronisation iCal :
http://www.ncrambouillet.info/spip/agenda-ical.php3

Cette url n’a évidemment pas d’autre intérêt que celui de tester le résultat !

Si vous avez un logiciel compatible iCalendar ou vCalendar qui n’accepte pas le format du fichier, faites le moi savoir, je regarderai ce qui cloche ! Merci.

Discussion

2 discussions

  • 1

    Testé avec Evolution : OK

    Répondre à ce message

  • 1

    Dans ma rubrique Agenda de mon site, je publie des articles où l’heure est présente dans le DESCRIPTIF, au format « 20h00 »

    J’ai donc ajouté $ mes-fonctions.php3 :

    function heure_ical_pre($texte) $texte = substr ($texte, 0, 2) ; return $texte ;
    
    function heure_ical_post($texte) $texte = substr ($texte, -2)) ; return $texte ;

    et dans agenda-html

    DTSTART ;VALUE=DATE-TIME:[(#DATE_REDAC|date_ical_courte)]
    T[(#DESCRIPTIF|heure_ical_pre)][(#DESCRIPTIF|heure_ical_post)]00;

    Je suis un absolu newbie en prog, mais je me débrouille. La syntaxe parraît correcte. En tout cas, ça marche avec iCal 1.5.5

    J’ai trouvé de la doc si vous souhaiter approfondir : http://xml.resource.org/public/rfc/html/rfc2445.html

    Dans la même veine, on peux ajouter une durée de l’événement dans un autre champ, ou alors par mot-clé. Il y a plein de possibilités.

    Evidemment, il faut que les rédacteurs soient disciplinés... :-)

    cordialement, Alex
    L’ agenda en question

    • GoUaRfIg !

      Hum. C’est une très bonne idée pour enrichir mon mini-agenda et en faire un vrai calendrier !

      Merci

    Répondre à ce message

Ajouter un commentaire

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom

Dernière modification de cette page le 21 janvier 2007