Fitbit Web APIを利用して心拍数の生データを取得する方法【動画版あり】
この記事について
この記事ではNode.jsで Fitbit Web API を利用して心拍数の生データを取得する方法について紹介します。
おおまかな手順
おおまかな手順を下記に示します。
- Fitbitのアプリ登録
- Webアプリのコーディング
- 動作確認
Fitbitのアプリ登録
Fitbit Web APIを利用するにはアプリをFitbitに登録する必要があります。 Fitbit SDK のページにアクセスして右上にある Manage > Register An App をクリックします。
「Login」ページが表示されたら「Log In」ボタンをクリックします。
ログインフォームが表示されたら「Continue with Google」ボタンを利用するか、メールアドレスとパスワードを入力してから「Login」ボタンをクリックします。
「Register an application」ページが表示されたら下記の内容を入力してから「Register」ボタンをクリックします。
- Application Name: Get Heart Rate Intraday by Date
- Description: This app allows the user to retreive heart rate intraday by date.
- Application Website URL: http://localhost:3000/
- Organization: Lorem Ipsum Co. Ltd.
- Organization Website URL: https://www.loremipsum.co.jp/
- Terms of Service URL: http://localhost:3000/terms/
- Privacy Policy URL: http://localhost:3000/privacy/
- OAuth 2.0 Application Type: Personal
- Redirect URL: http://localhost:3000/callback
- Default Access Type: Read Only
- I have read and agree to the terms of service: チェックを入れる
「Applications I registered」ページが表示されたら下記の2点を控えます。
- OAuth 2.0 Client ID
- Client Secret
Webアプリのコーディング
下記のコマンドを実行してコーディングの準備をします。
mkdir column-fitbit-api
cd column-fitbit-api
npm init -y
npm install --save dotenv express node-fetch@2
touch .env main.js
エディタでcolumn-fitbit-api/.envを開き、前の手順で控えたOAuth2.0ClientIDとClientSecretをそれぞれFITBIT_CLIENT_IDとFITBIT_CLIENT_SECRETとして入力します。
エディタでcolumn-fitbit-api/main.jsを開き、下記の内容を入力します。
ポイントを下記に示します。
- アクセストークンを要求する時に必要となるランダムな文字列verifierを生成しています。
- 認可エンドポイント(Fitbitのログインフォーム)へのリダイレクト時に必要となるchallengeを生成しています。なお、challengeはverifierのSHA-256ハッシュの Base64URL です。
- /signinへのアクセスを認可エンドポイントへリダイレクトします。クエリ文字列のcode_challengeには先の手順で生成したchallengeを指定します。
- /callbackは認可エンドポイントからリダイレクトされる時に指定されます。
- アクセストークンを要求しています。リクエストボディのcodeにはクエリ文字列経由で渡される認可コードを指定し、リクエストボディのcode_verifierには先の手順で生成したverifierを指定します。
- アクセストークンの取得が失敗した場合、エラーメッセージを表示して処理を中断します。
- 心拍データを要求しています。Authorizationヘッダーに先の手順で取得したアクセストークンを指定しています。
- 心拍データの取得が失敗した場合、エラーメッセージを表示して処理を中断します。
- 心拍データの取得が成功した場合、取得したデータをJSON形式で出力します。Webブラウザで表示した時に改行して表示されるようにContent-Typeとしてtext/plainを指定していますが、本来はapplication/jsonの方が適しています。
- Base64URLへ変換する関数です。
- バッファのSHA-256ハッシュを計算する関数です。
動作確認
下記のコマンドを実行してWebアプリを起動します。
node -r dotenv/config main.js
Webブラウザで http://localhost:3000/signin にアクセスします。
認可エンドポイントへリダイレクトされ、Fitbitの認証フォームが表示されたら「Continue with Google」ボタンを利用するか、メールアドレスとパスワードを入力してから「Login」ボタンをクリックします。
Fitbitの認可フォームが表示されたら心拍数にチェックを入れてから「許可」ボタンをクリックします。
http://localhost:3000/callback へリダイレクトされ、心拍データがページに出力されます。
おわりに
心拍数の生データ(activities-heart-intraday)を取得するにはFitbitのアプリ登録時にOAuth 2.0 Application TypeをPersonalにする必要があります。
私は間違ってServerに設定してしまい期待した通りに動かず小一時間ハマってしまいました(泣)
皆さまにおかれましては貴重なお時間を費やさぬようご留意ください。
最後までお読みいただきありがとうございました!
Discussion