皆さんこんにちは。
業務ハックLabのよーよんです。
皆さんの会社はテレワークしてますか?
テレワーク中に気になることといえばそう運動不足!!
私は今フルリモート勤務なのですが会社に出社していた時に比べて全然動かないんですよね・・・
出社している時はなんだかんだ言って出勤時や会社の中で動いていたんですよね。
あれよあれよという間に体重が増えていく・・・
ということでこれ運動せねばと一念発起し眠っていたFitbit charge2を引っ張り出してジョギングすることにしました。
どうせだったら「Power Platformの検証も兼ねてやっちゃおうぜ」ということでFitbit APIを使ってPower Automateでアクティビティを取得してみました。
今日はその方法についてまとめていきたいと思います。
Fitbitの設定方法
Fitbit APIを利用するので当然FitbitのIDが必要になるので事前に取得しておきましょう。IDを作成したらFitbitのdeveloperページでアプリを作成します。
- fitbitのdeveloperページを開きます。
- 「Manage」から「Register An App」をクリックします。
- 各欄に必要事項を入力しRegisterをクリックします。(ほぼ適当でOK)
項目名 内容 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を選択 - アプリが出来上がるので「OAuth 2.0 Client ID」と「Client Secret」を控えておき(後述のPower Automateで使用します )、「OAuth 2.0 tutorial page」をクリックします。
- 「Authorization Code Flow」を選択し、青字になっている個所をクリックします。
- 「ページに到達できません」と表示されますがURL欄に表示されている「code=」と「#_=_」の間の部分をコピーしてください。
- tutorialページに戻り、「1A Get Code」のCode欄に6でコピーした値をペーストします。
そうすると下にcurlから始まるコードが出てくるのでコピーしてメモ帳などに貼ります。
- メモ帳に貼り付けたら「curl」の後ろに「.exe」と入力し、各行にある「\」(もしくは「¥」)を削除してさらに改行も削除します。
- PowerShellを起動したら先ほど成形したメモ帳のデータを貼り付け、Enterを押します。
- 認証が成功すると「refresh_token」が取得できますのでメモ帳などに貼り付けておきます。
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を使用します。テーブル化必須です。
項目名 | 内容 |
key | 1 |
refresh_token | Fitbitの設定で取得したリフレッシュトークンを入力 |
ClientID | Fitbitの設定でアプリ作成した際に設定されたをOAuth 2.0 Client IDを入力 |
ClientSecret | Fitbitの設定でアプリ作成した際に設定されたをClient Secretを入力 |
フローを作成する
準備ができたらフローを作成していきます。
今回はスケジュールで自動的に取得するフローを作成します。
- Power Automateを立ち上げ、ブレードメニューから作成をクリックします。
- スケジュール済みクラウドフローをクリックします。
- フロー名と各種設定をして作成をクリックします。
- Excel Onlineコネクタの「行の取得」で先ほど作成したデータの行取得を行います。
- 後述の認証の際にClientIDとClientSecretを使用するのですがBasic認証で送る必要があるのでこの二つをコロン区切りで結合したものbase64でエンコードした結果を変数に入れます。
Basic認証とは
数式 base64(concat(outputs('行の取得')?['body/ClientID'],':',outputs('行の取得')?['body/ClientSecret'])) - いつのデータを取得するのか指定できるように変数を設定します。
数式 例)一日前のデータを取得する場合
addDays(convertTimeZone(utcNow(), 'UTC', 'Tokyo Standard Time'),-1,'yyyy-MM-dd') - 次にHTTPコネクタを利用してアクセストークンを取得します。
項目名 内容 方法 「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']} - 取得したアクセストークンとリフレッシュトークンをJSONの解析で取り出します。
スキーマは下記参照 - 新たに取得したリフレッシュトークンは次回の実行時に使用するのでExcel Onlineのデータを更新して上書きします。
- HTTPコネクタを利用してアクティビティ情報を取得します。
項目名 内容 方法 「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 - 取得した情報をJSONの解析で取り出します。
スキーマは下記参照
ここまでできれば後は取り出した情報をTeamsの特定チャネルに投稿したりTwitterに投稿したりと色々できます。
ここからは皆さんの好きな形のフローを組んでみてください。
ちなみにFitbitのAPIの情報については以下のサイトに記載があるのでこちらも確認してみてください。
また今回のフローを作成するにあたりMicrosoft MVPのからめもさんのブログを参考にさせて頂きました。
とても勉強になりますので是非見てみてください!
如何だったでしょうか?
今回、私もこのフローを組むのに色々検証して調べながら作りましたが新しいことを学べるのって楽しいですね。
皆さんも是非お試ししてみてください。
それでは皆さん良い業務ハックライフを~