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

    #31
    Hi CarGo! Kannst Du kurz erläutern, wo Du diese Eintragungen machst?

    Zitat von CarGo Beitrag anzeigen
    Hallo,

    sollte eigentlich kein Problem sein, das wird gesteuert durch den Text im Termin.
    Als Beispiel: Bei mir benutze ich folgende Einträge für die Tonnen (das ist jeweils Betreff und Inhalt eines Kalendereintrags):

    Code:
    Papiertonne
    @icon        icons/ws/message_garbage.png
    @color       #333399
    
    braune tonne
    @icon        icons/ws/message_garbage.png
    @color       #664422
    
    Restmüll - schwarze Tonne
    @icon        icons/ws/message_garbage.png
    @color       #555555
    
    Gelbe Tonne
    @icon        icons/ws/message_garbage.png
    @color       #666600
    
    Biotonne
    @icon        icons/ws/message_garbage.png
    @color       #009900
    Viele Grüße - Carsten

    Kommentar


      #32
      Hallo,

      zu ein Einträgen, wie geschrieben:
      Betreff ist bspw "Gelbe Tonne", der Inhalt des Termins ist dann

      @icon ...
      @color ...

      wie unten.
      Die Zeilen mit @icon und @color werden dann von calendar.php ausgewertet und umgesetzt.

      Hoffe, das hilft weiter - am besten einfach ausprobieren....

      Viele Grüße - Carsten

      Kommentar


        #33
        @bgewehr: Hast du auch das Problem bei ganztägigen Einträgen, das diese mit Uhrzeit angezeigt werden, obwohl es bei ganztägigen Einträgen ja eigentlich gar keine Uhrzeit gibt (siehe auch vorherige Posts).

        Hat das Problem sonst noch jemand von euch?
        Bzw. gibts auch jemanden der das Problem nicht hat?
        Würde gerne mal herausfinden was uns da unterscheidet und damit herausfinden warum das Problem auftritt.

        Kommentar


          #34
          @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

          Kommentar


            #35
            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.

            Kommentar


              #36
              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

              Kommentar


                #37
                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(); 

                ?>

                Kommentar


                  #38
                  @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.

                  Kommentar


                    #39
                    ich habe da einfach
                    PHP-Code:
                    $calendar_id 'primary'
                    gesetzt.

                    Kommentar


                      #40
                      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')); 

                      Kommentar


                        #41
                        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..

                        Kommentar


                          #42
                          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

                          Kommentar


                            #43
                            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

                            Kommentar


                              #44
                              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

                              Kommentar


                                #45
                                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

                                Kommentar

                                Lädt...
                                X