前回は UNIX 環境を前提に記事を書いていましたが、Windows10 にPython2.7を入れてみたので
Windows 環境でも同じようにスクリプトが使えるか、試してみました。
準備するものは Python 2.7 以上がインストールされた Windows PC のみです。
ちなみに、Python のインストールは10分あれば終わります。
1. Fitbitの開発者向けサイトでアプリケーションを登録する
データを取得するAPIを使うためには dev.fitbit.com でアプリケーションの登録が必要。
アプリケーションを登録するといっても、個人で利用するだけなので項目は
適当に入れても問題ないと思われる。#Organizationとか特にないし
ただし、「Callback URL」と「OAuth 2.0 Application Type」は、下記を入力。
項目 | 設定値 | 備考 |
---|---|---|
Callback URL | http://127.0.0.1:8080/ | ポートがぶつかるならば変更必要 |
OAuth 2.0 Application Type | Personal | - |
ちなみに、後で自由に変えられるし、消したりもできるので間違っても問題なし。
2. データ取得用のクライアントをインストールする
Pythonで実装されたFitbit向けのAPIを利用します。
GitHub - orcasgit/python-fitbit: Fitbit API Python Client Implementation
とりあえずクライアントをダウンロード(Clone or Download ⇒ DownLoad Zipを選択)
ダウンロードした zip は任意のディレクトリに展開する
READMEに追加のパッケージをインストールするよう書いているので、下記コマンドを実行
pip install -r requirements/base.txt
cherrypy が必要となるので、インストールしておく。
pip install cherrypy
requirements/base.txt にもありますが、tox もインストールされるみたいなのでお好みでどうぞ。
3. APIを利用するための認証を行う
アプリケーション登録時に設定した「Callback URL」を http://127.0.0.1:8080/ 以外
にした場合は3.1から、そうでなければ3.2から。
3.1 「Callback URL」の設定を反映する。
gather_keys_oauth2.py を下記のように修正します。
#!/usr/bin/env python import cherrypy cherrypy.config.update({'server.socket_host':'hoge','server.socket_port':1234}) '''#途中省略''' class OAuth2Server: def __init__(self, client_id, client_secret, redirect_uri='http://hoge:1234/'):
※「Callback URL」を http://hoge:1234/ とした場合
3.2 ACCESS_TOKENとREFRESH_TOKENの取得
自分の登録したアプリケーションの「OAuth 2.0 Client ID」と「Client Secret」を dev.fitbit.com/apps
から取得して、スクリプトをコマンドプロンプトから実行
python gather_keys_oauth2.py hoge fuga
※「OAuth 2.0 Client ID」を hoge 、「Client Secret」を fuga とした場合
コマンドを実行するとブラウザが立ち上がるので、そのままログインする。
ログイン後はAPIで利用する項目を選択できるので必要な項目にチェックを入れて進む
認証に成功するとブラウザ上に「You are now wuthorized to access the Fitbit API!」と表示される。
この操作は初回のみで、以降はブラウザ上の操作は不要になります。
4. データを取得する(1日分の1分単位の心拍数を取得するサンプル)
下記のコードを適当な名前のファイル(save_hr.py)等で保存する。※こちらを参考にしました。
Python勉強中であるので、ツッコミは受け付けます。
import sys import fitbit import gather_keys_oauth2 as Oauth2 if (len(sys.argv) < 2): print 'Usage: # python %s YYYY-MM-DD' % sys.argv[0] quit() """for Save file.""" BASE_DATE = sys.argv[1] OUTPUT_FILE = "HR_%s.csv" % BASE_DATE """for OAuth2.0""" USER_ID = 'hoge' CLIENT_SECRET = 'fuga' """for obtaining Access-token and Refresh-token""" server = Oauth2.OAuth2Server(USER_ID, CLIENT_SECRET) server.browser_authorize() """Authorization""" auth2_client = fitbit.Fitbit(USER_ID, CLIENT_SECRET, oauth2=True, access_token=server.oauth.token['access_token'], refresh_token=server.oauth.token['refresh_token']) """Getting data""" fitbit_stats = auth2_client.intraday_time_series('activities/heart', BASE_DATE, detail_level='1min') """Getting only 'heartrate' and 'time'""" stats = fitbit_stats['activities-heart-intraday']['dataset'] """Timeseries data of Heartrate""" csv_file = open(OUTPUT_FILE, 'w') for var in range(0, len(stats)): csv_file.write(stats[var]['time']) csv_file.write(",") csv_file.write(str(stats[var]['value'])) csv_file.write("\n") csv_file.close()
※「OAuth 2.0 Client ID」を hoge 、「Client Secret」を fuga とした場合
下記のように実行すると受信データをCSV形式のファイル(HR_YYYY-MM-DD.csv)
に変換して実行ディレクトリに保存するようにしています。ちなみにブラウザが毎回立ち上がります…。
python download_hr.py 2016-07-15 > nul 2>&1
#YYYY-MM-DD は 2016-05-29 などです。誤った場合は取得できないと思います。
おまけ
ちなみに表計算ソフトを使ってプロットするとこんな感じになります。
#4時くらいにめっちゃ心拍数落ちてるけど、これって…。
ほかにも、眠りの浅い深いなどが取れるらしいので、レム睡眠とノンレム睡眠の間隔を
明らかにできればベストな睡眠時間がわかるかもしれないですね。これで健康まっしぐらです!
参考:Fitbit APIとPythonで心拍数時系列データの取得方法 | ミスターだけどドクターの頭の中
【日本正規代理店品】Fitbit ワイヤレス活動量計+心拍計リストバンド ChargeHR Large Black FB405BKL-JPN
- 出版社/メーカー: Fitbit
- 発売日: 2015/04/24
- メディア: エレクトロニクス
- この商品を含むブログ (7件) を見る