Google Calendar APIを叩く

学科で #eeic_botthon という「Rubyを使って1日でツイッターのbotを作ろう!」イベントがあった。そこで僕もメイドさんbotを作りたくてGoogle Calendarと連携した予定管理ができるようにしたかったわけだ。

Rubyには一応 google_calendar というgemがあるのだが、これがいかんせん使いづらい。しかも、何故か学科PCの画面を閉じると動かなくなる。意味不明だ。そこで、google-api-clientという公式gemを使って実装しようということに。

これが全然資料がなくて、なにをやっていいかさっぱりわからず。結局仕組みを解読してなんとかがんばった。

まずはアプリケーションの登録。いろんな方法があるが、ここでは以下の様な方法を取る。

  1. Google Developer Consoleでプロジェクトを登録(すでにあればそれでもよい)。プロジェクト名はなんでも良い
  2. 左の「APIと認証」→「API」からGoogle CalendarのAPIを有効にする
  3. 左の「APIと認証」→「認証情報」から、「新しいクライアントIDを作成」→「インストールされているアプリケーション(その他)」
  4. 「JSONをダウンロード」を押してこれを client_secrets.json という名前で保存

これで事前準備は完了。このjsonはアプリケーション情報が入るので漏れないように。

次にリフレッシュトークンを得る。OAuthにはアクセストークンとリフレッシュトークンと認証コードの3種類があって、認証コードを通すとアクセストークンとリフレッシュトークンが得られて、リフレッシュトークンによってもアクセストークンが得られるという仕組み(たぶん)。アクセストークンは一時的(3600秒しかもたない)ので、リフレッシュトークンを覚えこませてアクセストークンを何度も発行して使う。

以下のRubyを、client_secrets.json と同じフォルダに適当なファイル名で保存する。redirect_uriは上で登録したアプリケーションと同じものを用いるが、おそらく上のコードと同じなはず。Google Calendar API以外のものを使いたいなら、scopeのところをいじると良い。

実行するとブラウザが開いて認証を求められる(ブラウザが開かなかったら標準出力されたURLをコピペして開く)。認証するとコードが与えられるので、それを端末にコピペしてEnter。するとリフレッシュトークンが吐出される仕組み。

なおリフレッシュトークンが漏れると何でもかんでもアクセスできるようになるので注意して管理すること。

あとはこれを使ってクライアントを作ってぽいぽいして〜という流れになるが、面倒くさいのでライブラリっぽいものを書いた。かなり適当なので、運用する際はちょいちょいいじりながら使うとよい。

クライアントの初期化は、CalendarClientのinitializeで行っている。application_nameに何を使えばいいのかずっと悩んでいたのだが、どうやらなんでもよいらしい。refresh_tokenにはリフレッシュトークンを、client_idとclient_secretにはそれぞれクライアントIDとシークレットコードを入れる。これはクライアント一覧画面にも表示されているし、client_secrets.jsonにも書いてある。

Eventはイベントのラッパー的なものになっている。もとのEventの時刻定義が意味不明で、こんなかんじの実装をしてあげないと単純に扱えない。

あとはCalendarClientのメソッドを叩くだけ。get_all_eventsは引数なしでも動くので一回叩いてみるとよいだろう。時刻を表現する文字列も結構特殊なので、Timeをぶちこんだら自動で変換してくれるような処理を各所で入れている。あと、吐き出される順番がむちゃくちゃなので、これもクライアントでソートした。

使うときは以下のようにする。これは実際に用いているコードだ。

ここまで来たら読者もだいたい理解したと思うので、後は公式のAPIリストgoogle-api-clientのGitHubをにらめっこしながら実装すればよい。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です