Forum eedomus
http://forum.eedomus.fr/

Google Calendar en php
http://forum.eedomus.fr/viewtopic.php?f=15&t=2168
Page 1 sur 1
Auteur:  Manolo91 [ 18 Nov 2014 14:07 ]
Sujet du message:  Google Calendar en php

Hello,

pour ceux utilisant une interaction avec les calendriers Google en php, sachez que ça ne fonctionne plus depuis hier : certaines fonctions ayant été dépréciées...

https://developers.google.com/google-ap ... /reference

A la recherche d'une nouvelle solution : une class php attaquant l'API google V3
Auteur:  djo074 [ 18 Nov 2014 21:56 ]
Sujet du message:  Re: Google Calendar en php

Et bim :evil:
Un service google de plus en moins.
Je ne m'y connais pas en PHP mais en bidouillant un peu, il semble que ce soit cette partie dans googleAgenda.php qui soit concernée:

Code : Tout sélectionner
/**
     * DÈfinie l'agenda avec lequel on travail
     * @param string $sFeed url de l'agenda
     * @param bool $bFull permet d'avoir toutes les variables rempli sÈparÈment, sinon met adresse, date... dans description (default true)
     * @return void
     * @throws GoogleAgendaException si l'url n'est pas valide
     */
    public function __construct($sFeed, $bFull = true) {
        if ($bFull) {
            $sFeed = mb_strrchr($sFeed, 'basic', true) . 'full';
        }
 
        $sFeedContent = @file_get_contents($sFeed);
        if ($sFeedContent !== false && !empty($sFeedContent)) {
            $this->_sFeed = $sFeed;
        }
        else {
            throw new GoogleAgendaException('L\'url ['.$sFeed.'] n\'est pas valide.');
        }
    }



Mais en la mettant en commentaires, du coup le script marche mais on a plus les détails du calendrier.

Voilà la preuve que je ne m'y connais pas, donc si un guru passe par là... Ce serait super sympa. :-|
Auteur:  Tinto [ 19 Nov 2014 08:40 ]
Sujet du message:  Re: Google Calendar en php

Le service ne disparait pas, il est mis a jour ... ce qui est bien différent ;)
Auteur:  nicoco59 [ 19 Nov 2014 10:30 ]
Sujet du message:  Re: Google Calendar en php

Bonjour,

Je n'ai pas eu le temps de regarder tous les changements dans l'API mais pour le moment, vous avez 2 choses à faire :

1/ Mettre l'URL de votre agenda en https dans le fichier agenda.php.
La mienne était en http et maintenant l'URL de l'agenda Google est en https.

2/ Commenter les lignes suivantes danns le fichier : GoogleAgenda.php

Code : Tout sélectionner
        #if ($bFull) {
        #    $sFeed = mb_strrchr($sFeed, 'basic', true) . 'full';
        #    print $sFeed . "\n" ;
        #}



Et ca devrait remarcher ;)

Code : Tout sélectionner
# php agenda.php
<?xml version="1.0" encoding="utf8" ?><conges><aujourdhui>RAS</aujourdhui><demain>RAS</demain></conges>



Nicolas.
Auteur:  aurel [ 19 Nov 2014 10:58 ]
Sujet du message:  Re: Google Calendar en php

Hello,

bien vu nicoco59, ca fonctionne!

merci pour l'info ;)
Auteur:  Manolo91 [ 19 Nov 2014 20:50 ]
Sujet du message:  Re: Google Calendar en php

Je confirme aussi : nickel !!! ;)
Auteur:  neopate [ 20 Nov 2014 18:38 ]
Sujet du message:  Re: Google Calendar en php

+1 Je revis... Plus de prétexte, ma femme entend enfin les notifications Sonos pour sortir la bonne poubelle poubelles !!! :lol: :lol: :lol:
Merci grand oh grand Nicoco59 !!! :clap: :clap: :clap:
Auteur:  jacques [ 20 Nov 2014 18:56 ]
Sujet du message:  Re: Google Calendar en php

neopate a écrit: ma femme entend ... pour sortir la bonne poubelle !!! :lol: :lol: :lol:


