Ankündigung

Einklappen
Keine Ankündigung bisher.

iCal für Google Calendar

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    iCal für Google Calendar

    Hallo zusammen,

    habe mein iCal-Plugin so angepasst, dass es auch mit dem Google-Kalender funktioniert. Der Patch (gegen 0.9) ist minimal:

    Code:
    [FONT=Courier New]56c56
    <         if ics.startswith('http://'):
    ---
    >         if ics.startswith('http://') or ics.startswith('https://'):
    146c146,147
    <             else:
    ---
    >                 del event 
    >             elif 'event' in locals():[/FONT]
    Ich hätte noch urllib durch httplib ersetzen können, war aber ehrlich gesagt zu faul dazu.

    Zu beachten ist: Google liefert immer nur den gesamten Kalender aus, das kann ganz schön viel sein. Das Parsen dauert entsprechend, vor allem auf schwachbrüstiger Hardware. DIe Python-Implementierung insbesondere zu den RRULES (d.h. sich wiederholende Daten) ist wohl nicht gerade auf Effizienz getrimmt, an jedem Geburtstag rechnet mein Beaglebone erst mal 15 Sekunden rum.

    Max

    #2
    Hi Max,

    danke für das Feedback. Ich habe die Änderung fast so übernommen:

    Code:
    if ics.startswith('http'):
    sollte es auch tun.

    Zitat von l0wside Beitrag anzeigen
    Ich hätte noch urllib durch httplib ersetzen können, war aber ehrlich gesagt zu faul dazu.
    Das werde ich mir bei Gelegenheit mal ansehen.

    Edit: erledigt war nur eine Kleinigkeit

    Bis bald

    Marcus

    Kommentar


      #3
      Da hätte ich gleich mal zwei Nachfragen:

      Bei mir crashed das Plugin (nur google-calendar) sofort. Fix:

      __init__.py, Z. 109:

      Code:
      def _parse_ical(self, ical, ics):
      [COLOR="Red"]        event = {}[/COLOR]
              events = {}
              tzinfo = self._sh.tzinfo()
      [/CODE]

      und er jammert über eine duplicate UID, wobei ich mir nicht ganz sicher bin, dass das richtig ist: Es sind mehrere Einträge mit gleicher UID unterschiedlicher RECURRENCE-ID (die auch problemlos geparsed werden) und einer mit derselben UID, der keine RECURRENCE-ID, aber eine RRULE hat, der den Fehler ausspuckt. Eigentlich ist der trotzdem noch eindeutig.

      Gruss,

      der Jan
      KNX, DMX over E1.31, DALI, 1W, OpenHAB, MQTT

      Kommentar


        #4
        Zitat von JNK Beitrag anzeigen
        Da hätte ich gleich mal zwei Nachfragen:

        Bei mir crashed das Plugin (nur google-calendar) sofort. Fix:

        __init__.py, Z. 109:

        Code:
        def _parse_ical(self, ical, ics):
        [COLOR="Red"]        event = {}[/COLOR]
                events = {}
                tzinfo = self._sh.tzinfo()
        Vorsicht, dein Fix und mein Fix beißen sich gegenseitig. Du legst das nichtexistente Event einfach an (was m.E. zu Problemen führen kann, wenn du beim Parsen Elemente einliest, die nicht zu einem Event gehören). Ich frage ab, ob das Event existiert und kann so auch damit umgehen, wenn zwischen zwei Events noch weiterer Käse steht.
        Vielleicht ist es aber auch egal und ich denke zu kompliziert.

        Max

        Kommentar


          #5
          iCal für Google Calendar

          Falls Dein Fix in develop ist, fubktioniert er bei mir nicht. Kannst Du was zum zweiten Punkt sagen? Der scheint mir kritischer. Aber vielleicht sollte ich mich auch von google verabschieden.

          Gruß,

          der Jan
          KNX, DMX over E1.31, DALI, 1W, OpenHAB, MQTT

          Kommentar


            #6
            Zitat von JNK Beitrag anzeigen
            Falls Dein Fix in develop ist, fubktioniert er bei mir nicht. Kannst Du was zum zweiten Punkt sagen? Der scheint mir kritischer. Aber vielleicht sollte ich mich auch von google verabschieden.
            Ich habe jetzt nicht nachgeschaut, Marcus wollte ihn einbauen (siehe weiter oben im Thread).

            Alternative zu Google ist sicher auch nicht verkehrt, http://www.mykolab.com klingt gut (kostet aber Geld).

            Max

            Kommentar


              #7
              Hi,

              sorry den zweiten Part von Deinem Fix habe ich übersehen.

              Ist jetzt auch in develop. @JNK: bitte noch mal testen.

              Bis bald

              Marcus

              Kommentar


                #8
                @mknx: geht. Danke. Etwas eleganter als meine Variante.

                @all: Spricht etwas dagegen, das response dictionary zu erweitern? Ich hätte gerne noch ein paar mehr Infos. Auf jeden Fall das Enddatum, und weitere eventuell durch ein optionales Argument, in dem steht, was ich noch gerne wüsste, also dann quasi

                Code:
                sh.ical(url, days, offset, fields)
                wobei in fields dann z.B.

                {'LOCATION', 'STATUS'}

                steht und die response dann

                {date : [[Time start, summary, time end, location, status], ....], ...}

                wäre. Prinzipiell würde ich summary und end umdrehen, aber in dieser Variante würde es bestehenden Code nicht stören.

                Wofür ich das brauche: Ich habe ein SV-Widget geschrieben, dass einen JSON-String als Kalendar darstellt, wobei der String aus einem SH.py Item mit Typ str kommt. Eine Logik befüllt dann dieses Item aus mehreren Kalendern. Ist noch nicht ganz fertig, aber das wäre schon notwendig.

                Falls andere das auch gut finden, implementier ich das und mach nen Pull-Request, sonst frickel ich das nur für mich hin.

                Gruss,

                der Jan
                KNX, DMX over E1.31, DALI, 1W, OpenHAB, MQTT

                Kommentar


                  #9
                  Hi Jan,

                  Zitat von JNK Beitrag anzeigen
                  @mknx: geht. Danke.
                  der Dank gebührt Max für den Fix!

                  Bis bald

                  Marcus

                  Kommentar


                    #10
                    Ich habe für meine Änderungen einen Pull-Request gemacht. Mir sind da noch ein paar gelöschte Spaces mit durchgerutscht (cor den # noqa), weil ich die Änderungen von Hand eingepflegt hatte. Wenn Du das übernimmst, wären wir beim Kalendar schon einen Schritt weiter.

                    Gruss,

                    der Jan
                    KNX, DMX over E1.31, DALI, 1W, OpenHAB, MQTT

                    Kommentar


                      #11
                      Hi Jan,

                      die Änderungen sind soweit drin.
                      btw. Inline Kommentare müssen mit zwei Spaces vom Code getrennt werden.

                      Für was steht eret?
                      Code:
                      eret = [time, event['SUMMARY'], de]
                      Und wäre es hier nicht sinnvoller auf ein dict zu schwenken?

                      Bis bald

                      Marcus

                      Kommentar


                        #12
                        Zitat von mknx Beitrag anzeigen
                        Für was steht eret?
                        eret = event return

                        Code:
                        eret = [time, event['SUMMARY'], de]
                        Und wäre es hier nicht sinnvoller auf ein dict zu schwenken?
                        Ja, das wäre in der Tat deutlich sinnvoller, ich wollte nur bestehende Logiken nicht kaputtmachen.


                        Gruss,

                        der Jan
                        KNX, DMX over E1.31, DALI, 1W, OpenHAB, MQTT

                        Kommentar

                        Lädt...
                        X