業務ハックLab -とある情シスの備忘録-

とある情シスの備忘録的なものです。

【スポンサーリンク】

Fitbit API使ってアクティビティを取得しちゃおう!

皆さんこんにちは。
業務ハックLabのよーよんです。

皆さんの会社はテレワークしてますか?
テレワーク中に気になることといえばそう運動不足!!
私は今フルリモート勤務なのですが会社に出社していた時に比べて全然動かないんですよね・・・
出社している時はなんだかんだ言って出勤時や会社の中で動いていたんですよね。
あれよあれよという間に体重が増えていく・・・

ということでこれ運動せねばと一念発起し眠っていたFitbit charge2を引っ張り出してジョギングすることにしました。
どうせだったら「Power Platformの検証も兼ねてやっちゃおうぜ」ということでFitbit APIを使ってPower Automateでアクティビティを取得してみました。

今日はその方法についてまとめていきたいと思います。

Fitbitの設定方法

Fitbit APIを利用するので当然FitbitのIDが必要になるので事前に取得しておきましょう。IDを作成したらFitbitのdeveloperページでアプリを作成します。

  1. fitbitのdeveloperページを開きます。

    dev.fitbit.com

  2. 「Manage」から「Register An App」をクリックします。

    f:id:yo-yon:20210605101503p:plain

  3. 各欄に必要事項を入力しRegisterをクリックします。(ほぼ適当でOK)

    f:id:yo-yon:20210605101527p:plain

    項目名 内容
    Application Name アプリケーションの名前を入力 適当でOK
    Description アプリケーションの説明を入力 適当でOK
    10文字以上入力が必要
    Application Website アプリケーションのURLを入力 適当でOK
    例)http://localhost/
    Organization 所属組織 適当でOK
    Organization Website 所属組織のURLを入力 適当でOK
    例)http://localhost/
    Terms of Service URL 利用規約のURLを入力 適当でOK
    例)http://localhost/
    Privacy Policy URL プライバシーポリシーのURLを入力 適当でOK
    例)http://localhost/
    OAuth 2.0 Application Type Personalを選択
    Callback URL http://127.0.0.1:8080/と入力
    リダイレクトが発生しないURLを入力します。
    Default Access Type Read-Onlyを選択
  4. アプリが出来上がるので「OAuth 2.0 Client ID」と「Client Secret」を控えておき(後述のPower Automateで使用します )、「OAuth 2.0 tutorial page」をクリックします。

    f:id:yo-yon:20210605101543p:plain

  5. 「Authorization Code Flow」を選択し、青字になっている個所をクリックします。

    f:id:yo-yon:20210605101652p:plain

  6. 「ページに到達できません」と表示されますがURL欄に表示されている「code=」と「#_=_」の間の部分をコピーしてください。

    f:id:yo-yon:20210605101743p:plain

  7. tutorialページに戻り、「1A Get Code」のCode欄に6でコピーした値をペーストします。
    そうすると下にcurlから始まるコードが出てくるのでコピーしてメモ帳などに貼ります。

    f:id:yo-yon:20210605101810p:plain

  8. メモ帳に貼り付けたら「curl」の後ろに「.exe」と入力し、各行にある「\」(もしくは「¥」)を削除してさらに改行も削除します。

    f:id:yo-yon:20210605101843p:plain

  9. PowerShellを起動したら先ほど成形したメモ帳のデータを貼り付け、Enterを押します。

    f:id:yo-yon:20210605101856p:plain

  10. 認証が成功すると「refresh_token」が取得できますのでメモ帳などに貼り付けておきます。

    f:id:yo-yon:20210605101921p:plain

Fitbit側の設定はこれで完了です。

Power Automateの設定

Power Automateでは定期的にFitbit APIからデータを取得してくる形にしますがFitbitの設定で取得したrefresh_tokenを使用して都度新しいaccess_tokenを取得し認証を行います。
理由としてはaccess_tokenもrefresh_tokenも有効期限が設定されている為です。

Fitbitから「Run」のアクティビティを取得するフローを作りたいと思います。

リフレッシュトークンなどの格納先を作成する

