はじめに
curlコマンドを使ってFitbit APIを叩いてみたので、忘れないようにメモしておきます。
Fitbitデベロッパーサイトからaccess_tokenを取得します。下図の赤枠の部分。
プロファイルを取得
$ curl -H "Authorization: Bearer [your token]" https://api.fitbit.com/1/user/-/profile.json
レスポンスを見易くするためjqをインストールすると良いです。
$ brew install jq
歩数を取得
今日から1ヶ月前までの歩数を取得します。
$ curl -H "Authorization: Bearer [your token]" https://api.fitbit.com/1/user/-/activities/steps/date/today/1m.json | jq
{
"activities-steps": [
{
"dateTime": "2020-01-22",
"value": "6357"
},
{
"dateTime": "2020-01-23",
"value": "6405"
},
...
{
"dateTime": "2020-02-21",
"value": "2270"
}
]
}
食事を記録する
食事を記録するには、Fitbit食品データベースからfoodIdを取得する必要があります。
テストでは「タピオカ」を検索ワードにしています。
検索ワードはエンコードしてPOSTしてあげなければエラーとなります。
エンコード方法はググるといろんなサイトが出てきます。
curl -X POST -H "Authorization: Bearer [your token]" https://api.fitbit.com/1/foods/search.json?query=%E3%82%BF%E3%83%94%E3%82%AA%E3%82%AB
query以下が検索ワードです。
{
"foods": [
{
"accessLevel": "PUBLIC",
"brand": "",
"calories": 212,
"defaultServingSize": 1,
"defaultUnit": {
"id": 304,
"name": "食分",
"plural": "食分"
},
"foodId": 19297945,
"isGeneric": false,
"locale": "ja_JP",
"name": "タピオカフルーツ",
"units": [
304
]
},
{
"accessLevel": "PUBLIC",
"brand": "",
"calories": 300,
"defaultServingSize": 1,
"defaultUnit": {
"id": 304,
"name": "食分",
"plural": "食分"
},
"foodId": 19297918,
"isGeneric": false,
"locale": "ja_JP",
"name": "タピオカアイス",
"units": [
304
]
},
...
{
"accessLevel": "PUBLIC",
"brand": "",
"calories": 275,
"defaultServingSize": 1,
"defaultUnit": {
"id": 304,
"name": "食分",
"plural": "食分"
},
"foodId": 21863417,
"isGeneric": false,
"locale": "ja_JP",
"name": "タピオカフロート ココア(ファーストキッチン)",
"units": [
304
]
}
]
}
いっぱいありますね!適当なfoodIdを拾ってきましょう。
ここでは"21863417"を使います。
それでは食事を登録します。
curl -X POST \
-H "Authorization: Bearer [your token]" \
--data "foodId=21863417&date=2020-02-21&amount=2&unitId=304&mealTypeId=7&favorite=false" \
https://api.fitbit.com/1/user/-/foods/log.json
ちゃんとタピオカフロート ココア(・・・が登録されましたね!
参考
今回はここまでです。