2017-01-01 4 views
0

PythonとcaldavライブラリでNextcloudでホストされている私のカレンダーのすべてのイベントにアクセスしようとしています。このコードで :Python Caldav、すべてのカレンダーにNoneという名前があります

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') 

注:私は投稿の最初のコードですべてのカレンダーやイベントにアクセスできますが、すべての名前がURLが正しい場合でも、「なし」ではありません。

+0

カレンダー名へのアクセスに使用するコードを表示してください(これは[なし]です)。 – hnh

答えて

0

2番目のスニペットでは、最初にアカウント(.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()]) 

これが役に立ちます。

関連する問題