iPhone のヘルスケア apple_health_export

iPhone のヘルスケア アプリ、体重とか体温とか入力してるんだけど、外には書き出せないのかな。

  1. ヘルスケア アプリ
    1. 「概要」画面
      1. 右肩 人型マーク
    2. 人型マーク 画面
      1. 画面最下部に「すべてのヘルスケアデータを書き出す」リンク
        1. 押下
      2. 「ヘルスケアデータを書き出す」ダイアローグ
        1. 「書き出す」釦
          1. 押下
      3. 書き出し中
      4. 「書き出したデータ」zipデータ
        1. 送り先選択
        • メールとかメッセージかなあ、あるいは"ファイル"に保存
        • ファイル名注意「書き出したデータ.zip」前のがあると置き換える
      5. 保存しました
    3. 人型マーク画面「完了」
      1. 押下
    4. 「概要」画面

として、データがファイルで手に入る。何とかして PCに持って来よう。

Windows PowerShell

> Expand-Archive .\書き出したデータ.zip
\書き出したデータ> tree /F
フォルダー パスの一覧
……
└─apple_health_export
        export.xml
        export_cda.xml

XML データ。
見たいあたり CSV にしましょうか。

export_cda.xml が入力データっぽい、今日はそれを読む。export.xml の方はサイズが大きい量も多く、IPhone で自動収集されるデータ、歩数とか、入ってるみたい。

helth_care_data.rb

require 'rexml/document'

REXML::Document.new(ARGF.read) \
  .root \
  .get_elements('//component') \
  .map do |comp|
    {
      high:  [:attributes, :values],
      value: [:get_text,   :value ],
      unit:  [:get_text,   :value ],
      type:  [:get_text,   :value ],
    } \
    .map do |key, (method, value)|
      comp.get_elements("*//#{key}").first.send(method).send(value)
    end \
    .join(',')
  end \
#  .sort \
  .join("\n") \
  .display

XML項目の説明は特にしないが、日付 observation/effectiveTime/high は属性値に値があるので #attributes.values で値を取る、そうすると配列になるのだが、属性が一つしかないのでまあ何とかなる。

>ruby helth_care_data.rb 書き出したデータ\apple_health_export\export_cda.xml

こんな感じかな。