Fitbitの設定で取得した「refresh_token」や「OAuth 2.0 Client ID」と「Client Secret」を格納しておく場所を用意します。
今回はExcel Onlineを使用します。テーブル化必須です。

f:id:yo-yon:20210605102056p:plain

項目名 内容
key 1
refresh_token Fitbitの設定で取得したリフレッシュトークンを入力
ClientID Fitbitの設定でアプリ作成した際に設定されたをOAuth 2.0 Client IDを入力
ClientSecret Fitbitの設定でアプリ作成した際に設定されたをClient Secretを入力

フローを作成する

準備ができたらフローを作成していきます。
今回はスケジュールで自動的に取得するフローを作成します。

  1. Power Automateを立ち上げ、ブレードメニューから作成をクリックします。

    f:id:yo-yon:20210605102410p:plain

  2. スケジュール済みクラウドフローをクリックします。

    f:id:yo-yon:20210605102437p:plain

  3. フロー名と各種設定をして作成をクリックします。

    f:id:yo-yon:20210605102448p:plain

  4. Excel Onlineコネクタの「行の取得」で先ほど作成したデータの行取得を行います。

    f:id:yo-yon:20210605102638p:plain

  5. 後述の認証の際にClientIDとClientSecretを使用するのですがBasic認証で送る必要があるのでこの二つをコロン区切りで結合したものbase64エンコードした結果を変数に入れます。
    Basic認証とは

    f:id:yo-yon:20210605102706p:plain

    数式
    base64(concat(outputs('行の取得')?['body/ClientID'],':',outputs('行の取得')?['body/ClientSecret']))
  6. いつのデータを取得するのか指定できるように変数を設定します。

    f:id:yo-yon:20210605102726p:plain

    数式
    例)一日前のデータを取得する場合
    addDays(convertTimeZone(utcNow(), 'UTC', 'Tokyo Standard Time'),-1,'yyyy-MM-dd')
  7. 次にHTTPコネクタを利用してアクセストークンを取得します。

    f:id:yo-yon:20210605102827p:plain

    項目名 内容
    方法 「POST」を選択
    URI https://api.fitbit.com/oauth2/token
    ヘッダー1行目 キーの入力:Authorization
    値の入力:Basic @{variables('Authorization')}
    ヘッダー2行目 キーの入力:Content-Type
    値の入力:application/x-www-form-urlencoded
    本文 grant_type=refresh_token&refresh_token=@{outputs('行の取得')?['body/refresh_token']}
  8. 取得したアクセストークンとリフレッシュトークンをJSONの解析で取り出します。

    f:id:yo-yon:20210605102851p:plain
    スキーマは下記参照

  9. 新たに取得したリフレッシュトークンは次回の実行時に使用するのでExcel Onlineのデータを更新して上書きします。

    f:id:yo-yon:20210605103108p:plain

  10. HTTPコネクタを利用してアクティビティ情報を取得します。

    f:id:yo-yon:20210605103126p:plain

    項目名 内容
    方法 「GET」を選択
    URI https://api.fitbit.com/1/user/-/activities/date/@{variables('TargetDate')}.json
    ヘッダー1行目 キーの入力:Authorization
    値の入力:Bearer @{body('JSON_の解析-トークン取り出し')?['access_token']}
    ヘッダー2行目 キーの入力:Content-Type
    値の入力:application/json
  11. 取得した情報をJSONの解析で取り出します。

    f:id:yo-yon:20210605103155p:plain

    スキーマは下記参照

ここまでできれば後は取り出した情報をTeamsの特定チャネルに投稿したりTwitterに投稿したりと色々できます。
ここからは皆さんの好きな形のフローを組んでみてください。
ちなみにFitbitのAPIの情報については以下のサイトに記載があるのでこちらも確認してみてください。

dev.fitbit.com

また今回のフローを作成するにあたりMicrosoft MVPのからめもさんのブログを参考にさせて頂きました。
とても勉強になりますので是非見てみてください!

blog.karamem0.dev

如何だったでしょうか?
今回、私もこのフローを組むのに色々検証して調べながら作りましたが新しいことを学べるのって楽しいですね。
皆さんも是非お試ししてみてください。
それでは皆さん良い業務ハックライフを~


 

免責事項