体脂肪率と同様にオプション的な扱いだが、Fitbit では 体重、BMI を記録、閲覧できる。
体脂肪率と体重・BMI の両方を取得するにはそれぞれ異なるAPIを叩く必要があるが、これは計測機器への配慮だろう。体重・BMIと体脂肪率を一度に取得するということは、体重・BMI・体脂肪率が全て揃っていることが前提となり、両方測定できる体組成計があることを前提としなければならない。
体重だけであればかなり安価な計測機器があるはずだ。一方で、安価な体重計とWiFi機能の組み合わせは不釣り合いという事情がある。これもIoTのジレンマかな。
※実際は、体脂肪率データが一緒に記録された場合、このAPIによって体重、BMI、体脂肪率を1度に取得できる。FitbitAPIは仕様との互換性を保ちつつ便利な方向に拡張される傾向がある。
API概要
体重・BMIを取得するRESTfulAPI は以下の通り3パターン用意されている。
GET /1/user/[user-id]/body/log/weight/date/[date].json
GET /1/user/[user-id]/body/log/weight/date/[base-date]/[period].json
GET /1/user/[user-id]/body/log/weight/date/[base-date]/[end-date].json
parameterformatmeaning
dateyyyy-MM-ddデータの日付
base-dateyyyy-MM-dd[period]が指定された場合は指定期間の末尾を指定する。[end-date]が指定された場合は指定期間の最初を指定する。
period1d, 7d, 30d, 1w, 1m取得範囲を指定する。1d=1日, 7d=7日, 30d=30日, 1w=1週間, 1m=1か月。1か月と30日が別に用意されていて親切だ。
end-dateyyyy-MM-dd指定期間の末尾を指定する。
データの取得期間は31日を超えてはならない。単位系はHTTPヘッダに付与したAccept-Languageによる。日本は\"ja-JP\"である。
レスポンス
レスポンスのスキーマは以下の通りである。
keyformatmeaning
bmiXX.XBMI値、(formatは有効桁数を表すと思われる)
dateyyyy-MM-ddデータ日付
weightX.XX体重値 (formatは有効桁数を表すと思われる)
logIdログID、ユーザ毎にユニークだが、グローバルにユニークではない
timeH:i:s計測時刻 (Time of the mesurement) 計測機器がサポートしない場合は前日の最終時刻。
sourceAria,Withthings,APIなど計測装置、入力経路の識別子、[オプション] API経由で入力すると\"API\"が設定される
1日に数回計測した場合の扱いは計測装置の事情によるようだ。Withthingの場合、複数回計測すると最後の値で上書きされる。朝と夜、2回の計測は必須だと思うが、残念ながら計測装置によって目的を達成できない
実行例
最初の書式を叩いてみた。この日は2回計測したのだがデータは1個だけである。上記で説明したスキーマ以外に体脂肪率も付いてきた。仕様通りbmiとweightについては有効桁数が考慮されている。一方、体脂肪率は考慮されていない。
/1/user/[user-id]/body/log/weight/date/2016-06-14.json
Array
(
[weight] => Array
(
[0] => Array
(
[bmi] => 22.01
[date] => 2016-06-14
[fat] => 15.918999671936
[logId] => 1465948799000
[source] => Withings
[time] => 23:59:59
[weight] => 67.4
)
)
)
2個目の書式を叩いてみた。「2016-06-14を末尾として1週間取得する」という意味。
GET /1/user/[user-id]/body/log/weight/date/2016-06-14/1w.json
Array
(
[weight] => Array
(
[0] => Array
(
[bmi] => 22.01
[date] => 2016-06-07
[fat] => 14.520999908447
[logId] => 1465343999000
[source] => Withings
[time] => 23:59:59
[weight] => 67.4
)
[1] => Array
(
[bmi] => 22.27
[date] => 2016-06-08
[fat] => 15.515999794006
[logId] => 1465430399000
[source] => Withings
[time] => 23:59:59
[weight] => 68.2
)
[2] => Array
(
[bmi] => 22.14
[date] => 2016-06-09
[fat] => 14.659999847412
[logId] => 1465516799000
[source] => Withings
[time] => 23:59:59
[weight] => 67.8
)
[3] => Array
(
[bmi] => 21.94
[date] => 2016-06-10
[fat] => 14.616000175476
[logId] => 1465603199000
[source] => Withings
[time] => 23:59:59
[weight] => 67.2
)
[4] => Array
(
[bmi] => 21.94
[date] => 2016-06-11
[fat] => 16.163000106812
[logId] => 1465689599000
[source] => Withings
[time] => 23:59:59
[weight] => 67.2
)
[5] => Array
(
[bmi] => 22.07
[date] => 2016-06-12
[fat] => 14.592000007629
[logId] => 1465775999000
[source] => Withings
[time] => 23:59:59
[weight] => 67.6
)
[6] => Array
(
[bmi] => 21.94
[date] => 2016-06-13
[fat] => 14.64999961853
[logId] => 1465862399000
[source] => Withings
[time] => 23:59:59
[weight] => 67.2
)
[7] => Array
(
[bmi] => 22.01
[date] => 2016-06-14
[fat] => 15.918999671936
[logId] => 1465948799000
[source] => Withings
[time] => 23:59:59
[weight] => 67.4
)
)
)