27 Jan 2018, 07:41

Fitbit Apiとpythonで心拍数の取得をする

はじめに

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 http://127.0.0.1:8080/ と入力
  • Default Access Type Read & Write を選択

次に、Access Tokenを取得する。取得するために、Pythonのツール、python-fitbitを利用する。

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")

以下のような時系列グラフが出力される。寝ている時間は心拍数が低い。