大群から取得した ical ファイルを修正しようとしています (定期的なイベントはインポート後 2 時間ずれています)。そこで、ical ファイルの「ORGANIZER」タグのウムラウトでチョークする次のスクリプトを作成しました。
#!/usr/bin/python
import sys
from icalendar import Calendar, Event
from datetime import timedelta
# reccurring events are off by two hours
reccurrence_timedelta=timedelta(hours=2)
# default
ical_file="test.ical"
# input file
try:
ical_file=sys.argv[1]
except IndexError:
pass
cal = Calendar.from_ical(open(ical_file,'rb').read())
for component in cal.walk():
if component.name == "VEVENT":
try:
component['rrule']
dtstart = component.decoded('dtstart')
dtend = component.decoded('dtend')
new_dtstart=dtstart + reccurrence_timedelta
new_dtend =dtend + reccurrence_timedelta
new_cal=Calendar()
new_cal.add('dtstart',new_dtstart)
new_cal.add('dtend',new_dtend)
component['dtstart']=new_cal['dtstart']
component['dtend']=new_cal['dtend']
except KeyError:
pass
new_ics_filename = "corrected_" + ical_file
newics_file = open(new_ics_filename, 'wb')
cal_as_ical=cal.to_ical()
newics_file.write(cal_as_ical)
newics_file.close()
utf-8 でエンコードされた ical ファイルは、
BEGIN:VCALENDAR
VERSION:2.0
X-WR-CALNAME:Kalender von acme\, admin
PRODID:-//The Horde Project//Horde_iCalendar Library\, Horde 3.3.5//EN
METHOD:PUBLISH
BEGIN:VEVENT
DTSTART:20130416T100000Z
DTEND:20130416T110000Z
DTSTAMP:20130416T092616Z
UID:20130416112341.10064jz0k4j7uem8@acmenet.de
CREATED:20130416T092341Z
LAST-MODIFIED:20130416T092341Z
SUMMARY:wichtiger termin 1
ORGANIZER;CN="acme, ädmin":mailto:adm-acme@mydomain.de
LOCATION:im büro
CLASS:PUBLIC
STATUS:CONFIRMED
TRANSP:OPAQUE
END:VEVENT
END:VCALENDAR
エラーは
No handlers could be found for logger "icalendar"
Traceback (most recent call last):
File "./fix_horde_ical.py", line 48, in <module>
cal_as_ical=cal.to_ical()
File "/usr/local/lib/python2.7/dist-packages/icalendar-3.3-py2.7.egg/icalendar /cal.py", line 485, in to_ical
return self.content_lines().to_ical()
File "/usr/local/lib/python2.7/dist-packages/icalendar-3.3-py2.7.egg/icalendar/cal.py", line 480, in content_lines
contentlines.append(Contentline.from_parts((name, params, values)))
File "/usr/local/lib/python2.7/dist-packages/icalendar-3.3-py2.7.egg/icalendar /parser.py", line 510, in from_parts
% (name, params, values))
ValueError: Property: 'ORGANIZER' Wrong values "Parameters({'CN': 'acme, \xc3\xa4dmin'})" or "'mailto:adm-acme@mydomain.de'"
「LOCATION」タグのウムラウトは問題ないようですが、「ORGANIZER」タグはウムラウトに問題があります。
エラーからわかるように、私は python 2.7 と icalendar 3.3 を使用しています。すべての ORGANIZER をループして非 ASCII 文字を削除する必要がありますか? それとも、より一般的で単純なアプローチがありますか?