1週間ぶんのHRを取得する

計測したデータはすべてクラウド上に上がっているので、1週間ぶんのデータを取得することも可能です。おおまかな手順は下記の動画をご覧ください。

下記スクリプトは、指定した日付から遡って3日ぶんのHRを取得するスクリプトです。

#getWeekHR.py
import sys
import fitbit
import gather_keys_oauth2 as Oauth2
from datetime import datetime, date, timedelta
    
print('Hello FitbitAPP4') 
USER_ID     = ""; CLIENT_SECRET = ""
    
def requestFitbit(DATE):
    rval=""
    global auth2_client,USER_ID 
   
    fitbit_stats = auth2_client.intraday_time_series('activities/heart', DATE, detail_level='1min')
    HRstats = fitbit_stats['activities-heart-intraday']['dataset']
      
    OUTPUT_FILE = USER_ID+"_HR.csv"
    csv_file = open(OUTPUT_FILE, 'a')
     
    csv_file.write(DATE+",")
    for num1 in range(24):
        for num2 in range(60):
            key='{:02}'.format(num1)+':{:02}'.format(num2)+':00'
            hr=""
            for var in range(0, len(HRstats)):
                if str(HRstats[var]['time']) == key:
                    hr=str(HRstats[var]['value'])
                    break
            csv_file.write(hr)
            csv_file.write(",")              
               
    csv_file.write("\n")
    csv_file.close()
    return rval
##################################################
   
def writeindex():    
    global USER_ID 
    OUTPUT_FILE = USER_ID+"_HR.csv"
    csv_file = open(OUTPUT_FILE, 'a')
       
    csv_file.write(",")
    for num1 in range(24):
        for num2 in range(60):
            key='{:02}'.format(num1)+':{:02}'.format(num2)+':00'
            csv_file.write(key)
            csv_file.write(",")              
               
    csv_file.write("\n")
    csv_file.close()
##################################################
   
"""Get tokens"""
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'])
    
"""Authorization"""
auth2_client = fitbit.Fitbit(USER_ID, CLIENT_SECRET, oauth2=True, access_token=ACCESS_TOKEN, refresh_token=REFRESH_TOKEN)
    
"""request"""
   
writeindex()
today=date(2023, 6, 26)
for var in range(0, 3):
    stamp=datetime.strftime(today - timedelta(days=var), '%Y-%m-%d')
    print("target: " + stamp)
    requestFitbit(stamp)

無事に実行されると、「ID_HR.csv」のようなファイル名のデータが作成されます。エクセルで開くと、下記のような構造になっています。60(分)✕24(時間)=1440個のデータが3日ぶん格納されていることがわかります。

一週間ぶんのHRを取得して、平均HRのグラフをエクセルで書いてみましょう。