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

  • henfri
    antwortet
    Hallo,

    vielen Dank, ich hab das jetzt hier auch soweit am laufen.
    Das einzige, was nicht funktioniert:
    addressbook#contacts@group.v.calendar.google.com

    Das sind die Geburtstage. Funktioniert das bei euch?

    @thorsten: Sonstige funktioniert bei mir.

    Gruß,
    Hendrik

    Einen Kommentar schreiben:


  • devau
    antwortet
    Hallo Thorsten

    In der Beilage die Ansicht zu den Esintellungsmöglichkeiten, welche ich erhalte. Die Option "Installierte Anwendung" fehlt dort..
    Angehängte Dateien

    Einen Kommentar schreiben:


  • CodeRed
    antwortet
    Hallo Dieter,

    bei Punkt 5 hatte ich die Auswahl-Möglichkeit neben "Webanwendung" und "Dienstkonto" auch die von Carsten beschriebene Auswahl "Installierte Anwendung", also genau so wie von Carsten beschrieben. Vielleicht kannst du nochmals prüfen, ob du an der richtigen Stelle warst.

    Der Google-Standard-Kalender entspricht auch bei mir meiner Google-Mail-Adresse. Einfach diese in die URL eintragen. Solltest du weitere Kalender angelegt haben, so bekommen diese zufällig generierte Kalender-IDs, in der Form calendarid@group.calendar.google.com.

    @henfri: wegen mir kann die Erweiterung gerne ins Repository übernommen werden, falls die Entwickler daran interessiert sind.


    Gruß
    Thorsten

    Einen Kommentar schreiben:


  • devau
    antwortet
    Hallo

    Im Schritt 5 steht "Wichtig: hier „Installierte Anwendung“ auswählen". Dieser Punkt existiert nicht. Soll mann dort "Sonstige* auswählen?

    Und: Welcher "Name" ist auf der Config im Feld "URL" einzutippen? Muss das einfach der Name eines der Kalender sein, die man selbst erstellen kann?
    Meine Kalender URL ist in der Form
    "https://www.google.com/calendar/embed?src=name%40domain.com&ctz=Europe/Zurich", wobei "name%40domain" für meine Mailadresse steht. Ich erhalte keine andere Kalender-URL.
    Danke für Eure Hilfe!
    Gruss,
    Dieter

    Einen Kommentar schreiben:


  • henfri
    antwortet
    Top, danke.
    Spricht etwas dagegen, das ins Repository zu über nehmen?

    Einen Kommentar schreiben:


  • CarGo
    antwortet
    Hallo CodeRed,

    super, ganz herzlichen Dank dafür ! Gerade das Caching hatte mir auch noch gefehlt.
    Bin grad im Urlaub und kann nicht testen, freu mich aber schon darauf !!

    Viele Grüße - Carsten

    Einen Kommentar schreiben:


  • CodeRed
    antwortet
    Hallo zusammen,

    zunächst einmal herzlichen Dank an Carsten für die Anpassung des Moduls an die neue API-Authentifizierung.

    In den letzten Tagen habe ich das Modul noch um die unten aufgeführten Möglichkeiten erweitert, die ich euch nicht vorenthalten möchte.
    Den bisher vorhandenen Code habe ich weitestgehend gleich belassen.

    Caching
    Cachen des Authentifizierungs-Tokens, sowie der Colors.
    Alle Daten bleiben nur solange im Cache, wie das Token gültig ist. Nach Ablauf des Tokens werden alle Daten aus dem Cache gelöscht und neu geladen.
    Um den Cache vorzeitig zu löschen, muss die Datei .../smartVISU/temp/calendar_google.json gelöscht werden.

    Anzeige mehrerer Kalender
    Sollen Events aus mehreren Kalendern dargestellt werden, so können in der Konfiguration die IDs der Kalender durch Komma getrennt angegeben werden. Die Termine werden dann mit den Farben des jeweiligen Kalenders dargestellt, falls nicht explizit eine Farbe definiert wurde.
    Die Standardfarben der verfügbaren Kalender werden gecacht und erst mit dem Ablauf des Tokens neu geladen.
    Es können nur Kalender angezeigt werden, auf die der verwendete Google-Account berechtigt wurde.

    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 calendar
     */
    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/'$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();
    ?>

    Einen Kommentar schreiben:


  • henfri
    antwortet
    Hallo, sehe ich es recht, dass nur einer der Kalender eines Accounts unterstützt wird?

    Einen Kommentar schreiben:


  • MarcoLanghans
    antwortet
    Hi,

    ok habe es hin bekommen, musste nur die KalenderID in die URL einfügen danach ging es.

    Gruß

    Marco

    Einen Kommentar schreiben:


  • MarcoLanghans
    antwortet
    Hallo,

    super Arbeit !!!

    Aber irgendwie mache ich etwas falsch beim konfigurieren :-( da bei mir keine Einträge angezeigt werden.
    Oder kann man nur den ersten/primary Kalender anzeigen oder ich habe da was falsch konfiguriert.

    System: GoogleV3
    URL: Müllkalender (Kalendername in Google)


    Gruß

    Marco



    Einen Kommentar schreiben:


  • greco64
    antwortet
    Hallo Carsten,

    besten Dank für die super Umsetzung und die genaue Beschreibung, Goggle Kalender funktioniert wieder, echt TOLL!!!

    Gruß
    Georg

    Einen Kommentar schreiben:


  • Morg
    antwortet
    Hallo,
    nachdem ich jetzt mit meiner Visu schon ein gutes Stück voran gekommen bin, bin ich auf verschiedene Kalenderplugins gestoßen.

    An der Google-Version gefällt mir besonders gut, dass man über die @icon- und @color-Tags gleich das Icon konfigurieren kann - allerdings benutze ich ownCloud in Verbindung mit dem CalDav-Plugin.

    Gibt es eine Möglichkeit, den Parsercode für das andere Plugin umzuschreiben? Ich muss zugeben, dass ich nicht gefunden habe, wo tatsächlich dieses Parsing passiert. Ich habe verstanden, dass Google über JSON und CalDav über XML ausgelesen werden und vermute, dass durch die spezielle Codierung das Parsing ein Automatismus im JSON-Code ist -- sicher bin ich mir indes nicht.

    Kann mir jemand einen Tip geben, wie ich das ggf. mit überschaubarem Aufwand umbauen kann (oder hat das schon jemand gemacht? :-) )

    Gruß Sebastian

    Einen Kommentar schreiben:


  • oschlueter
    antwortet
    Herzlichen Dank schon einmal für Eure massive Vorarbeit!
    Habe heute mit dem Thema Google Calendar V3 gestartet.
    Leider harpert es bei mir am Ende. Das Feedback über die Console für
    Code:
    php -q googleV3.php
    ist meiner Einschätzung nach plausibel:

    Code:
    [FONT=courier new][{"pos":1,"start":"15-05-29 19:30:00","end":"15-05-29 21:00:00","title":"Test","content":"","where":"","color":"","link":"https:\/\/www.google.com\/calendar\/event?eid=ODVmMmZvdTliamgydWxsYmRpMDl2YTZ1ZnMgcmFkMgcmFk","starttime":"19:30","endtime":"21:00","period":"29.05.15 19:30 - 21:00","weekday":"Freitag","icon":"pages\/base\/pics\/trans.png"}][/FONT]
    Allerdings gibt mir SmartVisu nach Auswahl der "googleV3" nur eine Fehlermeldung:
    Code:
    Calendar read request failed!
    Hat jemand eine Idee?

    Viele Grüße,
    Oliver

    Einen Kommentar schreiben:


  • Robert
    antwortet
    Herzlichen Dank auch vion mir - es funktioniert!

    Leider bekomme ich es nicht hin, andere als meinen persönlichen Kalender abzurufen? Der von meiner Frau und z.B. die deutschen Feiertage (ein dritter der von Google bereit gestellt wird) sind zwar an den Tablets und Telefonen sichtbar, aber scheinbar nicht ohne weiteres über die API. Hat jemand einen Tipp?

    Viele Grüße
    Robert

    Einen Kommentar schreiben:


  • SachsenTobi
    antwortet
    Hab es auch soeben eingearbeitet und stelle fest: "Es funktioniert"

    :-)

    Vielen Dank nochmal

    Einen Kommentar schreiben:

Lädt...
X