使用icalendar和Python解析iCal订阅

16

我正在尝试使用Python中的icalendar库解析包含多个事件的RSS源。

尽管'summary'、'description'等功能正常,但对于'dtstart'和'dtend'它却返回了这样的结果: icalendar.prop.vDDDTypes对象位于0x101be62d0

def calTest():
    req = urllib2.Request('https://www.google.com/calendar/ical/XXXXXXXXXX/basic.ics')
    response = urllib2.urlopen(req)
    data = response.read()

    cal = Calendar.from_ical(data)

    for event in cal.walk('vevent'):

        date = event.get('dtstart')
        summery = event.get('summary')

        print str(date)
        print str(summery)

    return

我做错了什么?使用vobject不是选项,必须使用icalendar库。非常感谢对Python新手的任何帮助。


1
那么可能是一个 icalendar.prop.vDDDTypes 对象。问题出在哪里? - Bibhas Debnath
1
spelling mistake, summery - dalore
3个回答

38

表示dtstartdtend的对象具有一个属性dt,其中包含一个标准的datetime.datetime对象。

start = event.get('dtstart')
print(start.dt)

1
真令人惊讶,直到现在还没有人点赞这个答案 :-) - mastazi
这个信息在文档中哪里可以找到?!在我找到这个答案之前,这让我疯狂了! - benzkji
1
@benzkji 很可能我是直接从源代码获取的 - t-8ch

5
稍微有点晚,但如果这有帮助的话: API已经更新(我重复了同样的错误//复制另一个stackoverflow帖子)。您需要使用decoded()方法而不是get()方法。 您可以在此处找到最新的icalendar API参考:http://icalendar.readthedocs.io/en/latest/api.html 将您的get调用替换为decoded:
date = event.decoded('dtstart')
summery = event.decoded('summary')

它应该可以工作。


它不工作,返回: “'Event'对象没有属性'decode'” - user912830823
@user912830823,我猜你在离开这个评论5年后已经解决了这个问题,但是你的代码中有一个拼写错误。应该是decoded而不是decode - ThePuzzleMaster

-4
从您应该已经阅读的官方文档中,您可以像这样访问dtstartdtend的值-

date = event.get('dtstart')
print date.to_ical()

它们是icalendar.prop.vDDDTypes对象。它们既不是字符串,也没有直观的__str__()方法,因此你得到了那个输出。

请阅读文档。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接