Fitbitで心拍数を取得する(忘備録)

#Fitbitで心拍数を取得する(忘備録)
先日Fitbit Alta HRを購入しました。
データ分析に心拍数や睡眠状態が欲しかったのでAPIを取得できるFitbitを購入。
【環境】
python 3.6.6
windows10

【前提】
Fitbitにログイン済み
pythonインストール済み

python-fitbit/gather_keys_oauth2.py 【OAuth 2.0 Client ID】 【Client Secret】をコマンドラインに入力してアプリ認証をしようとしたのですが、以下のメッセージが出てきて認証できませんでした。
ーーーーーーーーーーーーー
接続しようとしているアプリは Fitbit に有効なデータを提供しませんでした。この問題を報告してください。

Developer information: invalid_request - Invalid redirect_uri parameter value
ーーーーーーーーーーーーー
この原因はわからなかったのですが、今回試した方法では認証できたので、認証できなかった方は試してみて下さい。

##0　準備
###0-1 Postmanをインストール
[Postman公式ページ](https://www.getpostman.com/)からPostmanをインストールします。 
###0-2　データ取得用のクライアントをダウンロードする
[データ取得用のクライアント](https://github.com/orcasgit/python-fitbit)をインストールする。Zipファイルでダウンロード。(解凍後、Desktopに置いて使っていました。)
###0-3　クライアントのREADMEに従って必要なものをインストール
```ruby:コマンドプロンプト
pip install python-dateutil==2.4.0
```

```ruby:コマンドプロンプト
pip install requests-oauthlib
```


```ruby:コマンドプロンプト
pip install -r requirements/base.txt
```

```ruby:コマンドプロンプト
pip install -r requirements/dev.txt
```

```ruby:コマンドプロンプト
pip install -r requirements/test.txt
```

sudo上手くいかなかったので、とりあえず抜いて入れています。(アドバイスあればお願いします。)
これに加えてcherrypyが必要らしい

```ruby:コマンドプロンプト
pip install cherrypy
```

コマンドプロンプトに黄色いエラーが出たらとりあえずpathを書き換えたり加えたりして対応してました。
上2つとcherrypyはDesktop、他はpython-fitbit-masterを広げてインストールしました↓

```ruby:コマンドプロンプト
C:\Users\ユーザー名\Desktop\python-fitbit-master>pip install -r requirements/base.txt

C:\Users\ユーザー名\Desktop>pip install numpy
```
※Could not open requirements file: [Errno 2] No such file or directory: 'requirements/base.txt'などのエラーが出たらこのインストールの仕方を見直してみてください。

##1 Fitbitのアプリケーションに登録
[Fitbit開発者ページ](https://dev.fitbit.com/)から自分のfitbitアカウントでログインし、Manageタブ→REGISTER AN APPタブからアプリケーションを登録

| 項目名 | 入力値 | 
|:-----------|------------:|
| Application Name       | 適当       |
|Description|適当|
|Application Website    | 適当    |
| Organization       |適当       |
| Organization Website     | 適当         |
| OAuth 2.0 Application Type      | Personal    |
| Callback URL	  | https://www.getpostman.com/oauth2/callback     |
|Default Access Type|Read-Only|

※上の5つは適当で構わないようです。（以下注意事項）
Descriptionは10字以上
○○Websiteには[http://localhost/](http://localhost/)をいれてます
OAuth 2.0 Application TypeにはClientまたはPersonalを選択
(Personalにすると秒単位でデータが取れる)
Callback URLには[https://www.getpostman.com/oauth2/callback](https://www.getpostman.com/oauth2/callback)を入力

Registerボタンをクリックで登録完了

これで、OAuth 2.0 Client ID,Client Secret,Callback URL,OAuth 2.0: Authorization URI,OAuth 2.0: Access/Refresh Token Request URI全てを取得できるのでメモする。

##2 PostmanでAccess Token,refresh Tokenを取得
ここから先は[この方](https://qiita.com/makopo/items/7f5a47a7c58929b6fb93)の「2. リクエストヘッダにOAuth認証情報を追加」を参考にしました。
この方のFitbitのアクセス許可で、許可ボタンをクリックすると、Existing Tokensの後に作成されたトークンが表示されるところまで行います。


Available TokensからManage Tokensを選択するとAccess Token,refresh Tokenが表示されます。

##3 データの取得
python-fitbit-masterの中にFitbitTry.pyというファイルを作ります。(ファイル名は自由)

```ruby:FitbitTry.py
import fitbit
# 2,3で取得したID
CLIENT_ID =  "XXXXXXXXXXXXXXXXXXXXXXX"
CLIENT_SECRET  = "XXXXXXXXXXXXXXXXXXXXXXX"
ACCESS_TOKEN =  "XXXXXXXXXXXXXXXXXXXXXXX"
REFRESH_TOKEN =  "XXXXXXXXXXXXXXXXXXXXXXX"

# 取得したい日付
DATE = "2018-07-06"

authd_client = fitbit.Fitbit(CLIENT_ID, CLIENT_SECRET
                             ,access_token=ACCESS_TOKEN, refresh_token=REFRESH_TOKEN)
# 心拍数を取得（1秒単位）
data_sec = authd_client.intraday_time_series('activities/heart', DATE, detail_level='1sec') #'1sec', '1min', or '15min'
heart_sec = data_sec["activities-heart-intraday"]["dataset"]
heart_sec[:10]

print(heart_sec[:10])
```

これを実行すると心拍数が取れます！


##4.参考
●Qiita
[FitbitのOAuth 2.0 APIをPostmanで試してみる方法]
(https://qiita.com/makopo/items/7f5a47a7c58929b6fb93)
[Pythonでfitbit APIから心拍数を取得してみよう！]
(https://qiita.com/fujit33/items/2af7c4afdb4e07601def)
[python-fitbit データ取得クエリまとめ]
(https://qiita.com/fujit33/items/27d3f3142cf02bb46436)
[一番分かりやすい OAuth の説明]
(https://qiita.com/TakahikoKawasaki/items/e37caf50776e00e733be)
[Python 3でのファイルのimportのしかたまとめ]
(https://qiita.com/karadaharu/items/37403e6e82ae4417d1b3)
[FitbitのAPIを手っ取り早く試してみる方法]
(https://qiita.com/makopo/items/32f41128c2e055cec68f)
●それ以外のサイト
[Fitbit Charge HRの心拍数データを取得する]
(http://shima-nigoro.hatenablog.jp/entry/2016/05/29/181309)
[APIの開発がむちゃくちゃ捗る「Postman」の使い方]
(https://www.webprofessional.jp/master-api-workflow-postman/)
[Fitbit Apiとpythonで心拍数の取得をする]
(https://futurismo.biz/archives/6903/)
[FitbitのAlta HRを使ってプログラミング無しでゲーム中の心拍数を見る]
(https://maruhoi.com/web/fitbit-api-heart-rate-date-non-programming/)

##5.おすすめ
金の果実　ゴールデンキウイ果汁味