Loading [MathJax]/extensions/tex2jax.js

Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

IT技術 (Technology)

FitBitのAPIを使って心拍数を取得する(Python)

投稿日:2023年5月22日 更新日:

 

<目次>

FitBitのAPIを使って心拍数を取得する(Python)
 やりたいこと/概要
 STEP1:APIの準備
 STEP2:【Python】ライブラリのインストール
 STEP3:API認証(Access TokenとRefresh Tokenを取得)
 STEP4:【Python】心拍数の取得⇒データ加工⇒表示と出力

FitBitのAPIを使って心拍数を取得する(Python)

やりたいこと/概要

本記事では、FitBitのAPIを活用して、自分の心拍数データをリアルタイムに取得し、Pythonでデータの加工・可視化を行う手順を解説します。APIの登録から認証、データ取得、最終的なグラフ表示まで、一連のプロセスを順を追って説明します。

目次にもどる

STEP1:APIの準備

STEP1-1:アプリケーションの作成

・①開発者サイトのメニューから「Register An App」を選択
(図111)
・②「Log In」押下
(図112)
・③サインイン
(図113①)
(図113②)

・④ログイン完了
(図114)
・⑤アプリ登録に必要な情報を入力する
(図115)
(図116)
(図117)

STEP1-2:Client IDとClient Secretを取得

アプリケーション登録後、管理画面に表示されるClient IDとClient Secretをコピーし、後続の認証手順で利用できるよう控えておきます。
(図121)

STEP1-3:Access TokenとRefresh Tokenを取得

・①Webブラウザが起動し、FitBitの認証画面に遷移するので、ログインして認証を実施します。
(図131)

STEP2:【Python】ライブラリのインストール

 
・①コマンドプロンプト(またはターミナル)からpipを利用して、fitbitライブラリのインストールを実行します。
FitBitの操作で必要
  1. > pip install fitbit
 
(図211)
 
(結果例)
  1. Collecting fitbit
  2. Downloading fitbit-0.3.1.tar.gz (19 kB)
  3. Preparing metadata (setup.py) ... done
  4. ~中略~
  5. Successfully built fitbit
  6. Installing collected packages: fitbit
  7. Successfully installed fitbit-0.3.1
 

STEP3:API認証(Access TokenとRefresh Tokenを取得)

・①Cherrypyパッケージをインストールして、認証用のローカルサーバー環境を整えます。
認証の「gather_keys_oauth2.py」で必要
  1. > pip install cherrypy

(図212)

 
・②GitHubからpython-fitbitリポジトリをクローンし、必要なスクリプト類をローカルに用意します。
  1. > git clone https://github.com/orcasgit/python-fitbit.git
(図311①)
(図311②)

・③コマンド実行
(例)
  1. > C:/Python310/python.exe ".\python-fitbit\gather_keys_oauth2.py" '[ご自身のClient ID]' '[ご自身のClient Secret]'
(図312)
・④画面が開く
(図313)
・⑥表示された認証画面で「許可」をクリックし、認証手続きを完了させます
(図314①)
・⑦ターミナルにcodeが表示される
(図314②)

(結果例)

  1. [21/Jan/2023:13:38:09] ENGINE Listening for SIGTERM.
  2. [21/Jan/2023:13:38:09] ENGINE Bus STARTING
  3. CherryPy Checker:
  4. "" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36"
  5. [21/Jan/2023:13:38:16] ENGINE Bus STOPPING
  6. [21/Jan/2023:13:38:17] ENGINE HTTP Server cherrypy._cpwsgi_server.CPWSGIServer(('127.0.0.1', 8080)) shut down
  7. [21/Jan/2023:13:38:17] ENGINE Stopped thread 'Autoreloader'.
  8. [21/Jan/2023:13:38:17] ENGINE Bus STOPPED
  9. [21/Jan/2023:13:38:17] ENGINE Bus EXITING[21/Jan/2023:13:38:17] ENGINE Bus EXITED
  10. [21/Jan/2023:13:38:17] ENGINE Waiting for child threads to terminate...
  11. You are authorized to access data for the user: 氏名
  12. TOKEN
  13. =====
  14.  
  15. access_token = xxxxxxxxxxxxxxxxx
  16. expires_in = 28800
  17. refresh_token = xxxxxxxxxxxxxxxxx
  18. scope = ['social', 'settings', 'heartrate', 'nutrition', 'weight', 'activity', 'location', 'profile', 'sleep']
  19. token_type = Bearer
  20. user_id = xxxx
  21. expires_at = 1674304695.8990977
 