De la domotique à l'ancienne, mais tellement efficace :lol: :lol: :lol: :lol:
Auteur:  ASECADOMOTIQUE54 [ 21 Nov 2014 15:01 ]
Sujet du message:  Re: Google Calendar en php

merci Nico59 pour le partage ;)
Auteur:  ninjuki [ 30 Nov 2014 14:58 ]
Sujet du message:  Re: Google Calendar en php

La version /full ne fonctionne plus depuis la nouvelle api v3 de google.

pour utiliser la version basic il faut préciser false sur le deuxième paramètre:

new GoogleAgenda("https://www.google.com/calendar/.../basic", false);

l'appel fonctionne de nouveau par contre la version basic permet uniquement de récupéré le titre de l’événement du coup on ne peux plus tester sur les dates de l'évenement.

Pour faire des tests sur l'heure , j'ai modifier l'appel pour requêter directement les event avec l'heure.
'startmin' => gmdate("Y-m-d\TH:i:s\Z", time()),
'startmax' => gmdate("Y-m-d\TH:i:s\Z", time() + (1 * 60 * 60) + 60), //Ajout de 1h + 1 minute

Après je récupère le premier résultat (température actuelle) et le dernier (pour la température de la prochaine heure)
Auteur:  ASECADOMOTIQUE54 [ 02 Déc 2014 20:00 ]
Sujet du message:  Re: Google Calendar en php

Petite question le script de cedric c'est quelle version? Celui qui peut gérer les phases de la journée. Parce que le script me renvoi toujours la valeur par défaut avec cette version!
Auteur:  aurel [ 02 Déc 2014 21:35 ]
Sujet du message:  Re: Google Calendar en php

De mémoire son script ne gère pas les phases de la journée
Auteur:  ASECADOMOTIQUE54 [ 03 Déc 2014 10:34 ]
Sujet du message:  Re: Google Calendar en php

Euh oui possible, j'ai un problème avec le script qui permet de renvoyer plusieurs valeurs dans une journée. A la fin de l'URL j'ai decode=0, couché,1, levé,2....etc dsl j'ai pas le script sous le coude. Toujours est il qu'il me renvoi la valeur par défaut en permanence.
Auteur:  ASECADOMOTIQUE54 [ 03 Déc 2014 15:41 ]
Sujet du message:  Re: Google Calendar en php

Voici le script en question, histoire d'etre un peu plus précis ... ;)

Code : Tout sélectionner
<?php
require_once 'GoogleAgenda.php';
require_once 'GoogleAgendaEvent.php';
require_once 'GoogleAgendaException.php';

// Recupere les variables passes en parametre de l'URL
$url_cal=$_GET['cal'];
$decode=$_GET['decode'];
$defaut=$_GET['defaut'];


// On remplit le tableau qui permet le decodage
$items = explode(",", $decode);
           
           for($n = 0, $m = count($items); $n < $m; $n=$n+2){
               $tableau_decode[$items[$n]] = $items[$n+1];
           }
           
             

