FitBit/Python210622

今日は、自分の心拍数25日分(5/28~6/21)で分析をしてみる。まずは、授業日と非授業日の比較から。

就寝中は案外差がないように見受けられる。活動時間帯は、やはり全般的に授業日が高いように見える。特に、9時付近、14~16時、19~21時あたりで授業日vs非授業日の差がついているように見える。14~16時は授業だろう。月曜日は専門演習、金曜日は生理心理学実験がある。9時付近は授業準備だろうか?間に合わなくて朝やることもある。19~21時はタイ料理のせいだろうか。とりあえず授業中頑張っている事がわかったので良かった。次は、土曜日,日曜日,全体平均の比較だ。

土曜日の就寝中心拍数が低い。一方で日曜日の深夜は全体平均より高い。日曜日に大学でまとめて仕事をするせいだろうか・・・。日曜部の8~10時が低いのは、自動車に乗っていないからだと思う(残りの日は全部車を運転している・・・)。土曜日は全体的に平均より低いように見えるが、なんとも言えない。

思えば自分は「土日しっかり休む」タイプの生活ではなく、休みが広く浅く分散しているような生活スタイルだ。平日と土日のコントラストがハッキリしているような生活の人だと、より明確に差が現れるのかもしれない。

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

    fitbit_stats = auth2_client.intraday_time_series('activities/heart', DATE, detail_level='1min')
    HRstats = fitbit_stats['activities-heart-intraday']['dataset']
   
    OUTPUT_FILE = "ALL.csv"
    csv_file = open(OUTPUT_FILE, 'a')
    csv_file.write(DATE+",")
    for var in range(0, len(HRstats)):
        csv_file.write(str(HRstats[var]['value']))
        csv_file.write(",")

    csv_file.write("\n")
    csv_file.close()

    return rval
##################################################

"""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'])
 
#print(ACCESS_TOKEN)  
#print(REFRESH_TOKEN)

"""Authorization"""
auth2_client = fitbit.Fitbit(USER_ID, CLIENT_SECRET, oauth2=True, access_token=ACCESS_TOKEN, refresh_token=REFRESH_TOKEN)
 
"""request"""
#DATE = "2021-06-19"
#today = datetime.today()
#requestFitbit(datetime.strftime(today, '%Y-%m-%d'))
#requestFitbit("2021-06-19")

today = datetime.today()
for var in range(0, 26):
    #day=today + timedelta(days=1)
    #print(var+":" + datetime.strftime(yesterday, '%Y-%m-%d'))
    stamp=datetime.strftime(today - timedelta(days=var), '%Y-%m-%d')
    print("target: " + stamp)
    requestFitbit(stamp)

24*60=1440サンプルあるはずが、日によって少し足りなかったりする。サンプル出来ていない時間帯がツメられてしまっているものと思う。正しく計算するには、タイムスタンプも反映させながらワークシートを作成する必要がありそうだ・・・。
 自宅でFitbitAPIにアクセスしようとしてハマった。途中で心が折れそうになるが、どうにか原因を特定、プログラムの改造にこぎつけた。注意点は下記の3つ。

1.自宅および主要ノートPCはポート8080を何かで使っているらしい。Application登録時のRedirect URLを8088に変更したら動作するようになった。これどういう意味があるんだろう?

2.Tokenは発行されるのにHRなどの計測値が落ちてこない・・・これは、ApplicationのOAuth 2.0 Application Type をPersonalにし忘れていたことが原因。

3.途中で「fitbit.exceptions.HTTPTooManyRequests: Too Many Requests」なるエラーが出て、一切リクエストができなくなる。リクエスト回数に制限があるらしい。これはアプリケーションを新たに登録してIDとSECRETを取得することで回避できた。

コメントを残す