さて、Google Calendarからイベントを自動で取ってきたいということがあったので、Rubyでやってみました。
(Calendarにかぎらず)Google各種サービスのAPIは公式のGemが公開されており、これを使うのが最も簡単です。
Ruby Quickstart | Google Calendar API | Google Developers
Class: Google::Apis::CalendarV3::Calendar — Documentation for google/google-api-ruby-client (master)
さらに、各ブログなどで既にGoogle Calendar API (v3)を使う方法についてはよくまとまっています。
RubyでGoogleカレンダーの情報を引き抜いてみる – 鶏頭のプログラム
rubyにてgoogleカレンダーの情報を取得する – Qiita
この辺りの情報は、基本的に自分の(非公開な)カレンダーを取ってくるものですが、今回僕がやりたいことは、「他人が公開カレンダーのイベントの情報を持ってくる」ことで、
例えば僕個人の予定でなく人力アジャイルイベントカレンダー powered by 名古屋アジャイル勉強会にあるイベントをAPI経由で取ってくる、というようなことをやろうとしています。
上記の参考資料はいずれも、自分のカレンダーにアクセスするためのもので、そのためにOAuthなどのプロセスが必要となっていますが、公開されているカレンダーのイベントを取得するのはもう少しシンプルです。
ということで、ここからはその方法。
APIキーの取得
まずはGoogle calendar APIを叩くためのAPIキーを取得します。
- https://cloud.google.com/console
- “Go to APIs overview”をクリックし、”API Manager”画面へ
- 左側の”Credentials”をクリック
- “Create Credentials”をクリックし、API Keyを選択
- ダイアログで”Server Key”を選択
- “Create server API key”画面の情報を適切に入力してCreateをクリック
このAPIキーは外部に漏らさないよう注意してください。
リポジトリに含めてはいけません。環境変数などを活用してください。
クライアントサイドにアプリとともに配布したりしてはいけません。
公開カレンダーのイベントはAPIキーだけで取ってこれます
公開カレンダーのイベントを取るために必要な認証関連の情報はAPIキーのみです。
これを使って、簡単にイベントを根こそぎ取ってくることができます。
他にもリンクやイベント作成者の情報などが取得できます。
日時について、日付情報と時刻情報がそれぞれあって、全日イベントの場合は初日と最終日の日付があり、開始終了時刻がある場合はその時刻があります(サンプルコード中の記述の通り)。
…などなど、細かなAPIの挙動はドキュメントをご参照ください。
ActiveSupportは、日付の範囲を指定するためにISO8601(RFC3339)形式の日付を表現する際に使っています。