Jawbone APIを触ってみた
jawbone-up-api-studyを見ながら、JawboneのAPIを触ってみました。
事前に登録作業を行いClient IdとApp Secretを取得、ローカルで動かした認証スクリプトを使ってアクセストークンを取得、そのアクセストークンを使ってAPIを実行という流れです。
登録作業
Organization登録
Create an Accountをクリックし、Organization Name、Email Contact、Description を入力して送信。
App登録
続いてManage Account -> Create Appをクリックし、Name、Description、Long Description、URL、Authorization URL、OAuth Redirect URIsを入力して送信。
URLにはこのブログのURLを貼りました。
重要なのは、Authorization URLがOAuth Redirect URIsがhttp://localhost:5000 になっていることです。
OAuth redirect URLsはhttpsにしなければならないと書いているが、httpで登録して大丈夫でした。
Appの登録が終わるとClient IdとApp Secretを取得することができます。
アクセストークン取得
your-app-tokenとyour-app-client-idには事前に取得した値を使用します。
git clone https://github.com/shokai/jawbone-up-api-study.git cd jawbone-up-api-study bundle install --path=vendor/bundle cd auth export APP_SECRET=your-app-token export CLIENT_ID=your-app-client-id bundle exec rackup config.ru -p 5000 open http://localhost:5000
開かれたブラウザのloginをクリックすると、下のような認証画面が出るので「同意する」をクリックしてください。
これでアクセストークンを取得することができます。
APIを実行する
your-tokenには上で取得したアクセストークンの値を使用します。
cd ../ export JAWBONE_TOKEN=your-token bundle exec ruby sleep.rb
↓出力結果を一部抜粋してみました。深い眠りの時間や起きた時間など細かく取れているのがわかりますね。
"time_completed" => 1459986907, "xid" => "XXXXXXXXXXXXXXXXXXX", "title" => "8時間2分", "time_created" => 1459955409, "time_updated" => 1459987290, "details" => { "body" => "", "smart_alarm_fire" => "", "awakenings" => 3, "light" => 19264, "mind" => 0, "asleep_time" => 1459956009, "deep" => 9688, "awake" => 2401, "rem" => 0, "duration" => 31498, "tz" => "Asia/Tokyo", "quality" => "", "awake_time" => 1459986759 }, "date" => 20160407, "shared" => true, "sub_type" => 0 }
権限追加
main.rbのscopeを以下に書き換えて認証すると権限が増えます。
scope = "basic_read extended_read location_read friends_read sleep_read mood_read mood_write move_read move_write sleep_write meal_read meal_write weight_read weight_write generic_event_read generic_event_write heartrate_read"
ブラウザで見るとさきほどより増えてるのがわかります。
試しに新しいmoodを作成してみます。
スマホのアプリを確認すると、「あなたの活動」に追加されていることがわかります。
※Jawbone自体が振動して通知を教えてくれると期待していたのだが、振動しなかった。残念。
最後に
とりあえずアクセストークンは取れたので、これでいろいろできそうです。
lambdaで動かせばifttt連携とかラクできそうなので、やはりnode.jsでしょうかね。
気が向いたら、また書きます。