iCalendar形式のカレンダーデータをCalDAVを使ってカレンダーサーバに突っ込むスクリプトを書きました。
ical2caldav-0.01.zip - ogawa - ical2caldav-0.01.zip - Google Code
ogawa - Revision 607: /trunk/ical2caldav
このスクリプトを使うと、iCalendar形式での出力に対応したカレンダーアプリケーションのデータを、簡単にGoogle Calendarに代表されるCalDAV対応のカレンダーサーバに統合できます。
応用的な使い方としては、サイボウズオフィスのカレンダーをcybozu2icalを使ってスクレイプし、そのデータをical2caldavを使ってGoogle Calendarに統合することもできます。
また、メールに添付されてきたiCal/vCalファイルをカレンダーサーバに自動的に追加する目的でも使えるでしょう。さまざまなイベントデータをカレンダーサーバに集約しやすくする(カレンダーサーバをwhiteboard的に使えるようにする)ことで、CalDAVクライアント(iCalやMozilla Sunbird)の利便性がより向上することを期待しています。
さて使い方ですが、config.yamlをこんな感じで書きます。
caldav_url: https://www.google.com/calendar/dav/calid/events/ caldav_user: user@gmail.com caldav_passwd: password
calid (カレンダーID)の調べ方はCalDAV Developer's Guide - Google Calendar APIs and Tools - Google Codeの後半を読むと分かります。
あとはコマンドラインから以下のように呼び出します。
$ ical2caldav --filename /path/to/calendar.ics --conf /path/to/config.yaml
--filenameを省略すると標準入力から読み込みます。--confを省略するとスクリプトのあるディレクトリのconfig.yamlを読み込みます(多分)。以下は注意点。
- まだまだ不完全です。Google Calendarで試した限りでは、統合できるデータとそうでないデータがあります。
- iCalendarの各イベントにはUIDが必要です。UIDがないイベントは無視されます。
- 上のダイアグラムを見て「サイボウズのカレンダーがGoogle Calendarに同期できるんだー」と思ってしまう、うっかりさんのあなたは(きっと天使のような方なのでしょうが)思慮が足りません。きっと実生活で痛い目を見ます、もう見てるかも。例えば、サイボウズ上でイベントを削除してもGoogle Calendar上では反映されません。移動は反映されると思いますが。
Perlがどうもな、という人にはcurlコマンドをお勧めしておきます。
$ curl -H 'If-None-Match: *' -u user@gmail.com:passwd -X PUT -T calendar.ics \ https://www.google.com/calendar/dav/calid/events/
ただし、この方法ではイベントを一件のみ含むiCalendarファイルしか登録できません。これに対してical2caldavは、iCalendarファイルを読み込んでイベントごとにiCalendarファイルを生成し、それを順次CalDAVにPUTするという操作を内部的に実行してくれます。






