Fitbit APIをcurlで叩いてみた
Fitbitしていますか?
Fitbitとは腕につけて、歩数や心拍数、登った階数、カロリーなどを計測してくれるリスバンドタイプの活動量計です。
自分は普段からFitbitを身に着けています。
とにかくよく歩きます。
アイデアを整理しながら歩いたり、たまに無になって歩いたり。。
記録を見ると、シベリア鉄道の全長を超えていました。
目指せ、世界一周ですね。
このFitbitはWeb APIが公開されており、自分のデータを取得することができます。
早速試してみましょう。
アプリケーションの登録
その前にアプリケーションを登録する必要があります。
https://dev.fitbit.com/apps/new
試すだけなので、URLはローカルホストにします。
項目 | 値 |
---|---|
Application Name | 任意 |
Description | 10文字以上 |
Application Website | http://localhost |
Organization | 任意 |
Organization Website | http://localhost |
Terms Of Service Url | http://localhost |
Privacy Policy Url | http://localhost |
OAuth 2.0 Application Type | Personal |
Callback URL | http://127.0.0.1:8080 |
Default Access Type | Read-Only |
登録後、[OAuth 2.0 tutorial page]リンクをクリックします。
OAuth 2.0 チュートリアルページ
このチュートリアルページで、アクセストークンとリフレッシュトークン、およびFitbit API用のcurlコマンドを取得できます。
- Flow type を
Authorization Code Flow
に選択します。 - リンクをクリックします。
アクセス許可を求める画面が表示されるので、すべて許可する
を選択して[許可]ボタンをクリックします。
Callback URLをローカルホストに設定しているため、サーバーに接続できずエラー画面が表示されます。
アドレスバー URL内にある40桁のコード値
をクリップボードにコピーします。
末尾の#_=_
は不要です。
http://127.0.0.1:8080/?code=0123456789012345678901234567890123456789#_=_
コピーしたコード値
を、下図のCodeテキストボックス(1番)にペーストします。
トークン取得用のcurlコマンド
が表示(2番)されます。
このトークン取得用のcurlコマンド
をコピーします。
コピーしたトークン取得用のcurlコマンド
をローカルのターミナル上にペーストしてcurlを叩きます。
$ curl -X POST -i -H 'Authorization: Basic **********' -H 'Content-Type: application/x-www-form-urlencoded' -d "clientId=******" -d "grant_type=authorization_code" -d "redirect_uri=http%3A%2F%2F127.0.0.1%3A8080" -d "code=**********" https://api.fitbit.com/oauth2/token HTTP/2 200 date: Mon, 03 Sep 2018 20:26:42 GMT content-type: application/json;charset=UTF-8 vary: Origin,Accept-Encoding cache-control: no-cache, private content-language: ja-JP x-frame-options: SAMEORIGIN expect-ct: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct" server: cloudflare cf-ray: 4518f4ac8f3e94d5-NRT {"access_token":"**********","expires_in":28800,"refresh_token":"**********","scope":"nutrition heartrate social activity profile sleep weight settings location","token_type":"Bearer","user_id":"******"}
HTTPステータスコード 200が返ってきていたら成功です。
レスポンスボディのJSON結果
をコピーします。
テキストエリア(3番)にJSON結果
をペーストします。
アクセストークンとリフレッシュトークンが表示(4番)され、プロフィール取得用のcurlコマンド
が表示(5番)されます。
curl -i -H "Authorization: Bearer **********.**********" https://api.fitbit.com/1/user/-/profile.json
curlを叩くとプロフィールが取得されます。
URL中の -
はカレントユーザーを意味します。
このURLのprofile
箇所を変更してcurlを叩くと、各種データを取得できます。
アクセストークンとリフレッシュトークンはプログラムからOAuth2.0認証を利用する場合に利用できます。
URLエンドポイント
いくつかのエンドポイントを見てみましょう。
エンドポイント | 説明 |
---|---|
activities/today | 今日のアクティビティを取得 |
activities/steps/date/2018-09-03/1d | 指定した日の歩数を取得 |
activities/steps/date/today/1m | 1ヶ月分の歩数を取得 |
activities/heart/date/today/1d | 今日の心拍数を取得 |
activities/heart/date/today/7d | 1週間分の心拍数を取得 |
sleep/date/today | 今日の睡眠データを取得 |
sleep/date/2018-09-01 | 指定した日付の睡眠データを取得 |
sleep/date/2018-08-01/2018-08-31 | 期間を指定して睡眠データを取得 |
他にも様々なコマンドやオプションがあります。
詳しい使い方は Web API Reference を参考にしてください。
サンプル
サンプルとして、昨日の歩数を取得してみます。
curl -H "Authorization: Bearer **********.**********" https://api.fitbit.com/1/user/-/activities/steps/date/2018-09-03/1d.json | jq .
そのままだとJSONが見づらいので、jq をパイプ連結して、結果を整形しています。
Macユーザーなら、更にパイプ連結でpbcopy
を追加すると、クリップボードに直接コピーできます。
{ "activities-steps": [ { "dateTime": "2018-09-03", "value": "11758" } ], "activities-steps-intraday": { "dataset": [ { "time": "00:00:00", "value": 0 }, 略 { "time": "08:00:00", "value": 25 }, { "time": "08:01:00", "value": 32 }, { "time": "08:02:00", "value": 16 }, 略 { "time": "23:59:00", "value": 0 } ], "datasetInterval": 1, "datasetType": "minute" } }
無事出力されました。
昨日は 11,758歩。平日なのでまずまずです。