Fitbit/Python Instructions

※本記事は公開を想定して書かれています。

前回のあらすじ

データを取得した。

今回

Pythonを用いて,Fitbitに蓄積されたデータを取り出していく方法をして残しておきます。

まず,大まかな流れは以下の通りです。

  1. Fitbitを装着して,データを取得。
  2. FitbitをAppと同期。(サーバーにデータが記録)
  3. Fitbit Developerにて,APP Registration
  4. Anaconda install
  5. Anaconda作業フォルダ変更
  6. (Notepad++ install)
  7. コードをpyファイル化
  8. Anacondaでpyファイルを実行
  9. Excel閲覧

というような感じです。

解説すべきところを詳細に説明していきます。

3.Fitbit Developerにて,APP Registration

これは,Fitbitに「APP作って,データ取得するよ~」と言うものです。

  1. Fitbit Developerサイトにlogin
  2. 右上から,Manage > Register An APP
  3. Application Name : 任意。
    Description : APPの内容説明。
    Application Website URL : Website URLを持っているなら記載。私は,先生のリンクを借りました。
    Organization : このAPPが所属している組織。先生と同じにしました。
    Organization Website URL : OrganizerのURL。先生はApplication Website URLと同じ。
    Terms of Service URL : APPの利用規約。先生は同上。
    OAuth 2.0 Application Type : Personal
    Redirect URL : デフォルトhttp://127.0.0.1:8080/ 先生http://127.0.0.1:8088/

先生はPort8088。私はPort8080でできました。ピリオドとコロンを間違えたのかなと思ったり

元記事はこちら

4.Anaconda install

5.Anaconda作業フォルダ変更

Pythonファイルを扱うAnacondaをinstall.

元記事からインストールして,作業フォルダを変更してください。

見れない方はこちら

6.(Notepad++ install)

[Notepad++]で検索してインストールしてください。

おおよそ窓の社からになると思います。

7.コードをpyファイル化

Notepad++で元記事のコードをコピペ。pyファイルとして保存。

見れない方はページ下部↓211104のコードとなっています。

APP Registrationしたときに発行されたUSER_IDCLIENT_SECRETを,
Line9(以下L9)の””間に入力
1度目のAPP Registrationから時間が空いた場合は,CLIENT_SECRETが変わっている可能性があります。

保存したファイルは,変更した作業フォルダに入れることを忘れずに

心拍数のデータ取得なら211104のコードをおススメします。

8.Anacondaでpyファイルを実行

Anacondaでと入力, Enter.

私は,211104.pyと保存しています。任意のファイル名で保存してください。

9.Excelで閲覧

作業フォルダ内に,ALL.csvが作成されています。

実行完了後にcsvファイルを開いた方がいいかもしれません。

あとは,xlsxファイルにするなり好きにしてください。

何のグラフかは言わないけど,試しに出してみました。

そのままのコードだと,ALL.csvと出力されます。

L18とL43のファイル名を変更することによって,ALL以外のファイル名で出力することができます。

211104コード

import sys
import fitbit
import gather_keys_oauth2 as Oauth2
from datetime import datetime, date, timedelta
  
print('Hello FitbitAPP4') 
 
#nagano
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 num1 in range(24):
        for num2 in range(60):
            key='{:02}'.format(num1)+':{:02}'.format(num2)+':00'
            #print(key+"/")
            hr=""
            for var in range(0, len(HRstats)):
                #csv_file.write(str(HRstats[var]['time']))
                #csv_file.write(",")            
                if str(HRstats[var]['time']) == key:
                    hr=str(HRstats[var]['value'])
                    #print("hit")
                    break
            csv_file.write(hr)
            csv_file.write(",")              
             
    csv_file.write("\n")
    csv_file.close()
    return rval
##################################################
 
def writeindex():   
    OUTPUT_FILE = "ALL.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'])
  
#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")
 
writeindex()
today = datetime.today()
for var in range(0, 150):
    #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)

コメントを残す

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