API概要
ドキュメントはこちら。Daily Activity Summaryとは、その名の通り、Fitbitデバイスが取得しFitbitにストアされたデータに関して1日の活動にフォーカスして集計した統計情報だ。
用途にもよるだろうが、ほとんどのケースで、このDaily Activity Summaryを取得するだけで事が足りるのではないだろうか。
Summaryのレベルでさえ、ダッシュボードには表示されない詳細なデータが記録されている。ダッシュボードやアプリが、UI/UXを実現するために、どのようにデータを選別しているかがわかる。
注釈
ドキュメントには以下の記述がある。Fitbitの製品にはセンサや機能の違いによりいくつかバリエーションがあるが、スキーマはハイエンドに揃えていて、取得できないデータには0, null, falseなど、空データが入るようだ。
Daily summary data and daily goals for elevation (elevation, floors) only included for users with a device with an altimeter.
リスエストヘッダに付与した「Accept-Language」によりデータの単位を設定できる。APIを介さず普通にダッシュボードにアクセスすると設定画面から単位を設定できるのだが、それとは異なる単位を指定できるということになる。
The Get Daily Activity Summary endpoint retrieves a summary and list of a user’s activities and activity log entries for a given day in the format requested using units in the unit system which corresponds to the Accept-Language header provided.
ドキュメントに実行例と今回の実行例を比較するとスキーマが大きく異なることがわかる。競争が激しい業界なのでスキーマのアップデートも速いのだろうか。このあたりはドキュメントに記述がなく将来に渡って現在のスキーマが存在し得るのか不安になる。
API詳細
RESTful APIは以下の通り。
1 |
GET https://api.fitbit.com/1/user/[user-id]/activities/date/[date].json |
パラメタは以下の通り。
parameter name | explain | sample |
---|---|---|
user-id | ユーザIDを取得する。”-“を指定するとログイン中のユーザ(通常、自分)となる。自分以外のIDを取得したいケースというのは…?。(Fitbitにはグループで実績を共有する概念があるのでグループメンバのIDを指定するのかも…詳細は不明)。 | “-“ |
date | 取得したいデータの日付を指定する。フォーマットは”yyyy-mm-dd”。 | 2016-06-08 |
summaryオブジェクト
key name | value means |
---|---|
activeScore | 不明 |
activityCalories | Fitbitが検出したActivityにより消費したカロリー |
caloriesBMR | 基礎代謝 |
caloriesOut | 直訳すると、プレミアムプラン会員の専属トレーナー(または自分)が設定した消費カロリー目標。 Calorie burn goal (caloriesOut) represents either dynamic daily target from the premium trainer plan or manual calorie burn goal. Goals are included to the response only for today and 21 days in the past. |
distances | distanceオブジェクトの配列 |
elevation | 垂直方向の移動距離(?と思われる。) |
fairlyActiveMinutes | まずまず運動している時間 [分] 運動強度は sedentary < light < fairly < veryActive |
floors | 垂直方向の移動距離を建物の階数に変換した数値。ダッシュボードではこちらが使われている。 |
heartRateZones | heartRateZoneオブジェクトの配列 |
lightlyActiveMinutes | 軽く運動している時間 [分] |
marginalCalories | 不明。あまり重要でないカロリー? |
restingHeartRate | 安静時心拍数 |
sedentaryMinutes | 座っている、静止している時間 [分] |
steps | 1日の歩数 |
veryActiveMinutes | 激しく運動している時間 [分] |
distanceオブジェクト
key name | value means |
---|---|
activity | 距離を集計するActivity、total, tracker, loggedActivities, veryActive, moderatelyActive, lightlyActive, sedentaryActive |
distance | 距離 [km] |
heartRateZoneオブジェクト
key name | value means |
---|---|
min | 心拍数ゾーンを定義する最低心拍数 [bmp] |
max | 心拍数ゾーンを定義する最大心拍数 [bmp] |
name | 心拍数ゾーンに付けられた名称 |
minutes | 1日のうち、該当心拍数ゾーンにあった時間 [分] |
caloriesOut | 1日のうち、該当心拍数ゾーンで消費したカロリー [Cal] |
実行してみる
OAuth2 Authenticate grant flow の実装例は前のエントリに書いた。このシリーズを始めてみて気づいたが、FitbitのAPIから得られるデータだけでは個人を識別できない。すなわち、APIから取得できるデータは個人情報ではない。管理側のアプリが個人識別情報とセットでストアして初めて個人情報になる。
データ項目についてはドキュメントを参照のこと。見慣れないデータも出てくるので新鮮だ。caloriesBMRとは基礎代謝だろうか。総消費カロリー(caloriesOut) と別のデータとなっている。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
Array ( [activities] => Array ( ) [goals] => Array ( [activeMinutes] => 30 [caloriesOut] => 2722 [distance] => 8.05 [floors] => 10 [steps] => 10000 ) [summary] => Array ( [activeScore] => -1 [activityCalories] => 1380 [caloriesBMR] => 1594 [caloriesOut] => 2822 [distances] => Array ( [0] => Array ( [activity] => total [distance] => 12.61 ) [1] => Array ( [activity] => tracker [distance] => 12.61 ) [2] => Array ( [activity] => loggedActivities [distance] => 0 ) [3] => Array ( [activity] => veryActive [distance] => 7.65 ) [4] => Array ( [activity] => moderatelyActive [distance] => 0.83 ) [5] => Array ( [activity] => lightlyActive [distance] => 4.14 ) [6] => Array ( [activity] => sedentaryActive [distance] => 0 ) ) [elevation] => 54.86 [fairlyActiveMinutes] => 21 [floors] => 18 [heartRateZones] => Array ( [0] => Array ( [caloriesOut] => 1549.5324 [max] => 92 [min] => 30 [minutes] => 1155 [name] => 範囲外 ) [1] => Array ( [caloriesOut] => 646.17384 [max] => 128 [min] => 92 [minutes] => 157 [name] => 脂肪燃焼 ) [2] => Array ( [caloriesOut] => 538.62588 [max] => 156 [min] => 128 [minutes] => 59 [name] => 有酸素運動 ) [3] => Array ( [caloriesOut] => 0 [max] => 220 [min] => 156 [minutes] => 0 [name] => ピーク ) ) [lightlyActiveMinutes] => 158 [marginalCalories] => 904 [restingHeartRate] => 68 [sedentaryMinutes] => 580 [steps] => 15669 [veryActiveMinutes] => 69 ) ) |
結論
- FitbitAPIからDaily Activity Summary
- 実データを俯瞰してスキーマの定義をまとめた