STEP4:【Python】心拍数の取得⇒データ加工⇒表示と出力:

STEP4-1:取得

(サンプルプログラム)

  1. import fitbit
  2. import pandas as pd
  3.  
  4. # メモしたID等
  5. CLIENT_ID = "xxx"
  6. CLIENT_SECRET = "xxxxxxxxxxxx"
  7. ACCESS_TOKEN = "xxxxxxxxxxxx"
  8. REFRESH_TOKEN = "xxxxxxxxxxxx"
  9.  
  10. # 取得したい日付
  11. DATE = "2023-01-20"
  12.  
  13. # ID等の設定
  14. authd_client = fitbit.Fitbit(CLIENT_ID, CLIENT_SECRET
  15. ,access_token=ACCESS_TOKEN, refresh_token=REFRESH_TOKEN)
  16. # 心拍数を取得(1秒単位)
  17. data_sec = authd_client.intraday_time_series('activities/heart', DATE, detail_level='1sec') #'1sec', '1min', or '15min'
  18. heart_sec = data_sec["activities-heart-intraday"]["dataset"]
  19. heart_sec[:10]
  20.  
  21. print(heart_sec)
  22.  
(図315)

STEP4-2:加工・プロット

(サンプルプログラム)
  1. import fitbit
  2. import pandas as pd
  3. import matplotlib as mpl
  4. import matplotlib.pyplot as plt
  5.  
  6. # メモしたID等
  7. CLIENT_ID = "xxxxxx"
  8. CLIENT_SECRET = "xxxxxxx"
  9. ACCESS_TOKEN = "xxxxxxx"
  10. REFRESH_TOKEN = "xxxxxxx"
  11.  
  12. # 取得したい日付
  13. DATE = "2023-01-20"
  14.  
  15. # ID等の設定
  16. authd_client = fitbit.Fitbit(CLIENT_ID, CLIENT_SECRET
  17. ,access_token=ACCESS_TOKEN, refresh_token=REFRESH_TOKEN)
  18. # 心拍数を取得(1秒単位)
  19. data_sec = authd_client.intraday_time_series('activities/heart', DATE, detail_level='1sec') #'1sec', '1min', or '15min'
  20. heart_sec = data_sec["activities-heart-intraday"]["dataset"]
  21. heart_sec[:10]
  22.  
  23. heart_df = pd.DataFrame.from_dict(heart_sec)
  24. heart_df.index = pd.to_datetime([DATE + " " + t for t in heart_df.time])
  25. heart_df.head()
  26. print(heart_df)
  27.  
  28. heart_df.plot(y="value", figsize=(20,5))
  29. heart_df.head()
  30. plt.show()
 
(図316)

補足

ブックマークしとく↓
https://dev.fitbit.com/apps/details/[ご自身のアプリID]

Adsense審査用広告コード


Adsense審査用広告コード


-IT技術 (Technology)
-

執筆者:


comment

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

関連記事

Anaplanのトレーニングの受講方法について

  <目次> (1) Anaplanのトレーニングの受講方法について  (1-1) 受講方法の概要  (1-2) Anaplan Communityの登録手順  (1-3) Anaplanの …

Confluenceでページ毎の閲覧者数を表示する方法について

  <目次> (1) Confluenceでページ毎の閲覧者数を表示する方法について  (1-1) ページ毎の閲覧者数の表示や、アクセス解析を行う方法について  (1-2) 試しにFree …

LangChainのChainやAgentとは?概要やサンプルプログラムをご紹介

  <目次> (1) LangChainのChainやAgentとは?概要やサンプルプログラムをご紹介  (1-1) やりたいこと  (1-2) Chain概要  (1-3) Chainサン …

no image

Azure FunctionsのPythonローカル開発をVS Codeで行うためのセットアップ手順

  <目次> (1) Azure FunctionsのPythonローカル開発をVS Codeで行うためのセットアップ手順  (1-1) STEP1:Node.js(含むnmp)のインストー …

Swaggerとは?APIのドキュメント生成方法(SwaggerのHello World)をご紹介

  <目次> (1) Swaggerとは?APIのドキュメント生成方法(SwaggerのHello World)をご紹介  やりたいこと  概要  (1-1) STEP1:Node.js ( …

  • English (United States)
  • 日本語
S