無印吉澤

Site Reliability Engineering(SRE)、ソフトウェア開発、クラウドコンピューティングなどについて、吉澤が調べたり試したことを書いていくブログです。

タニタの Health Planet から新しいデータだけエクスポートして Google Spreadsheet にポコポコ足していく方法

f:id:muziyoshiz:20160111234201p:plain:w300

これまでのあらすじ

最近ウェストが気になってきたので、計測結果を Web サイト(Health Planet)に自動アップロードしてくれるタニタの体重計を買ったところ、そのサイトにエクスポート機能がなかった……。で、しぶしぶ Embulk output plugin を書いたら、とりあえず動いたのだった。

muziyoshiz.hatenablog.com

今回の内容

体重計(体組成計)の測定結果と一緒に、腹囲の測定結果や、ちょっとしたメモを記録したくなってきました。しかし、Health Planet のほうには自由記入欄のようなものはありません。

色々考えた結果、@ さん作の kataring/embulk-output-google_spreadsheets で Google Spreadsheet にデータを入れて、そこに手入力用の列を足すことにしました。これがうまくいったので、今回はその方法をご紹介します。

この記事を書いた時点のバージョン

OS X でしか試してませんが、Windows でも多分動くと思います。

事前準備

結構いろいろ用意する必要があります。

  • Health Planet API の準備
  • Google Drive API の準備
  • Google Spreadsheet ファイルの作成
  • Google Spreadsheet ファイルのパーミッション設定

Health Planet API の準備

前回の記事(Health Planet からデータをエクスポートするための embulk-input-healthplanet プラグイン)に詳しく書いたので、そちらをご覧ください。以下の情報が揃っていれば OK です。

  • Health Planet のログイン ID およびパスワード
  • 上記のアカウントで作成した Client ID および Client Secret

Google Drive API の準備

以下の手順で API を準備します。ただ、Google Developer Console の画面デザインはときどき変わるみたいなので、もし以下の手順と違っていたら、同じ機能を探してください。

Drive API の有効化

まず、以下の手順で Drive API を有効化します。Sheets API というものもありますが、embulk-output-google_spreadsheets が使うのはそっちじゃないのでご注意ください。

  • Google Developer Console にログインする
  • 何か適当な名前のプロジェクトを作る(名前は、例えば healthplanet とかでいい)
  • 「Google API を利用する」書かれたリンクなどから API Manager に移動して、Drive API を検索
  • Drive API の表示画面で、「API を有効にする」ボタンをクリック
f:id:muziyoshiz:20160123201213p:plain

Drive API に接続するための認証情報の作成

次に、以下の手順でサービスアカウント ID と、P12 キーを入手します。

  • API Manager のサイドバーから、認証情報の画面へ移動
  • 「新しい認証情報」ボタンを押し、「サービスアカウントキー」を選択
  • サービスアカウントとして「新しいサービスアカウント」を選択し、アカウント名を記入
    • アカウント名はなんでも良い。このアカウント名によってサービスアカウント ID が決まる
    • 例えば exporter というアカウント名を入力すると、サービスアカウント ID は exporter@healthplanet-xxxx.iam.gserviceaccount.com のようになる
  • キーのタイプとして P12 を選択
  • 拡張子 .p12 のファイルのダウンロードが始まるので、好きな場所に保存する
    • このファイルは二度とダウンロードできないので、なくしてしまったら認証情報の作成からやり直し
  • 秘密鍵のパスワードが表示されるので、メモする(※今回は特に使いません)
f:id:muziyoshiz:20160123201219p:plain

Google Spreadsheet ファイルの作成

Health Planet からエクスポートしたデータを追記する先を、Google Spreadsheet に作成します。

ファイルの URL は以下のような形式になります。 {{spreadsheet_id}} の部分がこの Spreadsheet ファイルの ID です。あとで使うのでメモしてください。

https://docs.google.com/spreadsheets/d/{{spreadsheet_id}}/edit

また、このファイルの1行目に、以下の内容を記載します。タブ区切りで示していますが、実際は11列に分けて書きます。列の名前が少しでも変わるとアップロードできなくなるので、最初はこのまま書いてください。

測定日時 モデル   体重  体脂肪率    筋肉量   筋肉スコア 内臓脂肪レベル2  内臓脂肪レベル1  基礎代謝量 体内年齢    推定骨量
f:id:muziyoshiz:20160123201628p:plain

Embulk の filter プラグインでカラム名を変えて、列名をそのカラム名と同じにすれば、上記と違う列名でも登録できます。ただ、この文章の意味がわからない場合はいじらないのが無難です。

Google Spreadsheet ファイルのパーミッション設定

最後に、サービスアカウントがこのファイルにアクセスできるように、パーミッションを設定します。これで、準備は完了です。

  • Spreadsheet ファイルの右上に表示されている「共有」ボタンをクリック
  • サービスアカウント ID(メールアドレス形式)を入力し、「完了」をクリック
    • このとき、権限は「編集可能」のままにしておくこと

設定ファイル

ここまでの準備が完了したら、以下の情報が手元に揃っているはずです。

  • Health Planet のログイン ID
  • Health Planet のパスワード
  • Client ID
  • Client Secret
  • サービスアカウント ID
  • P12 キー
  • Spreadsheet ファイルの ID

これらの情報を、以下の Embulk の設定ファイルの、{{ }} で囲まれた場所に記載してください。設定ファイルの名前はなんでもいいですが、この例では embulk-healthplanet.yml とします。

happyturn% cat embulk-healthplanet.yml
in:
  type: healthplanet
  login_id: {{Health Planet のログイン ID}}
  password: {{Health Planet のパスワード}}
  client_id: {{Client ID}}
  client_secret: {{Client Secret}}
  lang: ja
exec: {}
out:
  type: google_spreadsheets
  service_account_email: '{{サービスアカウント ID}}'
  p12_keyfile: '{{P12 キーが置かれた場所のファイルパス}}'
  spreadsheet_id: '{{Spreadsheet ファイルの ID}}'
  default_timezone: Asia/Tokyo

エクスポート処理の実行方法

以下のコマンドを実行すると、エクスポート処理が実行されます。

$ embulk run embulk-healthplanet.yml -o embulk-healthplanet.yml

設定に成功していれば、以下の図のように、エクスポートしたデータが Spreadsheet ファイルにポコポコ追加されていきます。

f:id:muziyoshiz:20160123201222p:plain

また、コマンドの実行が完了すると、embulk-healthplanet.yml のなかに、最後に取得したデータの計測日時が記録されます。そのため、同じコマンドをもう1回実行すると、新しいデータだけがエクスポートされて、同じファイルの末尾に追加されます。バッチファイルとか作って、1日1回くらいのペースで自動実行させておきましょう。

まとめ

こんな感じで、Embulk を使って、タニタの体重計の測定結果をいろいろいじれる環境が整いました。すでに追加された行については、値をいじったり、他の列にメモなどを追加したりしても大丈夫なので、他のデータ(腹囲とか運動記録とか)と組み合わせて色々遊んでみたいと思います。

参考文献

2016-02-02追記:launchd での定期実行

何度か動かして、特に問題無さそうなので、Mac OS Xでlaunchdでcronのように定期実行するメモ - launchd.plistの作成とか(tweeeetyのぶろぐ的めも)A launchd Tutorial を参考に、launchd で 30 分ごとに定期実行するようにしました。

Launchd setting for embulk-output-healthplanet