Python Caldav,所有日历都没有名称

时间:2017-01-01 13:29:34

标签: python calendar caldav nextcloud

我尝试使用python和caldav库访问我在Nextcloud上托管的日历的所有事件。 使用此代码:

client = caldav.DAVClient(url) #like "https://..../nextcloud/remote.php/dav/calendars
principal = client.principal()
calendars = principal.calendars()

我可以访问我的所有日​​历并对其进行迭代。

我如何只能阅读特定日历,名称为" calendar_name"?在这种情况下,即使我指定日历名称,我也会收到所有日历:

client = caldav.DAVClient(url) #like "https://..../nextcloud/remote.php/dav/calendars/user/calendar_name
principal = client.principal()
calendars = principal.calendars()

如果我用calendar_name更改最后一行代码,我会得到一个空数组。

calendar = principal.calendar('calendar_name')

注意:我可以使用发布的第一个代码访问所有日历和事件,但所有名称都是"无",即使网址是正确的。

1 个答案:

答案 0 :(得分:0)

第二个代码段仍然为您提供所有日历,因为您首先获取了该帐户(.principal()),然后列出了该帐户的所有日历(principal.calendars())。

第三个代码段可能不起作用,因为日历的名称(显示名称属性,而不是URL路径组件)很可能不是calendar_name,而是类似{ {1}}。从理论上讲,它甚至可能是空的。

要使用其网址访问单个日历,这可能有效,请勿尝试:

Calendar

虽然出于各种原因做这样的事情可能会更好:

client   = caldav.DAVClient(url)
calendar = caldav.Calendar(client=client, 
             url="/nextcloud/remote.php/dav/calendars/user/calendar_name")

要解决您的实际问题,您需要添加更多信息。如果您想要日历的(相对或绝对) URL ,请使用以下内容:

client    = caldav.DAVClient(url)
principal = client.principal()
calendars = principal.calendars()
calendar  = any(c for c in calendars if c.url == your url)

如果您想显式检索日历显示名称,这可能有效:

print calendar.url

希望这有帮助。