Si vous avez un compte Google Agenda et que vous souhaitez, que votre lapin vous rappelle les évènements du jour, voici un petit script pour vous.
A noter, que ce script sera bientôt disponible sur le site de zcripts.com pour que vous puissiez l’utiliser sans rien programmer, ni rien héberger 😉
Pour trouver l’adresse de votre fichier ical Google Calendar allez dans paramètres (en haut à droite) -> onglet Agendas -> cliquez sur le nom de l’agenda et descendez jusqu’à Adresse URL privée et cliquez enfin sur le bouton ical (vert)

ical_google_agenda
[cc lang=’php’ width=’100%’ lines=’40’]
$serial = « ********* »; // serial de votre lapin
$token = « ********* »; // token de votre lapin
// chemin privé de votre fichier ical privé de Google Agenda
$path = « *********** »;
// une partie de l’adresse est en dur pour éviter l’exécution d’un
// script distant
$fichier = « http://www.google.com/calendar/ical ». $path . »basic.ics »;
$source = file_get_contents($fichier); // on ouvre le fichier
$source = preg_split(‘#\n(?!s)#’, $source);
$source = array_map(‘trim’, $source);
$tabEve = array(); // tableau des évenements
$cles = array(); // tableau des clés des évenements
$i = 0;
// Boucle qui parcours le fichier à la recherche des événements
// le but est de dire que de l’index début à l’index fin on a un événement
foreach($source as $k=>$eve){
// on récupère la zone pour gérer le décalage horaire
if (eregi(‘X-WR-TIMEZONE’,$eve)) {
$ex = explode(« : »,$eve);
$zone = $ex[1];
}
if ($eve == ‘BEGIN:VEVENT’) {
$cles[$i][‘debut’] = $k;
}
if ($eve == ‘END:VEVENT’) {
$cles[$i][‘fin’] = $k;
$i++;
}
}
$e = 0;
// boucle qui va rechercher les évènements que l’on a délimité plus haut, et enfin on garde seulement les
// éléments nécessaires pour le lapin
foreach($cles as $c){
for($eve=$c[‘debut’]; $eve< =$c['fin'];$eve++){
$ex = explode(":",$source[$eve]);
if(!isset($eves[$e][$ex[0]])){
if(eregi("SUMMARY",$ex[0]) || eregi("RRULE",$ex[0])){
$eves[$e][$ex[0]] = utf8_decode($ex[1]); // repetitions
}
if(eregi("DTSTART",$ex[0])){
$eves[$e]['SMOIS'] = substr($ex[1],4,2);
$eves[$e]['SJOUR'] = substr($ex[1],6,2);
$eves[$e]['SANNEE'] = substr($ex[1],0,4);
$eves[$e]['DTSTART'] = substr($ex[1],0,4).substr($ex[1],4,2).substr($ex[1],6,2); // jour début
if(strlen($ex[1])>8){
$d = date(‘Y-m-d H:i’,mktime(substr($ex[1],9,2), substr($ex[1],11,2),0, substr($ex[1],4,2), substr($ex[1],6,2), substr($ex[1],0,4)));
$date = new DateTime($d,new DateTimeZone($zone));
$new_date = strtotime($d)+$date->getOffset(); // calcul décalage horaire
$eves[$e][‘HEURE’] = date(‘H:i’,$new_date);
}else{
$eves[$e][‘HEURE’] = « »;
}
}
if(eregi(« DTEND »,$ex[0])){
$eves[$e][‘EMOIS’] = substr($ex[1],4,2);
$eves[$e][‘EJOUR’] = substr($ex[1],6,2);
$eves[$e][‘EANNEE’] = substr($ex[1],0,4);
$eves[$e][‘DTEND’] = substr($ex[1],0,4).substr($ex[1],4,2).substr($ex[1],6,2); // jour fin
}
}
}
$e++;
}
// Aujourd’hui
$jour = date(« d »); // jour
$mois = date(« m »); // mois
$annee = date(« Y »); // annee
$aujourdhui = date(« Ymd »); // date du jour
// création du tableau final qui récupère les évènements du jour (aussi ceux qui in une fréquence annuelle pour les anniversaires par exemple)
if(count($eves)>0){
foreach($eves as $eve){
if(empty($eve[‘HEURE’])){$eve[‘HEURE’] = » « ;}else{$eve[‘HEURE’] = » à » . $eve[‘HEURE’];}
if($aujourdhui>=$eve[‘DTSTART’] && $aujourdhui< =$eve['DTEND']){
$tabEve[] = $eve['SUMMARY']. $eve['HEURE'];
}else{
if(eregi("FREQ=YEARLY",$eve['RRULE'])){
$d = $annee.substr($eve['DTSTART'],4,4);
if($aujourdhui>=$d && $aujourdhui<=$d){
$tabEve[] = $eve['SUMMARY']. $eve['HEURE'];
}
}
}
}
}
// Maintenant que nous avons le tableau tabEve des évènements du jour, on peut créer le texte du lapin
$phrase = "évènements du jour : ";
foreach($tabEve as $evefin){
$phrase .= $evefin. " . ";
}
if(empty($phrase)){
$phrase = "Rien aujourd'hui";
}
// envoi au lapin !
$curl = curl_init();
$api_url = "http://api.nabaztag.com/vl/FR/api.jsp?&sn=$serial&token=$token&voice=$voice&tts=".urlencode(utf8_encode($phrase));
curl_setopt($curl,CURLOPT_HEADER,$api_url);
curl_exec($curl);
curl_close($curl);
}
[/cc]
Voilà. Ce script pourrait être amélioré, avec la gestion des autres répétitions, MONTHLY etc...