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

  • psilo
    antwortet
    Bei mir steht bspw. 03.11.15 00:00 - 04.11.15 00:00. Habe aber nur einen Kalender drin. Ist das nur bei mehreren?

    Einen Kommentar schreiben:


  • DiePolle
    antwortet
    Hallo,

    Habe in der Konfiguration mehrere Kalender angegeben (meiner, Frau, Feiertage). Soweit alles super. Jetzt ist mir aufgefallen wenn ich in meinem Kalendar einen ganztägigen Termin eintrage, z.b. Urlaub, Geburtstag, wird mir dieser in der Visu nicht angezeigt. Ändere ich den Termin z.b. auf 00:00 bis 23:59 ist er plötzlich sichtbar. Dies gilt auch für Termine über mehrere Tage.

    Ist dies sonst noch jemanden aufgefallen?

    Einen Kommentar schreiben:


  • psilo
    antwortet
    ja in der config, per page. obs das jetzt ist glaube ich nicht. bei dir sieht es aus wie wenn er entweder 2mal einen header senden will oder irgendwo eine debugausgabe reinkreuzt.. einfach mal sicherstellen, dass das file das originalfile ist.

    Einen Kommentar schreiben:


  • lio123
    antwortet
    dake psilo,

    evtl bin ich einen Schritt weiter, nun folgt diese Nachricht:
    Code:
    /var/www/smartvisu/lib/calendar/service$ php -q googleV3.php
    PHP Warning:  Cannot modify header information - headers already sent by (output started at /var/www/smartvisu/lib/calendar/service/googleV3.php:1) in /var/www/smartvisu/lib/service.php on line 95  [{"title":"Calendar: Google","text":"Calendar primary read request failed!"}]
    Wo machst Du das:
    Zitat von psilo Beitrag anzeigen
    Ich hab das @ encoded alias: "%40googlemail.com"
    Auf der Config-Page? -Das bewirkt (noch) nichts.

    danke und Gruß,
    Lio

    Einen Kommentar schreiben:


  • psilo
    antwortet
    Ich hab das @ encoded alias: "%40googlemail.com"

    Bei Dir kommt aber ein klarer PHP Fehler raus. Das müsste man tiefer anschauen.

    Liegen die Filers korrekt unter lib/calendar/service? Und liegt die includes.php da wo sie soll, also unter lib? Er geht ja 3 Directories rauf und dann wieder unter lib.. Ansonsten ggf. PHP Konfigurationssache?! Oder mal absolut includen.
    Zuletzt geändert von psilo; 18.10.2015, 13:04.

    Einen Kommentar schreiben:


  • lio123
    antwortet
    Hallo Zusammen,

    konnte mich soweit durchhangel und scheitere nun aber bei googleV3.php.
    Auf der Page gibt's den Fehler: "Calendar mailadresse@gmail.com read request failed!"
    die CalenderID ist nur die reine mailadresse?!


    Auf der Console gibt es mir diesen Code aus:
    Code:
    admin@smarthome:/usr/smarthome$ php -q /var/www/smartvisu/lib/calendar/service/googleV3.php
     PHP Warning:  require_once(../../../lib/includes.php): failed to open stream: No such file or directory in /var/www/smartvisu/lib/calendar/service/googleV3.php on line 13
    PHP Fatal error:  require_once(): Failed opening required '../../../lib/includes.php' (include_path='.:/usr/share/php:/usr/share/pear') in /var/www/smartvisu/lib/calendar/service/googleV3.php on line 13
    Zeile 13 im Script:
    Code:
    require_once '../../../lib/includes.php';
    Wäre für eine Hilfe dankbar.

    Danke und Grüße.
    Lio

    Einen Kommentar schreiben:


  • thorschtn
    antwortet
    Hallo zusammen,

    ich verzweifel auch langsam hier....

    Die Tokens und Skripte sind alle generiert und konfiguriert, ich bekomme aber keinen Kalender im Smartvisu angezeigt.

    Wenn ich mein Skript an der Konsole ausführe, bekomme ich lauter "php NOTICE Undefined index" und am Ende dann aber auch Daten aus meinem Kalender - d.h. die ganze Authentifizierung funktioniert, und irgendwo stimmt in meinen Skripten was nicht.

    Update: Wenn ich das googleV3.php Browser aufrufe, bekomme ich direkt die Kalenderdaten in folgendem Format dargestellt, d.h. die Googleabfrage funktioniert!?

    [{"pos":1,"start":"15-10-07 06:00:00","end":"15-10-07 06:15:00","title":"Tho: Auto Neuk\u00f6lln","content":"","where":"","link":"htt ps:\/\/www.google.com\/calendar\/event?eid=NWxuYT..............

    Das sieht auf den ersten Blick richtig aus, oder?

    Jetzt muss ich nur noch auflösen, warum die Darstellung nicht funktioniert - hat vielleicht jemand nen Tip bzgl typischer Fehlerquellen?

    Danke und viele Grüße

    Thorschtn

    // Update: Augenscheinlich war ich zu ungeduldig. Die obige Ausgabe des googleV3.php ist korrekt. Ich weiss nicht, warum Smartvisu anfangs den Kalender nicht dargestellt hat (Caching war ausgestellt, RPI und Browser hatte ich auch bereits neu gestartet) - aber einen halben Tag später gings auf einmal, ohne, dass ich noch etwas dran ändern musste....
    Zuletzt geändert von thorschtn; 08.10.2015, 07:49.

    Einen Kommentar schreiben:


  • Keule09
    antwortet
    Hallo Zusammen,

    ich habe ein Problem mit der Darstellung des Googlekalenders in meiner Visu.
    Ich bekomme die Termine nur angezeigt, wenn ich zuvor mittels Putty ins passende Verzeichnis wechsle und die Datei mit folgendem Befehl ausführe:

    php -q googleV3.php dann zeigt es mir die Termine für eine gewisse Zeit an und verschwinden wieder, anschliessend muss ich wieder die Datei googleV3.php ausführen.
    @ nEiMi

    zu 1. ja muss mit dran

    zu 2. da hab ich auch die erste Zeile genommen

    habe auch mehrer Versuche gebraucht bis die Scripte alle funktionierten

    Gruß


    Einen Kommentar schreiben:


  • Yfkt5A
    antwortet
    Hallo zusammen,

    ich schaffs nicht mir dieses Refresh-Token zu generieren... beim 2ten Script bekommen ich immer folgenden Fehler:
    Code:
    "error" : "invalid_grant"
    }PHP Notice:  Undefined property: stdClass::$refresh_token in /tmp/google_2.php on line 20
    Habe dort wie im Thread erwähnt schon das echo $result eingefügt

    Vielleicht trage ich ja die falschen Sachen ein, daher 2 Fragen:
    1. Muss bei der Client-ID das ".apps.googleusercontent.com" mit dran?
    2. Wo finde ich die Redirect-URI? ich habs bisher mit "urn:ietf:wgauth:2.0ob" oder "http://localhost" probiert...

    Vielleicht könnte ja jemand mal ein funktionierendes Beispiel(mit gefakten Daten) posten wie die beiden Scripte befüllt werden müssen....

    Danke schonmal...

    Einen Kommentar schreiben:


  • henfri
    antwortet
    Funktioniert doch. Ich bin nicht sicher, was faul war.


    Danke!

    Einen Kommentar schreiben:


  • henfri
    antwortet
    Hallo Alex,

    leider hat das noch nicht geholfen:

    Code:
    /var/www/html/visu/lib/calendar/service# php -q googleV3.php
    [{"title":"Calendar: Google","text":"Calendar primary read request failed!"}]

    Kann man dem Skript noch Details herauslocken (Warum failed?)?

    Habe es gerade noch einmal mit der älteren Version geprüft um Autentifizierungsprobleme auszuschließen. Damit funktioniert es weiterhin.

    Gruß,
    Hendrik
    Zuletzt geändert von henfri; 22.08.2015, 10:08.

    Einen Kommentar schreiben:


  • aschwith
    antwortet
    Hallo zusammen,
    in dem Post oben ist noch ein Fehler:
    PHP-Code:
    $cache_content json_decode($cache->read(), ture); 
    müsste sein:
    PHP-Code:
    $cache_content json_decode($cache->read(), true); 
    Gruß
    Alex

    Einen Kommentar schreiben:


  • henfri
    antwortet
    Hallo,

    danke für die neue Version
    leider funktioniert der Kalender (auch die vorherige) nicht mehr:
    Code:
    php -q googleV3.php
    [{"title":"Calendar: Google","text":"Calendar primary read request failed!"}]root@homeserver:/var/www/html/visu/lib/calendar/ser
    vice
    Hast du eine Idee?

    Gruß,
    Hendrik

    Einen Kommentar schreiben:


  • devau
    antwortet
    Hallo Thorsten
    Es funktioniert nun alles bestens! php5-curl war auf dem Raspberry nicht installiert! Mein Screenshot in Post #92 war somit aktuell, es muss dort der Punkt "Sonstige" ausgewählt werden, es gibt keinen Punkt "Installierte Anwendung"; ggfs. in der Anleitung korrigieren.
    Was noch eine Option wäre, dass eine Serie bloss als ein einziger Eintrag angezeigt wird, da eine Serie sonst die ganze Anzeige zumauert.
    Danke für Deinen guten Support!
    Dieter

    Einen Kommentar schreiben:


  • CodeRed
    antwortet
    Zitat von henfri Beitrag anzeigen
    ...
    Das einzige, was nicht funktioniert:
    addressbook #contacts@group.v.calendar.google.com
    Das Problem war die Raute "#" in der Kalender-ID. Diese musste escaped werden. Unten angefügt eine aktualisierte Version in der das Problem behoben sein sollte.

    @Dieter: Bei mir sah das auf jeden Fall anders aus. Leider kenne ich mich mit der Authentifizierung und den Google-Projekten nicht wirklich aus. Vielleicht hat Carsten noch eine Idee.

    PHP-Code:
    <?php
    /**
     * -----------------------------------------------------------------------------
     * @package     smartVISU
     * @author      Martin Gleiß (basic version), Carsten Gotschlich (google API V3), Thorsten Moll (cache, multiple calendars)
     * @copyright   2012
     * @license     GPL [http://www.gnu.de]
     * -----------------------------------------------------------------------------
     */

    // Note: for debugging purposes you can execute this script from commandline with    php -q <scriptname>

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

    /**
     * This class reads a google calenda
     */
    class calendar_google extends calendar
    {
        const 
    CLIENT_ID '';                    // put your clientID here - from Google website
        
    const CLIENT_SECRET '';        // put your client Secret here - from Google WebSitr
        
    const REFRESH_TOKEN '';     // Put your google refresh token here - from other PHP script

        
    var $calendar_ids = array();

        
    /**
         * initialization of some parameters
         */
        
    public function init($request)
        {
            
    parent::init($request);
            if (
    $this->url == '')
                
    $this->url 'primary';
            if (
    $this->count == 0)
                
    $this->count 10;

            
    $this->calendar_ids explode(',' $this->url);
        }


        public function 
    run()
        {
            
    $cache = new class_cache('calendar_google.json');

            
    // check for cached data
            
    if ($cache->hit(3600)) {
                
    $cache_content json_decode($cache->read(), ture);

                if (
    $cache_content['accessTokenExpiry'] < time()) {
                    
    // if token is not valid anymore reload everything cached
                    
    unset($cache_content);
                }
            }

            if (!isset(
    $cache_content['accessToken'])) {
                
    $token_url 'https://accounts.google.com/o/oauth2/token';
                
    $post_data = array(
                                
    'client_secret' =>   self::CLIENT_SECRET,
                                
    'grant_type'    =>   'refresh_token',
                                
    'refresh_token' =>   self::REFRESH_TOKEN,
                                
    'client_id'     =>   self::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);

                
    $cache_content['accessToken'] = $token_object->{'access_token'};
                
    $cache_content['accessTokenExpiry'] = time() + $token_object->{'expires_in'} - 60;
            }

            
    //---------------------------------------------------------------------
            // 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 " $cache_content['accessToken'])));
            
            
    // first let's retrieve the colors and cache them
            
    if (!isset($cache_content['calendarColors'])) {
                
    $resturl 'https://www.googleapis.com/calendar/v3/colors';
                
    $content = @file_get_contents($resturlfalse$context);
                if (
    $content !== false)
                {
                    
    $result json_decode($content,true);
                    
    $cache_content['calendarColors'] = $result["event"];
                    
    //var_dump($cache_content['calendarColors']);
                
    }
            }

            
    // then retrieve the users calendars available and cache them, too
            // do only if more than one calendar specified
            
    if (count($this->calendar_ids) > && !isset($cache_content['calendarList'])) {
                
    $resturl 'https://www.googleapis.com/calendar/v3/users/me/calendarList';
                
    $content = @file_get_contents($resturlfalse$context);
                if (
    $content !== false) {
                    
    $result json_decode($content);
                    
    $calendarList = array();

                    foreach (
    $result->{'items'} as $entry) {
                        
    $cal = array();
                        
    $cal["description"]     = $entry->{'summary'};
                        
    $cal["backgroundColor"] = $entry->{'backgroundColor'};
                        
    $calendarList[$entry->{'id'}] = $cal;
                    }

                    
    $cache_content['calendarList'] = $calendarList;
                    
    //var_dump($cache_content['calendarList']);
                
    }
            }
            
            
    // retrieve the calendar entries from each calendar
            
    $events = array();

            foreach (
    $this->calendar_ids as $calendarid) {
                
    $resturl 'https://www.googleapis.com/calendar/v3/calendars/'urlencode($calendarid) . '/events?maxResults='$this->count .'&q=-%22%40visu+no%22&singleEvents=true&orderBy=startTime&timeMin='.urlencode(date('c'));
                
    $content = @file_get_contents($resturlfalse$context);
                
    $this->debug($content);

                
    // for debugging purposes only
                // echo $content;
                // echo "###########";

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

                    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"]);
                        
    $start strtotime($startstamp);
                        
    $end   strtotime($endstamp);

                        
    $color '';
                        if (((string)(
    $entry["colorId"]))!='') {
                            
    $color=$cache_content['calendarColors'][(string)($entry["colorId"])]['background'];
                        }
                        else if (
    count($this->calendar_ids) > 1) {
                            
    $color=$cache_content['calendarList'][$calendarid]['backgroundColor'];
                        }

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

            
    // finally re-order the events comming potentially from different calendars
            
    $i 1;
            
    ksort($events);
            foreach(
    $events as $event) {
                
    $event['pos'] = $i++;
                
    $this->data[] = $event;
                if (
    $i $this->count) break;
            }

            
    // at the end write back cache
            
    $cache->writejson_encode($cache_content) );
        }
    }


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

    //

    $service = new calendar_google(array_merge($_GET$_POST));
    echo 
    $service->json();
    ?>
    Zuletzt geändert von CodeRed; 17.08.2015, 19:50.

    Einen Kommentar schreiben:

Lädt...
X