YoshihideShirai / Hp2Fit

HealthPlanet → Google fit/Fitbit 連携ツール
MIT License
19 stars 153 forks source link
fitbit google-apps-script google-fit healthplanet

HealthPlanet → Google fit/Fitbit 連携ツール

概要

HealthPlanetの体重と体脂肪率を、Google fit/Fitbitに転送するツール。
Google Apps Script(以下 GAS)を使用しているが、GASにはスケジュール機能があるため、
自動で連動される。

動作環境

構築手順

ソースコードをGoogle Apps Scriptへの取り込み

  1. Githubアカウントを持ってなければ作成。
  2. Githubで、このリポジトリをForkする。
  3. Google Apps Script GitHub アシスタント(以下、GASアシスタント)をインストール & setup https://chrome.google.com/webstore/detail/google-apps-script-github/lfjcgcmkmjjlieihflfhjopckgpelofo
    https://tonari-it.com/gas-github-assistant-install/
  4. Apps Scriptのプロジェクトを作成する。プロジェクト名はお好みで。
    https://script.google.com/home
  5. ForkしたGithubリポジトリが、 GASアシスタントから見えるようになるので、そのリポジトリで mainブランチを指定して 【↓】アイコンのpullを実行する。
  6. 本リポジトリにある props.gs.template を、Apps Scriptのプロジェクトに props.gsとしてコピーペースト実施。

ツールのセットアップ

  1. 各種APIに対応するクライアントキーやシークレットを作成する。
    [healthplanet] https://www.healthplanet.jp/create_client_id.do
    アプリケーションタイプ = Webアプリケーション
    [fitbit] https://dev.fitbit.com/apps/new
    OAuth 2.0 Application Type = Personal,Default Access Type = Read & Write
    [Google] 複雑なので、以下参照。
    https://qiita.com/potstickers/items/8fa8dce3e31efcde078a#googlefit-api-%E3%81%AE%E6%BA%96%E5%82%99
  2. 上記作成したキー&シークレットをprops.gsに記載する。
  3. props.gsの SCALE_MODELに体組成計のモデル名を記載する。(間違っても動作に影響ないが、Google Fitのデータベースの名前に使われる。)
  4. main.gs内のrun()を実行する。
  5. 起動すると実行ログにHealthPlanet認証用URLが出力されるので、ブラウザでアクセスする
  6. HealthPlanetのログイン画面が表示されるのでログインする
  7. HealthPlanetのアクセス許可画面が表示されるのでアクセスを許可する
  8. Google Driveの「現在、ファイルを開くことができません。」というエラー画面が表示される
  9. HealthPlanetがGASから引き渡したリダイレクトURLのパラメータ部分をカットしていることが
    エラーの原因なので、下記の通りSTATE部分を補う(実行ログからコピー)
    誤)https://script.google.com/macros/d/{SCRIPT ID}/usercallback?code={CODE}
    正)https://script.google.com/macros/d/{SCRIPT ID}/usercallback?code={CODE}&state={STATE}
  10. Success!と表示されれば登録が完了。HealthPlanetの連携アプリ一覧にツールが表示される
  11. 続いて実行ログにGoogleFit認証用URLが出力されるので、ブラウザでアクセスする
  12. 続いて実行ログにFitbit認証用URLが出力されるので、ブラウザでアクセスする
  13. 画面の指示に従って認証を完了させる
  14. main.gs内のrun()を実行する。これで、データが送信できていれば、OK。

定期実行

  1. Apps Scriptプロジェクトに、トリガー設定がある。 main.gs内のrun() を 1時間毎などに設定する。

お疲れ様でした!!!

トラブルシュート

参考(というかほぼそのまま)

https://qiita.com/potstickers/items/8fa8dce3e31efcde078a
https://qiita.com/hirotow/items/d7a6384ff85437d94b0a