Les évènements Google Agenda dictés par votre Nabaztag (anniversaires, rdv etc…)

Laisser une réponse »

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

ical_google_agenda

$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);

}

Voilà. Ce script pourrait être amélioré, avec la gestion des autres répétitions, MONTHLY etc…



ShareThis

Publicité

4 commentaires

  1. jb dit :

    Merci pr ton script, néanmoins j’ai une erreur:
    PHP Notice: Undefined index: RRULE in /hometest.php on line 95

    merci

  2. blog.yann dit :

    Salut Jb,
    as-tu mis les simples quotes autour de RRULE dans $eve['RRULE'] ?

    A+ Yann

  3. jb dit :

    Slt,

    Pareil même erreur avec simple ou double quotes

Laisser un commentaire