2

あるサーバーから別のサーバーにcaldavエントリを確実に転送する方法を探しています---imapcopyできることの並べ替え。Python caldav 実装を使用しようとしていますが、あるサーバーから別のサーバーに移行する方法を知るのに十分なほどプロトコルを理解していません。これを行う明白な方法はありますか?

4

1 に答える 1

3

このような移行を実行できる既製のツールはないと思いますが、Python と urllib2 に精通していれば、何かをハックするのはそれほど難しくないはずです。

カレンダーを 1 つだけ転送しますか、それともコンテンツを含むすべてのカレンダーを転送しますか? 関係するサーバーについて、より正確に言えますか? 共有カレンダーが含まれますか?

本当に難しいのは会議です。そのようなものを移行しますか? そのようなことが問題にならない場合は、比較的簡単です。

カレンダー1枚だけなら基本は簡単。CalDAV では、カレンダーは「iCalendar」リソースを含む WebDAV コレクションです。それらをそのまま取得して、別のサーバーに転送できます。カレンダーの URL に対して HTTP PROPFIND を実行するだけで、コレクション内に含まれるリソースの URL を特定できます。単純な HTTP GET を作成して iCalendar リソースを取得し、ターゲット サーバーのカレンダーに PUT するよりも。ここでは、CalDAV ライブラリを使用する必要さえありません (WebDAV ライブラリでさえ少しやり過ぎです。PROPFIND の XML を解析し、要求に urllib2 を使用するだけで済みます)。

カレンダー内のリソース URL (イベントと仕事) だけを取得するサンプル: curl --verbose -u "login:pwd" -X PROPFIND -H "Depth: 1" --data "<propfind xmlns='DAV:'><prop/></propfind>" https://p00-caldav.icloud.com/xxx/calendars/work/

ソース サーバーがサポートしている場合 (共通)、multiget REPORT を使用して効率を高めることができます。ターゲット サーバーがサポートしている場合 (まれに)、bulk-POST を使用して効率を上げることができます。一部のサーバー (iCloud など) は、添付ファイルを別の場所に保存します。これには追加の作業が必要になる場合があります。

カレンダーも転送したい場合は、それほど難しくはありませんが、より多くの WebDAV が必要になります。カレンダーのホーム (すべてのカレンダーを含む URL) で PROPFIND を実行して、カレンダーのすべてのプロパティ (名前、色) を取得する必要があります。CalDAV サーバーのホームには、非カレンダーを含めることができます。これは、DAV:resourcetype プロパティを調べることで確認できます。カレンダーの場合は、MKCOL または MKCALENDAR を使用してターゲット サーバー上にカレンダーを作成できます (これらのメソッドは、転送するプロパティを取得できます)。

すべてのカレンダーの名前、色などを取得するサンプル: curl --verbose -u "login:pwd" -X PROPFIND -H "Depth: 1" --data "<propfind xmlns='DAV:'><allprop/></propfind>" https://p00-caldav.icloud.com/xxx/calendars/

于 2014-02-23T13:53:34.533 に答える