PythonでFitbit(3)

本ページの概要
Fitbitで測定したHRV(心拍変動),RHR(安静時心拍)を1週間分取得する方法を学習します。

PythonでHRV(心拍変動)・RHR(安静時心拍)データを取得する
下記のプログラム「getWeekHRV.py」をエディタで開発ディレクトリに作成し,USER_ID ,CLIENT_SECRET をセットします。さらにプログラム末尾の,
today=date(2025, 10, 15)
for var in range(0, 7):
部分をセットします。ターミナル上で,
python getWeekHRV.py
と入力し,実行する。正常に動作すると,
「23QTVF_HRV.csv」のようなファイルが開発ディレクトリに作成される。「getWeekRHR.py」も同様に使用する。

#getWeekHRV.py
import sys
import fitbit
import gather_keys_oauth2 as Oauth2
from datetime import datetime, timedelta
import json
from datetime import datetime, date, timedelta
 
print('getWeekHRV')
 
USER_ID = "hogehoge"
CLIENT_SECRET = "hogehoge"
 
def requestFitbit(DATE):
    global auth2_client
 
    # APIエンドポイントを使用してHRVデータを取得
    hrv_data = auth2_client.make_request(f'https://api.fitbit.com/1/user/-/hrv/date/{DATE}.json')
 
    OUTPUT_FILE = USER_ID + "_HRV.csv"
    with open(OUTPUT_FILE, 'a') as csv_file:
        csv_file.write(f"{DATE},")
        if "hrv" in hrv_data and len(hrv_data["hrv"]) > 0:
            hrv_info = hrv_data["hrv"][0]  # リストの最初の要素を取得
            csv_file.write(f"{hrv_info['value']['dailyRmssd']},{hrv_info['value']['deepRmssd']}\n")
        else:
            csv_file.write("No HRV data\n")
 
def writeindex():
    OUTPUT_FILE = USER_ID + "_HRV.csv"
    with open(OUTPUT_FILE, 'w') as csv_file:
        csv_file.write("date,dailyRmssd,deepRmssd\n")
 
# トークンの取得
server = Oauth2.OAuth2Server(USER_ID, CLIENT_SECRET)
server.browser_authorize()
ACCESS_TOKEN = str(server.fitbit.client.session.token['access_token'])
REFRESH_TOKEN = str(server.fitbit.client.session.token['refresh_token'])
 
print(ACCESS_TOKEN)
print(REFRESH_TOKEN)
 
# 認証
auth2_client = fitbit.Fitbit(USER_ID, CLIENT_SECRET, oauth2=True, access_token=ACCESS_TOKEN, refresh_token=REFRESH_TOKEN)
 
# インデックスの書き込み
writeindex()
 
# HRVデータのリクエスト
#today = datetime.today()
today = date(2025, 10, 15)
for var in range(0, 7):
    stamp = datetime.strftime(today - timedelta(days=var), '%Y-%m-%d')
    print(f"target: {stamp}", end=' ')
    requestFitbit(stamp)
# getWeekRHR.py
import sys
import fitbit
import gather_keys_oauth2 as Oauth2
from datetime import datetime, timedelta, date

print('getWeekRHR')
USER_ID     = "hogehoge"
CLIENT_SECRET = "hogehoge"

def requestFitbit(DATE):
    """
    指定日の安静時心拍数を取得して CSV に追記する。
    """
    global auth2_client

    # RHR は activities/heart エンドポイントから取得
    rhr_data = auth2_client.make_request(
        f'https://api.fitbit.com/1/user/-/activities/heart/date/{DATE}/1d.json'
    )

    OUTPUT_FILE = USER_ID + "_RHR.csv"
    with open(OUTPUT_FILE, 'a', encoding='utf-8') as csv_file:
        csv_file.write(f"{DATE},")
        if ("activities-heart" in rhr_data and
                len(rhr_data["activities-heart"]) > 0 and
                "restingHeartRate" in rhr_data["activities-heart"][0]["value"]):
            rhr_value = rhr_data["activities-heart"][0]["value"]["restingHeartRate"]
            csv_file.write(f"{rhr_value}\n")
        else:
            csv_file.write("No RHR data\n")

def writeindex():
    """
    CSV ヘッダーを書き込む(上書き初期化)。
    """
    OUTPUT_FILE = USER_ID + "_RHR.csv"
    with open(OUTPUT_FILE, 'w', encoding='utf-8') as csv_file:
        csv_file.write("date,restingHeartRate\n")

# ------- 認証 ------- #
server = Oauth2.OAuth2Server(USER_ID, CLIENT_SECRET)
server.browser_authorize()
ACCESS_TOKEN  = str(server.fitbit.client.session.token['access_token'])
REFRESH_TOKEN = str(server.fitbit.client.session.token['refresh_token'])

print(ACCESS_TOKEN)
print(REFRESH_TOKEN)

auth2_client = fitbit.Fitbit(
    USER_ID,
    CLIENT_SECRET,
    oauth2=True,
    access_token=ACCESS_TOKEN,
    refresh_token=REFRESH_TOKEN
)

# ヘッダー初期化
writeindex()

# 取得対象期間(今日は固定日付,必要に応じて datetime.today() に変更)
today = date(2025, 10, 15)
for var in range(0, 7):
    stamp = (today - timedelta(days=var)).strftime('%Y-%m-%d')
    print(f"target: {stamp}", end=' ')
    requestFitbit(stamp)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です