現在研究室内でSlackを使用しており、せっかくなのでHubotを導入して遊んでいる。
また、研究室内で予定の共有のため、Googleカレンダーで研究室カレンダーを作成し、運用している。
しかしながら、Googleカレンダーに複数のカレンダーを表示させると見辛かったり、そもそもGoogleカレンダーを確認しない等の理由から「今日ミーティングあったっけ?」など予定を把握できていないメンバーが発生する。
そこでHubotに毎朝予定を教えてもらうようにした。
使用イメージ
hubot
導入については
- http://qiita.com/misopeso/items/1f418dd02e89234499b3
- http://qiita.com/n0bisuke/items/2448010c0dfaf8a20167
などの記事を参考にした。
また、foreverを使用して常駐させている。
参考: http://qiita.com/n_morioka/items/837967c0e2711198bd74
Google Calendar API
公式: https://console.developers.google.com/flows/enableapi?apiid=calendar
認証情報の取得
-
https://console.developers.google.com/start/api?id=calendar
より、アプリケーションを登録する - 「新しいクライアントIDを作成」
- インストールされてるアプリケーションを選択 → サービス名を入力 → その他を選択
- 作成後JSONをダウンロードする
ダウンロードしたJSONはこんな感じ
{"installed":{
"auth_uri":"https://accounts.google.com/o/oauth2/auth",
"client_secret":"YOUR CLIENT SECRET",
"token_uri":"https://accounts.google.com/o/oauth2/token",
"client_email":"",
"redirect_uris":["urn:ietf:wg:oauth:2.0:oob",
"oob"],
"client_x509_cert_url":"",
"client_id":"YOUR CLIENT ID",
"auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs"}}
パッケージのインストール
$ npm install googleapis --save
$ npm install google-auth-library --save
- ついでに時間指定発言のためにcron、タイムゾーン指定のためにtimeもいれます
$ npm install cron time --save
CoffeeScript
ソース: https://gist.github.com/tk3fftk/42966c00eeeabf164e4e
- したこと
- Google公式のNode.js用サンプルをCoffeeScriptにした(それ以外は認証まわりほぼそのまま)。
- JSONファイルから読み込んでいた認証情報をハードコードした(.coffeeだけで完結させたかったため)。
- 既存関数の引数にHubot発言用の変数を追加して、カレンダーからの予定取得とともに発言させるようにした。
- moment.jsを使用するようにしました
- 初回実行時のみ、使いたいカレンダーを持っているGoogleアカウントでログインしてブラウザ上で認証し、トークンを生成する必要があります。