Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - iCal-Plugin: Umgang mit UIDs > 75 Zeichen

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

    - √ - iCal-Plugin: Umgang mit UIDs > 75 Zeichen

    Hallo,

    wenn man einen google-calender importieren möchte, gibt es Probleme, wenn die Zeile der UID > 75 Zeichen ist. Das wäre insofern kein Problem, wenn der google calender nicht die Eigenart hätte, die UIDs warum auch immer 113 Zeichen lang zu machen und die ersten 100 Zeichen oder so sind wohl irgendwie mit ein verschlüsselter Timestamp. d.h. wenn ich mehrere Einträge gleichzeitig eintrage, erhalten diese nur nach den ersten 75 Zeichen unterschiedliche Zeichen:

    Code:
    BEGIN:VEVENT
    DTSTART:20150305T180000Z
    DTEND:20150305T193000Z
    DTSTAMP:20150129T092543Z
    [COLOR=Red]UID:040000008200E00074C5B7101A82E0080000000075EE3E3665AF8E45BC901D10B667DF9
     A10000000[B]6D8653C54315B1488FE2C0629EB18213[/B]
    [/COLOR]CLASS:PUBLIC
    CREATED:20150115T060309Z
    (...)
    BEGIN:VEVENT
    DTSTART:20150309T180000Z
    DTEND:20150309T193000Z
    DTSTAMP:20150129T092543Z
    [COLOR=Red]UID:040000008200E00074C5B7101A82E0080000000075EE3E3665AF8E45BC901D10B667DF9
     A10000000[B]A28524AAC5125042A0C21BC417DBE688[/B]
    [/COLOR]CLASS:PUBLIC
    CREATED:20150115T060052Z
    (...)
    wie zu sehen ist, sind nur die letzten Zeichenfolgen unterschiedlich - es handelt sich aber um unterschiedliche Termine und unterschiedliche UIDs.

    lt. Definition verhält sich google hier Standard-konform:
    Each line is terminated by CR+LF (in hexadecimal: 0D0A). Lines should be limited to 75 octets (not characters) long. Where a data item is too long to fit on a single line it can be continued on following lines by starting the continuation lines with a space character (in hex: 20) or a tab character (in hex: 09).
    Meine python-Skills sind hier etwas limitiert, befürchte ich, um selbst einen Patch des imports schreiben zu können.
    Meine Beobachtung ist nämlich, dass das iCal-Plugin jeweils zeilenweise einliest und daher die zweite Zeile der UID verschluckt. Das taucht auch auf, wenn z.B. eine "Summary" oder eine "Description" länger als 75 Zeichen ist, liest das iCal-Plugin nur die Zeile aus und ignoriert die nächste Zeile.

    d.h. das Einlesen müsste so umgeschrieben werden, dass nicht zeilenweise eingelesen wird, sondern eben entsprechend bis zur nächsten Zeile, die nicht mit einem Leerzeichen beginnt.

    ...und da ist bei mir dann leider vorbei mit meinen Skills...

    #2
    Hallo,

    ich habe mal schnell reingesehen. Liegt an Zeile 122 im Plugin (develop branch). Hier wird das File zeilenweise gelesen. Es gibt kein Handling, das Zeilenübergreifend arbeitet. Hab aber im Moment keine Zeit es einzubauen, vielleicht heute Abend oder später. Gerne auch jemand anders.

    Grüße

    Michel

    Kommentar


      #3
      Zitat von Orion Beitrag anzeigen
      Hallo,

      ich habe mal schnell reingesehen. Liegt an Zeile 122 im Plugin (develop branch). Hier wird das File zeilenweise gelesen. Es gibt kein Handling, das Zeilenübergreifend arbeitet. Hab aber im Moment keine Zeit es einzubauen, vielleicht heute Abend oder später. Gerne auch jemand anders.

      Grüße

      Michel
      wow! Das ging ja fix! Aber hej, ich hab auch nicht erwartet, dass das in 5min. und sofort erledigt wird! Machen wir ja alle in der Freizeit... später ist auch ok!

      Kommentar


        #4
        ...probiere mal in zeile 122

        Code:
        for line in ical.splitlines():
        durch
        Code:
        for line in ical.replace('\r\n ', '').splitlines():
        zu ersetzen ob es dann geht

        Michel

        Kommentar


          #5
          Zitat von Orion Beitrag anzeigen
          ...probiere mal in zeile 122

          Code:
          for line in ical.splitlines():
          durch
          Code:
          for line in ical.replace('\r\n ', '').splitlines():
          zu ersetzen ob es dann geht

          Michel
          klappt leider nicht, da durch die splitlines eh nur zeilenweise eingelesen wird. Vielleicht müssten nach Einlesen der ICS erstmal alle "\r\n " durch " " ersetzt werden - dann müsste die splitlines dann problemlos klappen?

          hier die infos nach den Anpassungen __init__.py

          smarthome.log
          Code:
          2015-01-29 21:25:32,466 WARNING  familien     iCal: problem parsing https://www.google.com/calendar/ical/XXX%40group.calendar.google.com/private-XXX/basic.ics duplicate UID: 040000008200E00074C5B7101A82E0080000000075EE3E3665AF8E45BC901D10B667DF9 -- __init__.py:_parse_ical:145
          2015-01-29 21:25:32,476 WARNING  familien     iCal: problem parsing https://www.google.com/calendar/ical/XXX%40group.calendar.google.com/private-XXX/basic.ics duplicate UID: 040000008200E00074C5B7101A82E0080000000075EE3E3665AF8E45BC901D10B667DF9 -- __init__.py:_parse_ical:145
          2015-01-29 21:25:32,509 ERROR    familien     Logic: familien, File: /usr/smarthome/plugins/ical/__init__.py, Line: 192, Method: _parse_rrule, Exception: invalid literal for int() with base 10: 'MO,' -- scheduler.py:_task:334
          Traceback (most recent call last):
            File "/usr/smarthome/lib/scheduler.py", line 327, in _task
              exec(obj.bytecode)
            File "/usr/smarthome/logics/google-familienkalender.py", line 27, in <module>
              events = sh.ical('https://www.google.com/calendar/ical/XXX%40group.calendar.google.com/private-XXX/basic.ics',delta=2)
            File "/usr/smarthome/plugins/ical/__init__.py", line 73, in __call__
              events = self._parse_ical(ical, ics)
            File "/usr/smarthome/plugins/ical/__init__.py", line 139, in _parse_ical
              event['RRULE'] = self._parse_rrule(event, tzinfo)
            File "/usr/smarthome/plugins/ical/__init__.py", line 192, in _parse_rrule
              n = int(day[0:-2])
          ValueError: invalid literal for int() with base 10: 'MO,'
          die Zeile im iCal
          Code:
          (...)
          BEGIN:VEVENT
          DTSTART:20150305T180000Z
          DTEND:20150305T193000Z
          DTSTAMP:20150129T203248Z
          UID:040000008200E00074C5B7101A82E0080000000075EE3E3665AF8E45BC901D10B667DF9
           A100000006D8653C54315B1488FE2C0629EB18213
          CLASS:PUBLIC
          CREATED:20150115T060309Z
          (...)

          Kommentar


            #6
            Hallo,

            Sorry, ich muss das mal mit einer realen Datei ausprobieren. Ich hatte nur die Fingerübung mit einem Teststring gemacht. Die Reihenfolge ist schon richtig, erst wird ersetzt, dann auseinandergenommen. Wahrscheinlich passt das aber an anderer Stelle im ICAL nicht und verhaut dort die Umsetzung. Aber es wird in diese Richtung wohl gehen.

            Mehr dann am Wochenende,

            Michel

            Kommentar


              #7
              Zitat von Orion Beitrag anzeigen
              Hallo,

              Sorry, ich muss das mal mit einer realen Datei ausprobieren. Ich hatte nur die Fingerübung mit einem Teststring gemacht. Die Reihenfolge ist schon richtig, erst wird ersetzt, dann auseinandergenommen. Wahrscheinlich passt das aber an anderer Stelle im ICAL nicht und verhaut dort die Umsetzung. Aber es wird in diese Richtung wohl gehen.

              Mehr dann am Wochenende,

              Michel
              Kein Stress! Kriegen wir schon hin! Ich kann Dir gern auch ganze Events aus der ICS geben, wenn Du was brauchst!?

              Kommentar


                #8
                Nein, die Daten brauche ich nicht, muss mich nur an meine Entwicklungsumgebung setzen, da habe ich das Plugin ja auch drin. Nur ohne ist halt alles Theorie...

                Kommentar


                  #9
                  Doch, ich brauche sie, ich bekomme bei meinen Kalendern keine grossen Zeilenlängen ! Ich brauchen eine ICS Datei mit dem Problem !

                  Michel

                  Kommentar


                    #10
                    Hallo,

                    ich denke man muss in etwa so etwas machen
                    s/$^ +//g
                    Allerdings im Python vor dem splitlines.

                    Bis bald

                    Marcus

                    Kommentar


                      #11
                      Zitat von Orion Beitrag anzeigen
                      Doch, ich brauche sie, ich bekomme bei meinen Kalendern keine grossen Zeilenlängen ! Ich brauchen eine ICS Datei mit dem Problem !

                      Michel
                      Sorry, ich habe wohl die Benachrichtigungsmail überlesen.
                      Hier mal der Inhalt einer ICS-Datei mit einem "guten" Eintrag und drei "doppelten" Einträgen, bei denen eben die UIDs über zwei Zeilen gehen.
                      Zu guter Letzt hab ich dann noch beim dritten doppelten Eintrag eine etwas längere Beschreibung eingetragen, die dann ebenfalls über mehrere Zeilen geht.

                      Code:
                      BEGIN:VCALENDAR
                      PRODID:-//Google Inc//Google Calendar 70.9054//EN
                      VERSION:2.0
                      CALSCALE:GREGORIAN
                      METHOD:PUBLISH
                      X-WR-CALNAME:Test
                      X-WR-TIMEZONE:Europe/Berlin
                      X-WR-CALDESC:Kalender von Test
                      BEGIN:VTIMEZONE
                      TZID:Europe/Berlin
                      X-LIC-LOCATION:Europe/Berlin
                      BEGIN:DAYLIGHT
                      TZOFFSETFROM:+0100
                      TZOFFSETTO:+0200
                      TZNAME:CEST
                      DTSTART:19700329T020000
                      RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
                      END:DAYLIGHT
                      BEGIN:STANDARD
                      TZOFFSETFROM:+0200
                      TZOFFSETTO:+0100
                      TZNAME:CET
                      DTSTART:19701025T030000
                      RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
                      END:STANDARD
                      END:VTIMEZONE
                      BEGIN:VTIMEZONE
                      TZID:Africa/Ceuta
                      X-LIC-LOCATION:Africa/Ceuta
                      BEGIN:DAYLIGHT
                      TZOFFSETFROM:+0100
                      TZOFFSETTO:+0200
                      TZNAME:CEST
                      DTSTART:19700329T020000
                      RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
                      END:DAYLIGHT
                      BEGIN:STANDARD
                      TZOFFSETFROM:+0200
                      TZOFFSETTO:+0100
                      TZNAME:CET
                      DTSTART:19701025T030000
                      RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
                      END:STANDARD
                      END:VTIMEZONE
                      BEGIN:VTIMEZONE
                      TZID:Europe/Amsterdam
                      X-LIC-LOCATION:Europe/Amsterdam
                      BEGIN:DAYLIGHT
                      TZOFFSETFROM:+0100
                      TZOFFSETTO:+0200
                      TZNAME:CEST
                      DTSTART:19700329T020000
                      RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
                      END:DAYLIGHT
                      BEGIN:STANDARD
                      TZOFFSETFROM:+0200
                      TZOFFSETTO:+0100
                      TZNAME:CET
                      DTSTART:19701025T030000
                      RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
                      END:STANDARD
                      END:VTIMEZONE
                      BEGIN:VEVENT
                      DTSTART:20150215T091500Z
                      DTEND:20150215T101500Z
                      DTSTAMP:20150213T062248Z
                      UID:19g80q92fhgfdla1b0hqo1qe7s@google.com
                      CREATED:20150128T114904Z
                      DESCRIPTION:
                      LAST-MODIFIED:20150128T114923Z
                      LOCATION:Testlocation 1
                      SEQUENCE:1
                      STATUS:CONFIRMED
                      SUMMARY:einzelnes Ereignis
                      TRANSP:OPAQUE
                      END:VEVENT
                      BEGIN:VEVENT
                      DTSTART:20150317T163000Z
                      DTEND:20150317T180000Z
                      DTSTAMP:20150213T062248Z
                      UID:040000008200E00074C5B7101A82E0080000000075EE3E3665AF8E45BC901D10B667DF9
                       A100000000D12C64D9266DB408345954BCAE1D376
                      CLASS:PUBLIC
                      CREATED:20150115T060533Z
                      DESCRIPTION:
                      LAST-MODIFIED:20150115T060533Z
                      LOCATION:Testlocation 2
                      SEQUENCE:0
                      STATUS:CONFIRMED
                      SUMMARY:doppeltes Ereignis 2
                      TRANSP:OPAQUE
                      X-MICROSOFT-CDO-ALLDAYEVENT:FALSE
                      X-MICROSOFT-DISALLOW-COUNTER:TRUE
                      END:VEVENT
                      BEGIN:VEVENT
                      DTSTART:20150305T180000Z
                      DTEND:20150305T193000Z
                      DTSTAMP:20150213T062248Z
                      UID:040000008200E00074C5B7101A82E0080000000075EE3E3665AF8E45BC901D10B667DF9
                       A100000006D8653C54315B1488FE2C0629EB18213
                      CLASS:PUBLIC
                      CREATED:20150115T060309Z
                      DESCRIPTION:
                      LAST-MODIFIED:20150115T060309Z
                      LOCATION:Testlocation 3
                      SEQUENCE:0
                      STATUS:CONFIRMED
                      SUMMARY:doppeltes Ereignis 3
                      TRANSP:OPAQUE
                      X-MICROSOFT-CDO-ALLDAYEVENT:FALSE
                      X-MICROSOFT-DISALLOW-COUNTER:TRUE
                      END:VEVENT
                      BEGIN:VEVENT
                      DTSTART:20150309T180000Z
                      DTEND:20150309T193000Z
                      DTSTAMP:20150213T062248Z
                      UID:040000008200E00074C5B7101A82E0080000000075EE3E3665AF8E45BC901D10B667DF9
                       A10000000A28524AAC5125042A0C21BC417DBE688
                      CLASS:PUBLIC
                      CREATED:20150115T060052Z
                      DESCRIPTION:Each line is terminated by CR+LF (in hexadecimal: 0D0A). Lines 
                       should be limited to 75 octets (not characters) long. Where a data item is 
                       too long to fit on a single line it can be continued on following lines by 
                       starting the continuation lines with a space character (in hex: 20) or a ta
                       b character (in hex: 09). 
                      LAST-MODIFIED:20150115T060053Z
                      LOCATION:Testlocation 3
                      SEQUENCE:0
                      STATUS:CONFIRMED
                      SUMMARY:doppeltes Ereignis 3
                      TRANSP:OPAQUE
                      X-MICROSOFT-CDO-ALLDAYEVENT:FALSE
                      X-MICROSOFT-DISALLOW-COUNTER:TRUE
                      END:VEVENT
                      END:VCALENDAR

                      Kommentar


                        #12
                        Hallo,

                        ich schaue mir das am Wochenende mal an.

                        Michel

                        Kommentar


                          #13
                          Ich habe fürs erste mal das gemacht:

                          vor ical.splitlines():
                          Code:
                          [B][COLOR=SeaGreen]Zeile 122: [/COLOR][/B]       ical = ical.replace('\r\n ', '')
                          ob das eleganter geht, weiß ich nicht! *G*

                          Was mir aber jetzt noch fehlt: das Datum-Objekt kommt in dieser Form aus dem iCal:
                          • 2015-02-13 15:00:00+01:00
                            (da Winterzeit)

                          ich möchte das aber weiterverwenden und brauche es so:
                          • 2015-02-13 16:00:00

                          ich hab mir zum Date-Objekt jetzt schonmal alles zusammengelesen, bekomme aber das doofe Offset nicht reingerechnet. Gibts da ne einfache Anweisung für?

                          Kommentar


                            #14
                            Hallo,

                            Super, dass es geklappt hat. ich hätte es auch so versucht.
                            Wegen der Zeitformatierung würde ich einen neuen Thread aufmachen, das hat nicht unbedingt was mit ICS zu tun. Das erhöht die Chance, dass auch andere drauf schauen.

                            Michel

                            Kommentar


                              #15
                              Zitat von Orion Beitrag anzeigen
                              Hallo,

                              Super, dass es geklappt hat. ich hätte es auch so versucht.
                              Wegen der Zeitformatierung würde ich einen neuen Thread aufmachen, das hat nicht unbedingt was mit ICS zu tun. Das erhöht die Chance, dass auch andere drauf schauen.

                              Michel
                              Danke für Deine Hilfe - auch wenn ichs letztlich selber geschafft habe!
                              und Du hast Recht, ich hab mal zwei Folge-Threads eröffnet.

                              Eine Frage trotzdem noch hier: Hast Du (oder jemand anderes?) es geschafft in die .ics-Datei von google die Reminder zu packen? Meine Idee ist nämlich, im google calender die Vorlaufzeit für eine Aktion über den reminder variabel zu halten. Aber meine .ics-Dateien erhalten keinen VALARM-Block wie hier:
                              Code:
                              BEGIN:VALARM
                              ACTION:DISPLAY
                              DESCRIPTION:This is an event reminder
                              TRIGGER:-P0DT0H30M0S
                              END:VALARM

                              Kommentar

                              Lädt...
                              X