Darwin Calendar Server で利用されている vobject 。 iCalendar, vCard, vCalendar をサポートしてます。 examples にサンプルコードがあります。
>>> import vobject
>>> import urllib
>>> ical = vobject.readOne(urllib.urlopen("http://casty.jp/ical/schedule/index.ics"))
>>> ical.vevent.dtstart.value
datetime.datetime(2007, 5, 1, 0, 0, tzinfo=<tzicalvtz 'Asia/Tokyo'>)
>>> ical.vevent.dtend.value
datetime.datetime(2007, 5, 1, 2, 0, tzinfo=<tzicalvtz 'Asia/Tokyo'>)
>>> ical.vevent.dtend.value - ical.vevent.dtstart.value
datetime.timedelta(0, 7200)
>>> ical.vevent.summary.value
u'\u30ad\u30f3\u30b0\u30b3\u30f3\u30b0\u897f\u91ce\u306e \u201c\u308d\u304f\u3067\u3082\u306a\u3044\u591c\u201d'
>>> len(ical.vevent_list)
177
>>> for i in ical.vevent_list[:5]: print i.summary.value
...
キングコング西野の “ろくでもない夜”
シンガーソングライター 夢紗
よしもと芸人イシバシハザマ石橋の イシバシセラピー
ひかり荘10日間住人【ネットに動画上げまくり企画】 女芸人このみ
エッグアイドル 加藤沙耶香
>>> print ical.vevent.description.value
吉本芸人キングコング西野とイシバシハザマがインターネット生番組に登場!http://casty.jp/common/redirect/?owner_id=188218
>>> ical.vevent.__dict__.keys()
['group', 'name', 'isNative', 'parentBehavior', 'behavior', 'useBegin', 'contents']
>>> ical.vevent.contents.keys()
[u'status', u'dtstamp', u'description', u'created', u'url', u'sequence', u'transp',
u'summary', u'last-modified', u'location', u'dtend', u'dtstart', u'class', u'uid']
>>> ical.vevent.dtstart.__dict__
{'singletonparams': [], 'group': None, 'name': u'DTSTART', 'isNative': True,
'value': datetime.datetime(2007, 5, 1, 0, 0, tzinfo=<tzicalvtz 'Asia/Tokyo'>),
'parentBehavior': <class 'vobject.icalendar.VEvent'>, 'params': {'X-VOBJ-ORIGINAL-TZID': u'Asia/Tokyo'},
'behavior': <class 'vobject.icalendar.DateOrDateTimeBehavior'>, 'lineNumber': 17, 'encoded': 0}
>>> ical.vevent.dtstart
<DTSTART{'X-VOBJ-ORIGINAL-TZID': u'Asia/Tokyo'}2007-05-01 00:00:00+09:00>
>>> ical.vevent.dtstart.params["X-VOBJ-ORIGINAL-TZID"]
u'Asia/Tokyo'
>>> ical.vevent.uid
<UID{}14997@casty.jp>
