Google CalendarのイベントデータをBusyBirdにインポートする

Google Calendar APIを使ってイベントデータを取得し、それをBusyBird statusに変換するスクリプトを書いた。



基本的に http://qiita.com/mechamogera/items/bf2ed20e332dc31d2352 をちょっと改造して作った。下準備として、以下が必要になる。

  • google-api-client RubyGemのインストール
  • https://cloud.google.com/console にてCalendar APIを有効にし、サービスアカウントをセットアップして秘密キーファイルをダウンロードする。

詳しくは上述のリンク先の記事を参照。

下準備ができたらあとはこんな感じで使う。

$ ruby gcal2busybird.rb \
  --service-key-file 秘密キーのファイル名 \
  --service-password 秘密キーのパスワード \
  --service-email サービスアカウントのメールアドレス \
  --calendar-id 取得するカレンダーID \
  | curl -d @- http://localhost:5000/timelines/home/statuses.json

Google Calendar APIはv2では認証無しで使えたし、Atomフィードで出力するオプションも使えたので、BusyBird::Input::Feedでサクっとインポートすることができた。しかしAPI v2は今年11月に完全終了し、以降はv3を使わないといけないらしい。

API v3はOAuth 2などを使った認証が必須であり、メッセージフォーマットもどうやらJSON一択のようだ。

認証が必須なのは面倒ではあるが、まあしょうがないという気もする。しかしメッセージフォーマットがJSON一択なのはいかがなものか。

本腰入れてAPIを使うプログラムを書く場合はJSONの方が何かとやりやすいのはまあ、そうだと思う。が、今回のようにちょっと既存のアプリにデータを取り込みたい場合にも、データ構造の変換コードを書かないといけなくなる。やってみるとこれは結構ダルい。

それならばfull-featureなデータ構造はJSONで配信してもらって、そのサブセットをAtomなどの標準化された形式でよしなに配信するオプションを提供してくれればいいのにと思う。しかし世の中の流れはそうなってはいないのかもしれない。そういえばTwitterもずいぶん前にatom形式の配信オプションを廃止しているし。

まあBusyBirdも今のところAtom形式の配信をサポートしてないから偉そうなことは言えないのだけど。