WindowsでFitbitのWebAPIを試してみる

# 概要
Fitbitにデビューして早２年。アプリやWebで自分の記録を見てたけど、2年も経つと過去の見たい記録がなかなか見つからなくなったため、FitbitのWebAPIをちょっと調べてみた
ここでは、アプリでよく見る歩数、階数、距離、カロリー、エクササイズ記録、体重、体脂肪率、睡眠ステージ、心拍数ゾーンのAPIを記載

## できるようになること
HTTPSリクエストでFitbitの以下の情報を取得できるようになる

* 歩数、階数、距離、カロリー
* エクササイズ記録
* 体重
* 体脂肪率
* 睡眠ステージ
* 心拍数ゾーン


## 参考ページ

[本家のページ]
　[Fitbit WebAPI](https://dev.fitbit.com/build/reference/web-api/ "Fitbit WebAPI")

## 事前準備
最低限以下の２点が必要

* HTTPSのGETリクエストが送れること
* 認証情報（Authorization）をHTTPヘッダに設定できること

認証情報は以下のページ等を参考にWindowsで「ブラウザ」と「コマンドプロンプトでのcurlのコマンド実行」で取得できる

　[FitbitのAPIを手っ取り早く試してみる方法](https://qiita.com/makopo/items/32f41128c2e055cec68f "FitbitのAPIを手っ取り早く試してみる方法")

[本家のページ]
 https://dev.fitbit.com/build/reference/web-api/developer-guide/getting-started/

実際のWebAPIのRAWは↓の感じ
xxxxxxに上記で取得した認証情報を設定する

```
GET https://api.fitbit.com/1/user/-/activities/date/2017-11-12.json HTTP/1.1
Accept-Encoding: gzip,deflate
Authorization: Bearer xxxxxx
Host: api.fitbit.com
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
```

## 歩数、階数、距離、カロリー取得

### 使用API
![image.png](https://qiita-image-store.s3.amazonaws.com/0/188544/5b8c6970-3221-1782-e2bc-d53411a0078c.png)

### APIサンプル
```
https://api.fitbit.com/1/user/-/activities/date/2019-03-03.json
```

### レスポンスサンプル
![image.png](https://qiita-image-store.s3.amazonaws.com/0/188544/2b6410e2-9b3c-b5fb-ea96-d99c659a2207.png)

### JSON取得サンプル
```python
    jsonstr['summary']['steps'] # 歩数
    jsonstr['summary']['floors'] # 階数
    jsonstr['summary']['distances'][2]['distance'] # 距離
    jsonstr['summary']['caloriesOut'] # カロリー
```

## エクササイズ記録取得

### 使用API
![image.png](https://qiita-image-store.s3.amazonaws.com/0/188544/5b8c6970-3221-1782-e2bc-d53411a0078c.png)
（使用APIは「歩数、階数、距離、カロリー」と同じ）

### APIサンプル
```
https://api.fitbit.com/1/user/-/activities/date/2019-03-03.json
```

### レスポンスサンプル
![image.png](https://qiita-image-store.s3.amazonaws.com/0/188544/8332e793-45db-b46b-084d-87949ad87369.png)

### JSON取得サンプル
```python
    jsonstr['activities'][0]
```

## 体重取得

### 使用API
![image.png](https://qiita-image-store.s3.amazonaws.com/0/188544/a1625ee4-aa1c-8377-e86c-639811891395.png)

### APIサンプル
```
https://api.fitbit.com/1/user/-/body/log/weight/date/2019-02-24.json
```

### レスポンスサンプル
![image.png](https://qiita-image-store.s3.amazonaws.com/0/188544/64526f63-21a4-635f-8d3c-ac57a20de030.png)

### JSON取得サンプル
```python
    jsonstr['weight'][0]['weight']
```

## 体脂肪率取得

### 使用API
![image.png](https://qiita-image-store.s3.amazonaws.com/0/188544/2d6dd0fc-d81f-3661-a43e-9198da895d03.png)

### APIサンプル
```
https://api.fitbit.com/1/user/-/body/log/fat/date/2019-02-24.json
```

### レスポンスサンプル
![image.png](https://qiita-image-store.s3.amazonaws.com/0/188544/9b134e96-ca00-a1cb-b066-74572b132fe5.png)

### JSON取得サンプル
```python
    jsonstr['fat'][0]['fat']
```

## 睡眠ステージ取得

### 使用API
![image.png](https://qiita-image-store.s3.amazonaws.com/0/188544/5123fbb9-caf0-9417-660a-a95de30fa315.png)

### APIサンプル
```
https://api.fitbit.com/1/user/-/sleep/date/2019-03-01.json
```

### レスポンスサンプル
![image.png](https://qiita-image-store.s3.amazonaws.com/0/188544/68cd0f72-888e-9c0e-d0bf-39805dcff850.png)

### JSON取得サンプル
```python
    jsonstr['summary']
```

## 心拍数ゾーン取得

### 使用API
![image.png](https://qiita-image-store.s3.amazonaws.com/0/188544/9c6c7613-e126-314c-1e89-ab10468d5ed7.png)

### APIサンプル
```
https://api.fitbit.com/1/user/-/activities/heart/date/2019-03-01/1d.json
```

### レスポンスサンプル
![image.png](https://qiita-image-store.s3.amazonaws.com/0/188544/3925a86c-e6fe-5e4c-9d66-15a863207df3.png)

### JSON取得サンプル
```python
    jsonstr['activities-heart'][0]['value']['heartRateZones']
```

以上。

## 注意事項

アクセストークンごとに150リクエスト／1時間の制限あり

![image.png](https://qiita-image-store.s3.amazonaws.com/0/188544/0d34ab35-e44a-a7d0-2d47-8eb99a8feb5a.png)

## 参考情報

プログラムで作成する場合、各種ライブラリもあり

　[Community Resources](https://dev.fitbit.com/build/reference/web-api/community-resources/ "Community Resources")