我尝试使用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')
注意:我可以使用发布的第一个代码访问所有日历和事件,但所有名称都是"无",即使网址是正确的。
答案 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
希望这有帮助。