Articles Taggés ‘Google’

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

26 mars 2010

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

[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...