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)
$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);
}
Voilà. Ce script pourrait être amélioré, avec la gestion des autres répétitions, MONTHLY etc…

