はじめに
fitbit ionicを購入しました! fitbit Charge, altaに続いて、3台目の購入となります。ここまでくると私もfitbit マニア??
購入の動機は、睡眠の深度を測る機能が欲しかったから。てっきり、浅い睡眠で起こしてくれる機能がついたと思ったのだけれども、それはなかった(T_T)。
別の理由は、fitbit初のスマートウォッチということで、ディベロッパーとしてなにか応援できないかと思ったから。というわけで、このHackableなガジェットをハックします! Let’s Hack begin。
Fitbit APIをつかってみる
データの取得をするために、Fitbit APIを利用する。
まずは、API の IDを取得する。
https://dev.fitbit.com/login からログインして、 REGISTER AN APP を選択。情報を入力する。
- Application Name 適当
- Description 適当
- Application Website 適当
- Organization 適当
- Organization Website 適当
- OAuth 2.0 Application Type Personalを選択
- Callback URL https://127.0.0.1:8080/ と入力
- Default Access Type Read & Write を選択
次に、Access Tokenを取得する。取得するために、Pythonのツール、python-fitbitを利用する。
-
https://github.com/orcasgit/python-fitbit
$ git clone git@github.com:orcasgit/python-fitbit.git $ cd python-fitbit $ pip install -r requirements/dev.txt $ ./gather_keys_oauth2.py
Access Tokenと Refresh Tokenをメモする。以下の4つはプログラムで必要になるのでメモする。
- Client ID
- Client Secret
- Access Token
- Refresh Token
スクリプトの作成
心拍数を取得するスクリプト。
import fitbit
import pandas as pd
CLIENT_ID = "xxx"
CLIENT_SECRET = "xxxx"
ACCESS_TOKEN = "xxxx"
REFRESH_TOKEN = "xxxx"
DATE = "2018-01-26"
client = fitbit.Fitbit(CLIENT_ID, CLIENT_SECRET,
access_token=ACCESS_TOKEN,
refresh_token=REFRESH_TOKEN)
stats = client.intraday_time_series('activities/heart', DATE, detail_level='1min')
heart_beat = stats["activities-heart-intraday"]["dataset"]
heart_df = pd.DataFrame.from_dict(heart_beat)
heart_df.index = pd.to_datetime([DATE + " " + t for t in heart_df.time])
heart_df.drop(["time"], axis=1, inplace=True)
heart_df.plot(y="value", figsize=(20,5))
import fitbit
import pandas as pd
CLIENT_ID = #
CLIENT_SECRET = #
ACCESS_TOKEN = #
REFRESH_TOKEN = #
DATE = "2018-01-26"
client = fitbit.Fitbit(CLIENT_ID, CLIENT_SECRET,
access_token=ACCESS_TOKEN,
refresh_token=REFRESH_TOKEN)
stats = client.intraday_time_series('activities/heart', DATE, detail_level='1min')
heart_beat = stats["activities-heart-intraday"]["dataset"]
heart_df = pd.DataFrame.from_dict(heart_beat)
heart_df.index = pd.to_datetime([DATE + " " + t for t in heart_df.time])
heart_df.drop(["time"], axis=1, inplace=True)
# plot
heart_df.plot(y="value", figsize=(20,5))
# export csv
heart_df.to_csv("heartbeat.csv")
以下のような時系列グラフが出力される。寝ている時間は心拍数が低い。