Fitbit Charge HR を使い始めて約半年、以前に増して健康的な生活を送っている私です。
嘘です。ウェアラブル端末つけただけで健康になるなら、誰も苦労しません。
前置きはここまでにしておいて、今回はクラウドにアップロードされた
データをスマホアプリなしで取得する方法をまとめます。
準備するものは Python 2.7 以上がインストールされた UNIX PC( VM でも可)のみです。
Windows環境で使いたいという場合は、下記の記事をどうぞ。
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
とりあえずクライアントをダウンロード
git clone https://github.com/orcasgit/python-fitbit
READMEに追加のパッケージをインストールするよう書いているので、下記コマンドを実行
sudo pip install -r requirements/base.txt
pip が使えなかった方は下記コマンドでインストール
#ちゃっかりcurlもインストールしていますが
sudo apt-get install curl
sudo curl -kL https://bootstrap.pypa.io/get-pip.py | python
cherrypy が必要となるので、インストールしておく。
sudo pip install cherrypy
#なぜかREADMEには必要と書かれていないが…
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
から取得して、下記コマンドを実行
./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勉強中(16年5月29日時点で約1日)であるので、ツッコミは受け付けます。
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 save_hr.py YYYY-MM-DD > /dev/null
#YYYY-MM-DD は 2016-05-29 などです。誤った場合は取得できないと思います。
おまけ
ちなみに表計算ソフトを使ってプロットするとこんな感じになります。
#4時くらいにめっちゃ心拍数落ちてるけど、これって…。
ほかにも、眠りの浅い深いなどが取れるらしいので、レム睡眠とノンレム睡眠の間隔を
明らかにできればベストな睡眠時間がわかるかもしれないですね。これで健康まっしぐらです!
参考:Fitbit APIとPythonで心拍数時系列データの取得方法 | ミスターだけどドクターの頭の中
【日本正規代理店品】Fitbit ワイヤレス活動量計+心拍計リストバンド ChargeHR Large Black FB405BKL-JPN
- 出版社/メーカー: Fitbit
- 発売日: 2015/04/24
- メディア: エレクトロニクス
- この商品を含むブログ (7件) を見る