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

  • CarGo
    antwortet
    Hallo,

    @OsLee540i, @valleyman - seid Ihr sicher. daß die Calendar API auch aktiviert ist ?
    Falls ja, könnt ihr Euch auch mal in Zeile 20 mit
    Code:
    echo $result;
    Das Ergebnis des Aufrufs ausgeben lassen.
    Und nur nochmal zur Sicherheit: am einfachsten auf der Maschine ausführen wo auch SmartVisu (und ggg. smarthome.py) läuft - da ist eigentlich alles vorhanden...


    Viele Grüße - Carsten

    Einen Kommentar schreiben:


  • valleyman
    antwortet
    Hallo,

    vielen Dank für die Erweiterung.

    Bei mir das gleich Problem wie bei Oslee540i.

    Trying to get property of non-objekt in google_2.php line 20

    Habe jetzt auf meiner Windows Kiste php installiert und curl aktiviert.
    Problem bleibt.

    Irgendjemand eine Idee?

    Danke und Gruß
    Sven

    Einen Kommentar schreiben:


  • chrisi
    antwortet
    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
    Hätte 2 Fragen:

    1. In welcher Datei wird das eingetragen damit ich die Tonnen sehe.



    2. Bei mir werden ganztägige Kalendereinträge falsch angezeigt.

    Siehe Anhang.
    Es gibt 3 Testeinträge. Die ersten beiden passen so und sind jeweils Einträge mit Uhrzeit.
    Der 3 Eintrag (Salzburg) ist ein ganztägiger Termin von 19.12 - 21.12.
    Richtig gereiht ist der Termin ja, aber das Datum bzw. die Uhrzeit was da angezeigt wird ist genaus welches vorliegt wenn man Smartvisu aufruft.

    Hatte dieses Problem schon mal wer von euch?
    Angehängte Dateien

    Einen Kommentar schreiben:


  • chrisi
    antwortet
    probier es wenn möglich mal auf einem anderen system auszuführen

    Einen Kommentar schreiben:


  • OsLee540i
    antwortet
    Hilfe

    Servus,

    vielleicht kann mir jemand von Euch weiterhelfen.

    Ich komme mit der Anleitung von Post 1 genau bis zur Ausführung vom Google_2.php

    Also die Google_2.php hab ich mit meinen sachen angepasst.

    PHP-Code:
    <?php
    $url 
    'https://accounts.google.com/o/oauth2/token';
    $post_data = array(
                        
    'code'          =>   '6/blablabla_blubblubblub.zahlenundbuchstaben',    // insert the code here that was shown after calling the URL from google_1.php
                        
    'client_id'     =>   'zahlen-zahlenundbuchstaben.apps.googleusercontent.com',    // insert your client ID here
                        
    'client_secret' =>   'blabla-blubblub',    // insert your client secret here
                        
    'redirect_uri'  =>   'urn:blub:bla:oauth:2.0:oob',    //insert your redirect URI here (first line only)
                        
    'grant_type'    =>   'authorization_code',
                        );
    $ch curl_init();

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

    $result curl_exec($ch);
    $token json_decode($result);

    echo 
    $token->refresh_token "\n";
    ?>
    wenn ich das im Chrome ausführe passiert einfach nichts, und über die Console kommt:

    Trying to get property of non-objekt in google_2.php line 20

    Ich hab das Prozedere jetzt schon 5 mal durch, hab auch schon die Client ID gelöscht und ne neue gemacht, dann natürlich mit den neuen Daten die google_1.php befüllt, aber das Ergebnis ist immer das selbe.

    Bin für jeden Rat dankbar.

    Gruß Wolfi

    Einen Kommentar schreiben:


  • Shai
    antwortet
    Der Key ist ja für das OAuth relevant, ich hab mir aber die API mal angesehen und dann die "googleV3" modifiziert so das es jetzt mit dem gewünschten Kalender funktioniert. (siehe: https://developers.google.com/google...ce/events/list)

    Theoretisch könnte man halt auch das Feld weiter benutzen und die URL aus dem GET Request auf den Service rausholen, aber mir reichte das an der Stelle "quick & dirty". Alternativ noch zusätzlich das Calendar-Widget modifizieren, dass man mehrere verschiedene Kalender einbinden könnte. ;-)


    Hinzugekommen ist die Konfiguration der Calendar ID (Google Apps Troubleshooting Help: How to find the Calendar ID of a Google Calendar)

    Welche dann in der API URL Verwendung findet:

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


    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/calendars/'$calendar_id '/events?maxResults=5&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 strtotime($entry["start"]["dateTime"]) + date("Z"$entry["start"]["dateTime"]);
                    
    $endstamp strtotime($entry["end"]["dateTime"]) + date("Z"$entry["end"]["dateTime"]);
                    
    $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"]),
                        
    '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();

    ?>

    Grüße,

    Lars

    Einen Kommentar schreiben:


  • CarGo
    antwortet
    Hallo Lars,

    wie Du richtig geschrieben hast, wird die URL der ConfigSeite aktuell ignoriert. Relevant ist der Key, den Du wie beschrieben generiert hast...

    Viele Grüße - Carsten

    Einen Kommentar schreiben:


  • Shai
    antwortet
    Moin,

    erst mal vielen Dank für die Umsetzung, ich habe aber ein etwas merkwürdiges Verhalten festgestellt.

    Ich habe in meinem Google Account mehrere Kalender definiert und habe mir die XML-URL vom "Müllkalender" herauskopiert.
    Wenn ich die URL direkt im Browser aufrufe bekomme ich auch die richtigen Einträge im XML zurück.

    Trage ich die URL in meine Smartvisu ein, so bekomme ich ganz andere Termine (aus anderen Kalendern) angezeigt.

    Kann das jemand nachvollziehen, oder hab ich gerade einfach n Brett vorm Kopf warum das so sein könnte?


    EDIT: ich glaube ich hab das Problem gefunden, momentan wird immer der "primary" Kalender abgerufen, und der ist natürlich nicht der den ich brauche.
    Die URL im Smartvisu ist mit der V3 Lösung soweit ich das erkennen kann überflüssig

    Grüße,

    Lars

    Einen Kommentar schreiben:


  • chrisi
    antwortet
    Zitat von CarGo Beitrag anzeigen
    1. Zurück kommt eine URL, diese im Browser aufrufen. Es erscheint die berühmte Bestätigungsseite, hier bestätigen und Voila, es erscheint der Auhorization Code.

    Wenn ich diese URL in den Browser eingebe kommt leider immer ein 401 oder 400 Fehler.


    EDIT: Funkt schon. Falls das noch wer hat. Habe beim Punkt davor meine E-Mail nicht ausgewählt.

    Einen Kommentar schreiben:


  • SachsenTobi
    antwortet
    Das war es tatsächlich,

    wieder mal vielen Dank.

    Einen Kommentar schreiben:


  • CarGo
    antwortet
    Hallo,

    hm, bei mir steht da z.B ."Samstag, 20.12.14 08:00 - 12:00"...
    Schau doch mal, ob Du ein language file für Deutsch hast:
    Code:
    /var/www/smartvisu/lang/lang_de.txt
    Da sollte sich dann folgende Zeile finden, die das Datumsformat definiert:
    Code:
    $lang['format']['short']                        = 'd.m.y H:i';
    Sieht bei Dir aktuell wohl eher nach US-Default aus...
    Hope this helps !

    Viele Grüße - Carsten

    Einen Kommentar schreiben:


  • SachsenTobi
    antwortet
    Es funktioniert perfekt.

    Vielen lieben Dank

    Weist du auch zufällig noch, wo ich das Datumsformat welches da angezeigt wird ändern kann? Ich möchte da gern 10. Dezember 2014 stehen haben und nicht 12/10/14

    Danke

    Einen Kommentar schreiben:


  • CarGo
    antwortet
    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

    Einen Kommentar schreiben:


  • SachsenTobi
    antwortet
    Jetzt wäre für mich nur noch interessant, wie ich da verschiedene Symbole mit hinbekomme :-)

    Damit es auch ne gelbe Tonne bspw mit anzeigt :-)

    Einen Kommentar schreiben:


  • CarGo
    antwortet
    @SachsenTobi,

    supi, danke für den Hinweis - da war ich beim Entfernen meiner Inhalte wohl etwas übereifrig...
    Ich habe den Anhang im ersten Post direkt aktualisert.

    Viele Grüße - Carsten

    Einen Kommentar schreiben:

Lädt...
X