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

  • todro
    antwortet
    Zitat von smai Beitrag anzeigen
    Tom Bombadil wenn du Zeit ubd Lust hast, kannst du gerne den iCloud-Treiber so umbauen, dass er generisch für CalDav verwendet werden kann.
    Aus dem iCal-Treiber lässt sich zumindest mit Google nicht mehr rausholen, da nützt also weiterer Zeiteinsatz nichts.

    Da der Google V3 Treiber bei mir mittlerweile auch nicht mehr funktioniert, da einige Zeit inaktiv, habe ich umgestellt auf iCal und das Farb-Thema anders gelöst.

    Ich habe für den iCal-Treiber einen Kompromiss gefunden, indem ich den Treiber um die Farbzuordnung erweitert habe, der zugehörige Wert kommt aus dem Event-Feld URL, das ich vor dem Import in den Google-Kalender für die jeweiligen Event-Arten manuell unterschiedliche befülle. Da das nur einmal jährlich passiert, ist das vom Aufwand kein Problem.

    Da ich mir bei der AWG Rems Murr einen individuellen Abfallkalender erzeugen lassen kann, exportiere ich je Terminart getrennt, bereite das Feld URL entsprechend mit Suchen und Ersetzen auf und importiere dann in Google.

    Die Schritte sind daher:

    1.) Export der jeweiligen Terminarten, also je Art eine Datei (1=Restmüll,2=Bio,3=Papier,4=Gelb,5=Grüngut,6=Chri stbaum) als .ics-Datei

    2.) Ersetzen des URL-Feldes durch die jeweilige Terminart: URL:1 ist somit Restmüll, URL:2 ist Bio usw. in der .ics-Datei vor dem Import

    Code:
    BEGIN:VCALENDAR
    PRODID:http://www.athos.com/calendarwebapplication/
    VERSION:2.0
    METHOD:PUBLISH
    CHARSET:UTF-8
    BEGIN:VEVENT
    DTSTART;VALUE=DATE:20160114
    DTEND;VALUE=DATE:20160115
    LOCATION;LANGUAGE=de:SCHLEHENWEG    2, 71397 LEUTENBACH
    TRANSP:TRANSPARENT
    SEQUENCE:0
    UID:     644981
    DTSTAMP:20161113T000223Z
    DESCRIPTION;LANGUAGE=de:
    SUMMARY;LANGUAGE=de:Restmülltonne
    PRIORITY:9
    CLASS:PUBLIC
    [COLOR=#FF0000][B]URL:1[/B][/COLOR]
    STATUS:CONFIRMED
    END:VEVENT

    3.) Import der Dateien in einen eigenen Google "Müllkalender", dessen URL dann für diesen Zweck verwendet werden kann.

    4.) Austausch/Erweiterung der Datei "iCal_(e.g._Google).php":

    Die Farbzuordnung erfolgt statisch zur Terminart, entsprechend können bei Bedarf die Farben einfach ausgetauscht werden.

    Code:
    <?php
    /**
     * -----------------------------------------------------------------------------
     * @package     smartVISU
     * @author      Martin Gleiß
     * @copyright   2012 - 2015
     * @license     GPL [http://www.gnu.de]
     * -----------------------------------------------------------------------------
     */
    
    
    require_once '../../../lib/includes.php';
    require_once const_path_system.'calendar/calendar.php';
    require_once const_path_system.'calendar/ICal/ICal.php';
    require_once const_path_system.'calendar/ICal/EventObject.php';
    
    use ICal\ICal;
    
    /**
     * This class reads a google calendar
     */
    class calendar_google extends calendar
    {
    
    
    [COLOR=#FF0000][B]/* Add Colors per event type    */
    protected $EventTypeColor = array(
         1 => '#000000',        // Restmüll
         2 => '#663300',        // Bio    
         3 => '#0033cc',        // Papier
         4 => '#ffff00',        // Gelbe Tonne
         5 => '#00b33c',        // Grüngut
         6 => '#33cc33'            // Christbaum
    );[/B][/COLOR]
        /**
         * initialization of some parameters
         */
        public function init($request)
        {
            parent::init($request);
    
            //$this->url = preg_replace('#/basic(\.ics)?$#', "/full.ics?maxResults=".(int)$request['count']."&timeMin=2016-07-03T00:00:00Z&singleEvents=true&orderBy=startTime&sortOrder=a", $this->url);
        }
    
        public function run()
        {
                    $ics = new ICal($this->url);
                    $events = $ics->eventsFromRange("today",false);
                    $events = array_slice($events, 0, $this->count);
                // output events as list
                $i = 1;
            foreach ($events as $event) {
              $this->data[] = array('pos' => $i++,
                'start' => date('y-m-d H:i:s', $ics->iCalDateToUnixTimestamp($event->dtstart)),
                'end' => date('y-m-d H:i:s', $ics->iCalDateToUnixTimestamp($event->dtend)),
                'title' => $event->summary,
                'content' => str_replace("\\n", "\n", $event->description),
                'where' => $event->location,
    
    [COLOR=#FF0000][B]// Assign color based on URL property of the event (not the .ics URL but of the event creator)            
    // Requires a pre-processing of the .ics file before importing it to google calendar
            'color' => $this->EventTypeColor[$event->url],
    //[/B][/COLOR]
                //,'link' => ''
              );
            }
      }
    }
    
    
    // -----------------------------------------------------------------------------
    // call the service
    // -----------------------------------------------------------------------------
    
    $service = new calendar_google(array_merge($_GET, $_POST));
    echo $service->json();
    
    ?>
    Und das Ergebnis sieht dann so aus:

    iCalExample2.jpg


    Termine ohne angepassten URL-Feldinhalt werden entsprechend mit der Hintergrundfarbe dargestellt (z.B. manuell angelegter Testtermin).

    Einen Kommentar schreiben:


  • smai
    antwortet
    Der ownCloud Treiber ist leidrr nicht sehr gut implementiert, deshalb habe ich ihn auch noch nicht ins Repository aufgenommen.
    Aber iCloud ist ebenfalls CalDav, deshalb denke ich, dass dieser mit wenig Aufwand in einen generischen CalDav-Treiber umgebaut werden könnte.

    Da das Datenformat bei CalDav ja ebenfalls iCal ist, einfach mit XML-Metadaten gewrappt, sollte diese meiner Meinung nach denselben iCal-Parser nutzen.
    Dies ist beim iCal und iCloud Treiber bereits der Fall.

    So braucht es eigentlich nur noch zwei Treiber, einen reinen iCal und einen mit dem CalDav Wrapping. Und von mir aus noch den Google API v3, obwohl dieser, wie man hier sieht, nicht Massentauglich ist.

    Einen Kommentar schreiben:


  • Tom Bombadil
    antwortet
    Wie heißt es so schön - Schuster, bleib bei Deinen Leisten. Von iCloud hab ich null Ahnung und nicht mal einen Account. Ich werde aber den ownCloud / NextCloud Treiber gern so erweitern, dass Kategorien und Farben übernommen werden, sofern der Provider diese liefert (bei OC/NC werden definitiv Kategorien geliefert - Farben muss ich erst nachsehen). Da der Treiber auf dem für calDav basiert, ist das dann auch gleich eine Vorlage für andere Kalendertypen ...

    /tom

    Einen Kommentar schreiben:


  • smai
    antwortet
    Tom Bombadil wenn du Zeit ubd Lust hast, kannst du gerne den iCloud-Treiber so umbauen, dass er generisch für CalDav verwendet werden kann.
    Aus dem iCal-Treiber lässt sich zumindest mit Google nicht mehr rausholen, da nützt also weiterer Zeiteinsatz nichts.

    Einen Kommentar schreiben:


  • smai
    antwortet
    Ja, die Farbe wird leider nicht rausgeschrieben bei Google und andere Möglichkeiten zur individiuellen Kennzeichnung eines Ereignisses gibt es nicht.
    Das habe ich doch schon alles geprüft beom Programmieren des iCal-Treibers.

    Einen Kommentar schreiben:


  • Tom Bombadil
    antwortet
    Ja, hab heute ein bisschen u.a. im Google herumprobiert und herausgefunden, dass ich dort unter 'categories' immer nur einen festen Link zurückbekomme. Dann können dort dynamisch Farben pro Ereignis definiert werden, aber die werden wohl nicht exportiert. Unschön, das ganze ...

    /tom

    Einen Kommentar schreiben:


  • smai
    antwortet
    iCal kennt schon Kategorien, aber nicht jeder Provider bzw. jede Kalendersoftware muss jedes in iCal definierte Feld füllen.

    Einen Kommentar schreiben:


  • Tom Bombadil
    antwortet
    Ooops, das mag ein Fehler von mir sein. Da die Implementierung für nextCloud / ownCloud auf der für calDav basiert, war ich davon ausgegangen, dass die Datensätze ähnlich aufgebaut sind:

    Code:
    BEGIN:VCALENDAR
    VERSION:2.0
    PRODID: OwnCloud Calendar
    BEGIN:VEVENT
    CREATED;VALUE=DATE-TIME:20161019T122412Z
    UID:da1eb17350
    LAST-MODIFIED;VALUE=DATE-TIME:20161019T122528Z
    DTSTAMP;VALUE=DATE-TIME:20161019T122528Z
    SUMMARY:Blaue Tonne
    DTSTART;VALUE=DATE:20161017
    DTEND;VALUE=DATE:20161018
    [COLOR=#FF0000]CATEGORIES:Müll[/COLOR]
    RRULE:FREQ=WEEKLY;INTERVAL=2
    CLASS:PUBLIC
    DESCRIPTION:@icon icons/ws/message_garbage.svg\n@color #0000ff
    END:VEVENT
    END:VCALENDAR
    Dass der Kalendername nicht drin steht, hatte ich ja schon geschrieben - das war mir also klar. Aber dass sowohl Google als auch iCal keine Kategorien kennen, darauf bin ich nicht mal ansatzweise gekommen (ich nutze selbst weder das eine noch das andere) ...

    /tom

    Einen Kommentar schreiben:


  • smai
    antwortet
    Von welchem Provider sprichst du Tom? Zumindest bei Google gibt es doch gar keine Kategorien und weder der Kalendername noch die Farbe sind in der ics-Datei vorhanden.

    Einen Kommentar schreiben:


  • Tom Bombadil
    antwortet
    Ich hab mir beim Programmieren des kleinen 'Müll-Widgets' neulich mal den Code von iCal und CalDav angeschaut - ich glaube, dass sich mit einem Dreizeiler zusätzlich auch die Kategorien der Termine übergeben lassen, die werden im Moment einfach nur ignoriert. Darüber könnte man sehr gut Termine filtern und zumindest ansatzweise auch die 'Farbproblematik' lösen. Bin nur noch nicht dazu gekommen, es auszuprobieren.

    Wahrscheinlich geht genauso das Auslesen der Farbe und vielleicht sogar des Icons, welche im Kalender gesetzt sind - danach habe ich aber nicht explizit geschaut.

    Schwieriger sah mir nur die Übergabe des Kalendernamens aus, in dem der einzelne Termin enthalten ist - da hab ich noch keine Idee ...

    /tom

    Einen Kommentar schreiben:


  • smai
    antwortet
    Die Farbe und das Icin gehört meines Erachtens schon eher zum Termin selbst.
    Brauchst du denn wirklich für jeden Termin eine eigene Farbe?

    Wenn du magst, kannst du dies gerne als Issue erfassen, wird aber zumindest bei mir keine hohe Priorität haben. Aber vielleicht setzt es ja jemand anders um.

    Einen Kommentar schreiben:


  • Yfkt5A
    antwortet
    Zitat von smai Beitrag anzeigen
    Beim iCal-Treiber in der aktuellen Version leider nicht.
    Da dies aber durchaus Sinn machen würde, habe ich dazu den Issue #113 erfasst.
    Das hört sich gut an, wäre toll wenn dies bald möglich ist.



    Zitat von smai Beitrag anzeigen
    Zu Farben und Icons:
    Zitat von CarGo Beitrag anzeigen
    Hallo,

    sollte eigentlich kein Problem sein, das wird gesteuert durch den Text im Termin.
    ...
    Irgendwie finde ich das nicht so glücklich das immer in die Termine schreiben zu müssen. Bei den Tonnen ist das ja noch zu verkraften, das ist ein sich wiederholender Termin den ich einmal im Jahr am PC eintrage...
    aber wenn ich beim Zahnarzt am Tresen einen Termin vereinbare oder mit Freunden am Stammtisch sitze und einen Ausflug eintrage, dann kann man doch nicht immer diesen "Code" eintragen.
    Wäre es nicht möglich das mit Suchbegriffen in einer Datei zu lösen... z.B. so:
    Code:
    [Kalender]
        [Papiertonne]
            Betreff = Papiertonne
            icon = message_garbage.svg
            color = #04B404
    
        [Autowerkstatt]
            Ort = Volkswagen
            icon = message_service.svg
            color = #FFFFFF

    Einen Kommentar schreiben:


  • schuma
    antwortet
    OK, vielen Dank.
    Da es im Verzeichnis ws ja nur noch svg's gibt dann:

    @icon icons/ws/message_garbage.svg
    @color #009900

    ???

    Wenn wir dann alles zusammen auf dem neuesten Stand haben, werde ich mal eine Anleitung für alle drei Methoden schreiben.

    Grüße, Marc

    Einen Kommentar schreiben:


  • smai
    antwortet
    Zu Farben und Icons:

    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
    [USER="38286"]ICON[/USER] icons/ws/message_garbage.png
    @color #333399
    
    braune tonne
    [USER="38286"]ICON[/USER] icons/ws/message_garbage.png
    @color #664422
    
    Restmüll - schwarze Tonne
    [USER="38286"]ICON[/USER] icons/ws/message_garbage.png
    @color #555555
    
    Gelbe Tonne
    [USER="38286"]ICON[/USER] icons/ws/message_garbage.png
    @color #666600
    
    Biotonne
    [USER="38286"]ICON[/USER] icons/ws/message_garbage.png
    @color #009900

    Viele Grüße - Carsten

    Einen Kommentar schreiben:


  • schuma
    antwortet
    Also...
    ICal funktioniert nun ;-) Bemerken sollte man hier noch, dass in den anderen Feldern (Benutzer, Passwort, Name) nichts drinne stehen darf.
    Danach hat es nun auch bei mir funktioniert.

    ICloud funktioniert einfach nicht. Ich bekomme da keine Termine angezeigt. Obwohl SH anscheinend den Kalender findet. Wenn ich einen anderen Namen angebe, bekomme ich eine Fehlermeldung "Kalender nicht gefunden".

    Noch eine Frage...
    Wie bekomme ich die Kalendereinträge farbig oder mit einem Icon angezeigt?

    Marc

    Einen Kommentar schreiben:

Lädt...
X