Ankündigung

Einklappen
Keine Ankündigung bisher.

Google Calendar - update für "neue" GoogleAPI

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • ide71
    antwortet
    Zitat von JensKindgen Beitrag anzeigen
    Könntest du mir die Richtigen PHPs mal zu Verfügung stellen? Es funktioniert ja aber er zeigt halt bei mir immer noch die gleichen Daten an. Du hast doch deine alten Kalendereinträge weiter verwendet oder?
    Sorry, dass die Antwort ein paar Tage gedauert hat.

    Ja, ich habe die alten Einträge weiter verwendet. Anbei meine PHP-Files (natürlich ohne meine Ids/Schlüssel).

    Gruß
    Markus
    Angehängte Dateien

    Einen Kommentar schreiben:


  • JensKindgen
    antwortet
    Zitat von ide71 Beitrag anzeigen
    Hallo zusammen.

    Bin jetzt leider doch erst heute dazugekommen, das bei mir einzubauen. Hat wunderbar funktioniert, wenn man den ganzen Thread exakt durchliest und die ganzen ergänzenden Hinweise beachtet!

    Vielen Dank für die Umsetzung!

    Carsten, vielleicht machst Du Dir ja mal noch die Arbeit, und passt den ersten Beitrag so an, dass da gleich alles passt. Ich denke, hauptsächlich müsste google_2.php (da sind immer noch Semikolons drin) und googleV3.php im Zip-File aktualisiert und die Anleitung um nen Hinweis zur Calender-ID ergänzt werden.

    Viele Grüße
    Markus
    Könntest du mir die Richtigen PHPs mal zu Verfügung stellen? Es funktioniert ja aber er zeigt halt bei mir immer noch die gleichen Daten an. Du hast doch deine alten Kalendereinträge weiter verwendet oder?

    Einen Kommentar schreiben:


  • CarGo
    antwortet
    Hallo zusammen,

    Danke an alle für das ausgiebige testen und erweitern !!
    Dummblöderweise lässt sich aber der ersten Beitrag nicht (mehr) ändern...
    Vielleicht kann hier ein Mod helfen ??

    Wie auch immer, ich fasse das die Tage nochmal zusammen und hänge das hier konsolidiert dran...

    Viele Grüße - Carsten

    Einen Kommentar schreiben:


  • ide71
    antwortet
    Hallo zusammen.

    Bin jetzt leider doch erst heute dazugekommen, das bei mir einzubauen. Hat wunderbar funktioniert, wenn man den ganzen Thread exakt durchliest und die ganzen ergänzenden Hinweise beachtet!

    Vielen Dank für die Umsetzung!

    Carsten, vielleicht machst Du Dir ja mal noch die Arbeit, und passt den ersten Beitrag so an, dass da gleich alles passt. Ich denke, hauptsächlich müsste google_2.php (da sind immer noch Semikolons drin) und googleV3.php im Zip-File aktualisiert und die Anleitung um nen Hinweis zur Calender-ID ergänzt werden.

    Viele Grüße
    Markus

    Einen Kommentar schreiben:


  • JensKindgen
    antwortet
    Zitat von Chefkoch81 Beitrag anzeigen
    Hi,

    In der folgenden Variante ist das Problem mit den ganztägigen Terminen gelöst und auch die Event Farben werden verwendet, sofern angegeben. Vorrang haben aber die Farben in der Beschreibung des Termins.

    Viel Spaß damit und danke für die APIV3 Umsetzung.

    lg,
    Andreas

    PHP-Code:
    <?php 
    /** 
     * ----------------------------------------------------------------------------- 
     * @package     smartVISU 
     * @author      Martin Gleiß, updated by Carsten Gotschlich got google API V3 
     * @copyright   2012 
     * @license     GPL [http://www.gnu.de] 
     * ----------------------------------------------------------------------------- 
     */ 

     // https://knx-user-forum.de/smartvisu/39374-google-calendar-update-fuer-neue-googleapi.html

    require_once '../../../lib/includes.php'
    require_once 
    const_path_system.'calendar/calendar.php'

    /** 
     * This class reads a google calenda 
     */  
    class calendar_google extends calendar 


        
    /** 
         * initialization of some parameters 
         */ 
        
    public function init($request
        { 
            
    parent::init($request); 
        } 

        
    /** 
         * Check if the cache-file exists 
         */ 
        
    public function run() 
        { 
            
    //--------------------------------------------------------------------- 
            // let's define some parameters - they need to be fetched manually 
            //--------------------------------------------------------------------- 
            
    $client_id      =   '';  // put your clientID here - from Google website
            
    $client_secret  =   '';  // put your client Secret here - from Google WebSite
            
    $redirect_uri   =   '';     // put you redirect URI here from Google Website - only first line !

            
    $refresh_token  =   '';  // Put your google refresh token here - from other PHP script
            
    $calendar_id ''// get it this way: http://googleappstroubleshootinghelp.blogspot.de/2012/09/how-to-find-calendar-id-of-google.html 
            //--------------------------------------------------------------------- 
            // get access token first  
            
    $token_url 'https://accounts.google.com/o/oauth2/token'
            
    $post_data = array( 
                            
    'client_secret' =>   $client_secret
                            
    'grant_type'    =>   'refresh_token'
                            
    'refresh_token' =>   $refresh_token
                            
    'client_id'     =>   $client_id 
                            
    ); 
            
    $ch curl_init(); 

            
    curl_setopt($chCURLOPT_URL$token_url); 
            
    curl_setopt($chCURLOPT_POST1); 
            
    curl_setopt($chCURLOPT_POSTFIELDS$post_data); 
            
    curl_setopt($chCURLOPT_RETURNTRANSFERtrue); 

            
    $result curl_exec($ch); 
            
    $token_object json_decode($result); 
            
    $access_token $token_object->access_token

            
    //--------------------------------------------------------------------- 
            // so now we have an access-token, let's use it to access the calendar 
            
    $context stream_context_create(array('http' => array('method' => "GET"'header' => "Authorization: OAuth " $access_token)));
            
    $resturl 'https://www.googleapis.com/calendar/v3/colors';
            
    $content = @file_get_contents($resturlfalse$context);
            
    $colors = array();
            if (
    $content !== false
            { 
                
    $result json_decode($content,true);
                
    $colors $result["event"];
    //            var_dump($colors); 
            
    }
            
    $resturl 'https://www.googleapis.com/calendar/v3/calendars/'$calendar_id '/events?maxResults=10&singleEvents=true&orderBy=startTime&timeMin='.urlencode(date('c')); 
            
    $content = @file_get_contents($resturlfalse$context); 
            
    $this->debug($content); 

            if (
    $content !== false
            { 
                
    $result json_decode($content,true); 

                
    $i 1

                foreach (
    $result["items"] as $entry
                { 
                    
    $startstamp = (string)($entry["start"]["dateTime"]); 
                    
    $endstamp = (string)($entry["end"]["dateTime"]);
                    if (
    $startstamp == '')
                        
    $startstamp = (string)($entry["start"]["date"]);
                    if (
    $endstamp == '')
                        
    $endstamp = (string)($entry["end"]["date"]);
                    
    $startstamp strtotime($startstamp) + date("Z"$startstamp); 
                    
    $endstamp strtotime($endstamp) + date("Z"$endstamp);
                    
                    
    $color '';
                    if (((string)(
    $entry["colorId"]))!='')
                        
    $color=$colors[(string)($entry["colorId"])]["background"];

                    
    $this->data[] = array('pos' => $i++, 
                        
    'start' => date('y-m-d'$startstamp).' '.gmdate('H:i:s'$startstamp), 
                        
    'end' => date('y-m-d'$endstamp).' '.gmdate('H:i:s'$endstamp), 
                        
    'title' => (string)($entry["summary"]), 
                        
    'content' => (string)($entry["description"]), 
                        
    'where' => (string)($entry["location"]), 
                        
    'color' => $color
                        
    'link' => (string)($entry["htmlLink"])
                    ); 
                } 
     
            } 
            else 
                
    $this->error('Calendar: Google''Calendar read request failed!');
        } 



    // ----------------------------------------------------------------------------- 
    // call the service 
    // ---------------------------------------------------------------------------- 

    $service = new calendar_google(array_merge($_GET$_POST)); 
    echo 
    $service->json(); 

    ?>
    ich habe jetzt durch alte googleV3.php durch den oibigen Code ersetzt und die Page refresht. Leider steht da immer noch das falsche Datum drin. Muss ich noch irgendwas tun, das ich ggf übersehen habe?

    Danke und Gruss Jens

    Einen Kommentar schreiben:


  • Grembold
    antwortet
    Vielen Dank

    Vielen Dank Carsten für die Aktualisierung auf Google APIv3.

    Bei mir hat das gut geklappt, inkl. der Müll Icons.

    Bitte halte das Zip im ersten Post aktuell, damit man nichr alle Posts lesen muss.

    Gruß
    Grembold

    Einen Kommentar schreiben:


  • Tom Bombadil
    antwortet
    Yup, war eigentlich damals in diesem Thread schon klar (#17). Das iCal-Format ist von der Umstellung der Google-API nicht betroffen.

    Werde mich demnächst mal hinsetzen und meinen sowieso angepassten Müllkalender nach ical portieren. Vermutlich wird das regelmäßige automatische Pollen der Datei vom Google-Server das kniffligste daran sein. Oder halt online parsen - muss ich mir erst mal ansehen ...

    /tom

    Einen Kommentar schreiben:


  • TCr82
    antwortet
    Verstehe ehrlich gesagt nicht wieso man das ganze per API anbinden muss.
    Ein einfacher Ical Interpreter hätte es doch auch getan (fertige Klassen gibt es sicher), einfach dort die private ical Kalender Adresse rein füttern und fertig..

    Einen Kommentar schreiben:


  • LuKa
    antwortet
    Um die Anzahl der Termine einzuschränken habe ich folgende Änderungen eingearbeitet.
    PHP-Code:
    class calendar_google extends calendar  
    {  
        var 
    $maxResults;

        
    /**  
         * initialization of some parameters  
         */  
        
    public function init($request)  
        {  
            
    parent::init($request); 
            
    $this->maxResults $request['count']; 
        }  
    ... 
    und folgende Zeile angepasst.
    PHP-Code:
    $resturl 'https://www.googleapis.com/calendar/v3/calendars/'$calendar_id '/events?maxResults='$this->maxResults .'&singleEvents=true&orderBy=startTime&timeMin='.urlencode(date('c')); 

    Einen Kommentar schreiben:


  • LuKa
    antwortet
    ich habe da einfach
    PHP-Code:
    $calendar_id 'primary'
    gesetzt.

    Einen Kommentar schreiben:


  • chrisi
    antwortet
    @cargo: Vielleicht habe ich ja was überlesen, aber ich habe nicht gesehen das es gelöst wäre.

    @Chefkoch81:
    Danke, mit diesem Code ist das ganztägige Termin Anzeigeproblem behoben.

    @All: Beachtet das es was neues zum Ausfüllen gibt:

    Code:
            $calendar_id = ''; // get it this way: http://googleappstroubleshootinghelp.blogspot.de/2012/09/how-to-find-calendar-id-of-google.htm
    l
    Die calendar_id ist übrigen in meinem Fall die gmail Adresse (so wie bei den meisten wahrscheinlich).


    Ganztägige Einträge schauen jetzt z.B. wie folgt aus:
    Freitag, 16.01.15 00:00 - 17.01.15 00:00

    Schöner wäre natürlich nur "Freitag, 16.01.15", aber ist bin schon mal zufrieden damit.

    Einen Kommentar schreiben:


  • Chefkoch81
    antwortet
    Hi,

    In der folgenden Variante ist das Problem mit den ganztägigen Terminen gelöst und auch die Event Farben werden verwendet, sofern angegeben. Vorrang haben aber die Farben in der Beschreibung des Termins.

    Viel Spaß damit und danke für die APIV3 Umsetzung.

    lg,
    Andreas

    PHP-Code:
    <?php 
    /** 
     * ----------------------------------------------------------------------------- 
     * @package     smartVISU 
     * @author      Martin Gleiß, updated by Carsten Gotschlich got google API V3 
     * @copyright   2012 
     * @license     GPL [http://www.gnu.de] 
     * ----------------------------------------------------------------------------- 
     */ 

     // https://knx-user-forum.de/smartvisu/39374-google-calendar-update-fuer-neue-googleapi.html

    require_once '../../../lib/includes.php'
    require_once 
    const_path_system.'calendar/calendar.php'

    /** 
     * This class reads a google calenda 
     */  
    class calendar_google extends calendar 


        
    /** 
         * initialization of some parameters 
         */ 
        
    public function init($request
        { 
            
    parent::init($request); 
        } 

        
    /** 
         * Check if the cache-file exists 
         */ 
        
    public function run() 
        { 
            
    //--------------------------------------------------------------------- 
            // let's define some parameters - they need to be fetched manually 
            //--------------------------------------------------------------------- 
            
    $client_id      =   '';  // put your clientID here - from Google website
            
    $client_secret  =   '';  // put your client Secret here - from Google WebSite
            
    $redirect_uri   =   '';     // put you redirect URI here from Google Website - only first line !

            
    $refresh_token  =   '';  // Put your google refresh token here - from other PHP script
            
    $calendar_id ''// get it this way: http://googleappstroubleshootinghelp.blogspot.de/2012/09/how-to-find-calendar-id-of-google.html 
            //--------------------------------------------------------------------- 
            // get access token first  
            
    $token_url 'https://accounts.google.com/o/oauth2/token'
            
    $post_data = array( 
                            
    'client_secret' =>   $client_secret
                            
    'grant_type'    =>   'refresh_token'
                            
    'refresh_token' =>   $refresh_token
                            
    'client_id'     =>   $client_id 
                            
    ); 
            
    $ch curl_init(); 

            
    curl_setopt($chCURLOPT_URL$token_url); 
            
    curl_setopt($chCURLOPT_POST1); 
            
    curl_setopt($chCURLOPT_POSTFIELDS$post_data); 
            
    curl_setopt($chCURLOPT_RETURNTRANSFERtrue); 

            
    $result curl_exec($ch); 
            
    $token_object json_decode($result); 
            
    $access_token $token_object->access_token

            
    //--------------------------------------------------------------------- 
            // so now we have an access-token, let's use it to access the calendar 
            
    $context stream_context_create(array('http' => array('method' => "GET"'header' => "Authorization: OAuth " $access_token)));
            
    $resturl 'https://www.googleapis.com/calendar/v3/colors';
            
    $content = @file_get_contents($resturlfalse$context);
            
    $colors = array();
            if (
    $content !== false
            { 
                
    $result json_decode($content,true);
                
    $colors $result["event"];
    //            var_dump($colors); 
            
    }
            
    $resturl 'https://www.googleapis.com/calendar/v3/calendars/'$calendar_id '/events?maxResults=10&singleEvents=true&orderBy=startTime&timeMin='.urlencode(date('c')); 
            
    $content = @file_get_contents($resturlfalse$context); 
            
    $this->debug($content); 

            if (
    $content !== false
            { 
                
    $result json_decode($content,true); 

                
    $i 1

                foreach (
    $result["items"] as $entry
                { 
                    
    $startstamp = (string)($entry["start"]["dateTime"]); 
                    
    $endstamp = (string)($entry["end"]["dateTime"]);
                    if (
    $startstamp == '')
                        
    $startstamp = (string)($entry["start"]["date"]);
                    if (
    $endstamp == '')
                        
    $endstamp = (string)($entry["end"]["date"]);
                    
    $startstamp strtotime($startstamp) + date("Z"$startstamp); 
                    
    $endstamp strtotime($endstamp) + date("Z"$endstamp);
                    
                    
    $color '';
                    if (((string)(
    $entry["colorId"]))!='')
                        
    $color=$colors[(string)($entry["colorId"])]["background"];

                    
    $this->data[] = array('pos' => $i++, 
                        
    'start' => date('y-m-d'$startstamp).' '.gmdate('H:i:s'$startstamp), 
                        
    'end' => date('y-m-d'$endstamp).' '.gmdate('H:i:s'$endstamp), 
                        
    'title' => (string)($entry["summary"]), 
                        
    'content' => (string)($entry["description"]), 
                        
    'where' => (string)($entry["location"]), 
                        
    'color' => $color
                        
    'link' => (string)($entry["htmlLink"])
                    ); 
                } 
     
            } 
            else 
                
    $this->error('Calendar: Google''Calendar read request failed!');
        } 



    // ----------------------------------------------------------------------------- 
    // call the service 
    // ---------------------------------------------------------------------------- 

    $service = new calendar_google(array_merge($_GET$_POST)); 
    echo 
    $service->json(); 

    ?>

    Einen Kommentar schreiben:


  • CarGo
    antwortet
    Hallo chrisi,

    ak, ok - ich dachte, das wäre mittlerweile gelöst...
    Kannst du mal das google_v3.php manuell ausführen ?

    Code:
    cd /var/www/smartvisu/calendar/service
    php -q google_v3.php
    und das Ergebnis posten ?
    Dann lässt sich vielleicht analysieren, wo das Problem liegt...

    (alternativ kannst du mir das Ergebnis auch ausnahmensweise per PM schicken, sind ja ggf. persönliche Daten... mit der Analysie machen wir dann hier öffentlich weiter.)

    Viele Grüße - Carsten

    Einen Kommentar schreiben:


  • chrisi
    antwortet
    Zitat von CarGo Beitrag anzeigen
    Weihnachten als ganztätiger Termin geht bspw. vom "24.12.2014 00:00 - 25.12.2014 00:00"
    Du hast eigentlich nicht das gleiche Problem.
    Wie du selbst schreibst ist das ja OK.

    Bei mir wird aber ein falsches Datum angezeigt und eine falsche Uhrzeit.
    Scheinbar wird das Datum und die Uhrzeit genommen wann der Kalendereintrag erstellt wurde.
    siehe Post #16 bzw. hier: https://knx-user-forum.de/attachment...erbeispiel.png

    D.h. für mich du hast das Problem gar nicht.

    Einen Kommentar schreiben:


  • CarGo
    antwortet
    @chrisi,

    bislang hab ich eigentlich wenig bis gar keine ganztätigigen Termine benutzt - daher habe ich das vermutlich bisher nicht gesehen.
    Ist aber bei mir genauso: Weihnachten als ganztätiger Termin geht bspw. vom "24.12.2014 00:00 - 25.12.2014 00:00"

    Ist natürlich grundsätzlich richtig, sieht aber nicht wirklich hübsch aus.
    Die Daten von Google kommen übrigens auch bei einem ganztägigen Termin genau so zurück... (Führ einfach mal das google_v3.php manuell aus, dann sieht Du die Rohdaten..)

    Ich bin mir noch nicht ganz im klaren, wie das am besten in der GUI aussehen sollte und was ein klares Kriterium wäre:

    • eintätiger Termin:
      • Anzeige: nur Startdatum, keine Uhrzeiten
      • Kriterium: Startzeit und endezeit beide 00:00, Endedatum-1Tag gleich Startdatum
    • mehrtätige Termine:
      • Anzeige: Startdatum - Endedatum-1Tag ??? (zurückgeliefert wirde ja der NÄCHSTE Tag nach Ende...), keine Uhrzeiten
      • Kriterium: Startzeit und Endezeit beide 00:00, Endedatum-1Tag größer als nach Startdatum

    Was meinst Du / Ihr dazu ?


    Die Auswertung passiert in der calendar.php und lässt sich durchaus anpassen - ich werd's mal versuchen


    Viele Grüße - Carsten

    Einen Kommentar schreiben:

Lädt...
X