python-fitbit データ取得クエリまとめ

fitbitでは、心拍数、歩数、カロリー、登った階数など、多様なデータを計測しています！
それらのデータのpythonでの取得方法をまとめます。

Access Tokenなど、APIの使用環境を整えるのは[前回記事](http://qiita.com/fujit33/items/2af7c4afdb4e07601def)を参考にして下さい。

【環境】
・ ＯＳ ： OS X EI Capitan
・ 言語 ： Python 3.5.2
・ライブラリ : [python-fitbit](https://github.com/orcasgit/python-fitbit)

# 心拍数・運動 時系列データの取得

*intraday_time_series* という関数を使います。

## 例：歩数の取得
```python:準備.py
import fitbit

# メモしたID等
CLIENT_ID =  "XXXXXXXXXXXXXXXXXXXXXXX"
CLIENT_SECRET  = "XXXXXXXXXXXXXXXXXXXXXXX"
ACCESS_TOKEN =  "XXXXXXXXXXXXXXXXXXXXXXX"
REFRESH_TOKEN =  "XXXXXXXXXXXXXXXXXXXXXXX"
# ID等の設定
authd_client = fitbit.Fitbit(CLIENT_ID, CLIENT_SECRET
                             ,access_token=ACCESS_TOKEN, refresh_token=REFRESH_TOKEN)
```
```python:歩数取得.py
# 歩数を取得（1分単位）
authd_client.intraday_time_series('activities/steps', base_date="2017-01-31", detail_level='1min', start_time="02:00", end_time="04:00") 
```
```python:結果
{'activities-steps': [{'dateTime': '2017-01-31', 'value': '0'}],
 'activities-steps-intraday': {'dataset': [{'time': '02:00:00', 'value': 0},
   {'time': '02:01:00', 'value': 0},
   {'time': '02:02:00', 'value': 0},
   {'time': '02:03:00', 'value': 0},
   {'time': '02:04:00', 'value': 0},
   {'time': '02:05:00', 'value': 0},
   ...
```
## detail_level
取得するデータの間隔
1sec, 1min, 15min のどれか
欠損値がある可能性が高いです。
## 取得するデータの種類
上記関数の'activities/steps'という項目を変更することで、いろいろな情報を時系列で取得することができます。

| 値| 説明 |
|:-----------:|:------------:|
| activities/heart     |  平均心拍数|
|  activities/steps  |  歩数 |
|activities/calories       |  消費カロリー |
| activities/floors  |  登った階数（3m登って１階） |
| activities/minutesSedentary  |  座っている時間（分間） |
| activities/minutesLightlyActive  |  軽い運動をしている時間（分間） |
| activities/minutesFairlyActive  |  アクティブな運動をしている時間（分間） |
| activities/minutesVeryActive  |  激しい運動をしている時間（分間）  |

# 睡眠データの取得
睡眠データは *sleep* 関数が便利です。

```py:睡眠情報取得.py
authd_client.sleep(date="2017-01-29")
```

```py:結果
{'sleep': [{'awakeCount': 1,
   'awakeDuration': 6,
   'awakeningsCount': 19,
   'dateOfSleep': '2017-01-29',
   'duration': 26700000,
   'efficiency': 93,
   'isMainSleep': True,
   'logId': 13626289712,
   'minuteData': [
    {'dateTime': '01:16:00', 'value': '3'},
    {'dateTime': '01:17:00', 'value': '3'},
    {'dateTime': '01:18:00', 'value': '3'},
    {'dateTime': '01:19:00', 'value': '3'},
    {'dateTime': '01:20:00', 'value': '3'},

    {'dateTime': '08:38:00', 'value': '1'},
    {'dateTime': '08:39:00', 'value': '1'},
    {'dateTime': '08:40:00', 'value': '2'}],
   'minutesAfterWakeup': 1,
   'minutesAsleep': 414,
   'minutesAwake': 30,
   'minutesToFallAsleep': 0,
   'restlessCount': 18,
   'restlessDuration': 25,
   'startTime': '2017-01-29T01:16:00.000',
   'timeInBed': 445}
```

## データの中身
| key名 | 内容 |
|:-----------:|:------------:|
| dateOfSleep     |  日付（起床日）　|
| isMainSleep     |  その睡眠がメインの睡眠かどうか　|
| dateOfSleep     |  起床回数　|
| startTime     |  就寝時間|
| timeInBed     |  ベッドに横になっていた時間（分間） |
| awakeCount     |  起床回数　|
| restlessCount     |  寝返り回数　|
| minutesAsleep     |  睡眠時間（分間） |
| minutesAwake     |  ベットで起きていた時間（分数）|
| minutesToFallAsleep     |  眠りに落ちるまでの時間（分間）|
| minutesAfterWakeup     |  起きてから起き上がるまでの時間（分間）|
| dateOfSleep     |  起床回数　|
| minuteData | 1分毎の睡眠レベル<br>{ 1:睡眠, 2:寝返りを繰り返す, 3:覚醒} |

# 参考サイト
[python-fitbit GitHub](https://github.com/orcasgit/python-fitbit)
[python-fitbit ドキュメント](http://python-fitbit.readthedocs.io/en/latest/)