// Lecture de l'agenda
try {
   $oAgendaConges = new GoogleAgenda("https://www.google.com/calendar/feeds/xxxxxxxxxxxxxxxxx%40group.calendar.google.com/private-xxxxxxxxxxxxxxxxxxx/basic", false);  // Compl?ter ici par l'url priv?e de l'agenda Google
 
   $aAujourdhui = $oAgendaConges->getEvents(array(
     'startmin' => date('Y-m-d'),
       'startmax' => date('Y-m-d',strtotime("+1 days")),
       'sortorder' => '',
       'orderby' => 'starttime',
       'maxresults' => '25',   // peut ?tre diminuer ? 10 = nombres de tache max par jour
       'startindex' => '1',
       'search' => '',
       'singleevents' => 'true',
       'futureevents' => 'false',
       'timezone' => 'Europe/Paris',
       'showdeleted' => 'false'
   ));
   
   
   
  //$aDemain = $oAgendaConges->getEvents(array(
   //  'startmin' => date('Y-m-d',strtotime("+24 hours")),
   //  'startmax' => date('Y-m-d',strtotime("+48 hours")),
   //  'sortorder' => 'ascending',
    // 'orderby' => 'starttime',
    // 'maxresults' => '1',
  //   'startindex' => '1',
   //  'search' => '',
   //  'singleevents' => 'true',
   //  'futureevents' => 'false',
   //  'timezone' => 'Europe/Paris',
   //  'showdeleted' => 'false'
  // ));
 
  echo '<?xml version="1.0" encoding="utf8" ?>';
echo '<calendrier>';
//echo 'R:' .array_values($oAujourdhui->getTitle()). 'Ok';

//   echo 'D:' .$aDemain->getTitle(). 'Ok';
// Lecture de l'agenda du jour
$i="0";
if ($aAujourdhui) {
  foreach ($aAujourdhui as $oAujourdhui) {
   //echo  '<action>'.$oAujourdhui->getTitle(). '</action> '.$oAujourdhui->getStartDate();
   //     echo  '<sdate>'.$oAujourdhui->getStartDate(). '</sdate> ';
   
   // renvoie le nombre de seconde avant ou apr?s le d?but de la planification
  $diff_date_deb= ( strtotime(date('Y-m-d H:i:s'))-strtotime($oAujourdhui->getStartDate()) );
  // renvoie le nombre de seconde qu'il reste avant le fin de la planification ( si <0 on l 'a d?pass?
  $diff_date_fin= (strtotime($oAujourdhui->getEndDate()) - strtotime(date('Y-m-d H:i:s')));
  // on regarde s'il y ? une tache qui correspond ? l'heure d'execution  -> (d?but rendez-vous)  < time now < (fin rendez-vous)
 // Si c'est le cas on la traite
  if (  ($diff_date_deb > 0 ) && ($diff_date_fin > 0 )){
       //echo 'diffo :' .($diff_date_deb ) . '_ ' ;
        // transforme l'intitule en code pour qu'il soit plus facilement utilisable sous la zibase
        //echo 'Ok':
        echo  '<action>'.$oAujourdhui->getTitle(). '</action> ';
        echo  '<sdate>'.$oAujourdhui->getStartDate(). '</sdate> ';
        $code = array_search(($oAujourdhui->getTitle()),$tableau_decode);
        if ( $code <> '' ) {
        echo '<aujourdhui>'.$code.'</aujourdhui> ';
         echo  '<edate>'.$oAujourdhui->getEndDate(). '</edate> ';
        // Flag qui indique qu'on traite la tache pour renvoyer le code trouv? ou 0 sinon
        $i="1";
        }
        }
   }
   // rien ? traiter ? l'heure actuelle
   if ( $i=="0") {
   echo '<aujourdhui>' . $defaut . '</aujourdhui>';

   }
} else {
echo '<aujourdhui>' . $defaut . '</aujourdhui>';
}


// Lecture de l'agenda de demain 
//if ($aDemain) { 
  //foreach ($aDemain as $oDemain) {
        // transforme l'intitule en code pour qu'il soit plus facilement utilisable sous la zibase
       //echo date('Y-m-d H:i:s');
      // if ( (strtotime($oDemain->getStartDate()) - strtotime(date('Y-m-d H:i:s'))) > 600 ){
       //echo 'diffd :' .(strtotime($oDemain->getStartDate()) - strtotime(date('Y-m-d H:i:s'))) . '_ ' ;
        // echo  '<date>'.$oDemain->getStartDate(). '</date>';
        //echo '<demain>'. array_search(($oDemain->getTitle()),$tableau_decode) . '</demain>';
       // }
  // }
//} else {
//    echo '<demain>' . $defaut . '</demain>';
//}   
echo '</calendrier>';
}



catch (GoogleAgendaException $e) {
   echo $e->getMessage();
}


Pour extraire la valeur en cours dans mon agenda dans mon cas le moment de la journée j'ai cette url
http://xxxxxxx/script/momentdelajournee ... e&defaut=4
xpath
//aujourdhui

le problème c'est qu'il me renvoi systématiquement 4 donc couché qui est la valeur par défaut quand l'agenda est vide ce qui n'est pas le cas pour moi!
Une idée?
Page 1 sur 1 Le fuseau horaire est UTC+1 heure