2017-01-01 21 views
0

我試圖訪問我的日曆的所有事件,託管在Nextcloud上,用python和caldav庫。 有了這個代碼:Python Caldav,所有日曆都沒有名稱

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 = principal.calendar('calendar_name') 

注:我可以訪問所有的日曆和事件與公佈的第一個代碼,但所有的名字都是「無」,即使地址是正確的。

+0

請顯示您用來訪問日曆名稱的代碼(然後是None)。 – hnh

回答

0

第二個片段仍會爲您提供所有日曆,因爲您首先獲取該帳戶(.principal()),然後列出該帳戶擁有的所有日曆(principal.calendars())。

第三個片段可能不起作用,因爲名稱的日曆(在顯示名稱財產,而不是URL路徑組件)很可能不是calendar_name但類似Calendar。理論上它甚至可能是空的。

要使用它的URL,這可能工作訪問一個日曆,沒有嘗試:

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

雖然它可能是更好的因各種原因做這樣的事情:

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

要解決您的實際問題,您需要添加更多信息。如果你想要的(相對或絕對)URL的日曆,使用這樣的:

print calendar.url 

如果你想明確地檢索日曆顯示名稱,這可能工作:

print calendar.get_properties([dav.DisplayName()]) 

希望這會有所幫助。