Python
python3
Postman
fitbit

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公式ページからPostmanをインストールします。

0-2 データ取得用のクライアントをダウンロードする

データ取得用のクライアントをインストールする。Zipファイルでダウンロード。(解凍後、Desktopに置いて使っていました。)

0-3 クライアントのREADMEに従って必要なものをインストール

コマンドプロンプト
pip install python-dateutil==2.4.0
コマンドプロンプト
pip install requests-oauthlib
コマンドプロンプト
pip install -r requirements/base.txt
コマンドプロンプト
pip install -r requirements/dev.txt
コマンドプロンプト
pip install -r requirements/test.txt

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

コマンドプロンプト
pip install cherrypy

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

コマンドプロンプト
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開発者ページから自分の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/をいれてます
OAuth 2.0 Application TypeにはClientまたはPersonalを選択
(Personalにすると秒単位でデータが取れる)
Callback URLには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を取得

ここから先はこの方の「2. リクエストヘッダにOAuth認証情報を追加」を参考にしました。
この方のFitbitのアクセス許可で、許可ボタンをクリックすると、Existing Tokensの後に作成されたトークンが表示されるところまで行います。

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

3 データの取得

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

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で試してみる方法
Pythonでfitbit APIから心拍数を取得してみよう!
python-fitbit データ取得クエリまとめ
一番分かりやすい OAuth の説明
Python 3でのファイルのimportのしかたまとめ
FitbitのAPIを手っ取り早く試してみる方法
●それ以外のサイト
Fitbit Charge HRの心拍数データを取得する
APIの開発がむちゃくちゃ捗る「Postman」の使い方
Fitbit Apiとpythonで心拍数の取得をする
FitbitのAlta HRを使ってプログラミング無しでゲーム中の心拍数を見る

5.おすすめ

金の果実 ゴールデンキウイ果汁味