我终于成功提取华为运动健康APP数据到当日日记

早上打开日记,睡眠追踪一节里已经躺着一行字:几点入睡、几点醒、深睡多久、REM 多长、夜里醒没醒,……。下面还有运动、步数、心率、血氧、血压数据。都是昨晚定时任务跑出来的,我一根手指没动。

为这几行字,我折腾了快一年。

数据带不走

我戴华为智能手表,手机是 vivo。手表监控我的健康、运动状况,数据都进入手机里的华为运动健康App。这个 App 你能用,能看,数据导不出来。我希望每日导出运动健康数据,提供给大模型分析、检测、提供建议。

去年我写过一篇《一款提取华为运动健康数据的手机APP》,用安卓无障碍服务模拟人手,把「我的数据」页一屏一屏点下来。能跑,不稳。华为一改版,界面对不上;手机厂商的后台省电,动不动把进程杀掉;锁屏时经常起不来。修修补补几个月,我让它退役了。

今年换思路,不撬界面,走它开的口子。华为留了 Health Kit 授权,整条路最后是这样:

1
华为运动健康 →(Health Kit 授权)→ Health Connect(手机本地) → Health Sync 读取导出 → CSV 落到 Google Drive → Mac 每晚定时拉取解析 → 写进 Obsidian 日记

开条缝

代码都是 AI 智能体写的。我出问题,拍板,验收。一共五步,坑都在步骤里。

第一步,手机上

先装 Health Sync,官网 healthsync.app,大陆的机器找它的专用安装包,应用商店不一定有。

装好,去华为运动健康。我的,隐私管理,数据共享与授权,把 Health Kit 打开。这一步是整条路的地基,数据从这里合法流出去,不碰界面,也不碰数据库。

然后打开 Health Sync,配两个东西。源选 Health Connect,目标选 Google Drive,登录一次谷歌账号。

配目标时容易犯懵。华为云盘这一项,列表里没有。不是操作错了,它只在华为和荣耀手机上出现,别的机型看不见。Google Drive 倒是都有,但动手前先确认你的网络能稳定访问。做不到的,华为手机改选华为云盘,别的机型看文末的替代方案。

配完手动触发一次同步。谷歌盘里冒出一批文件,名字像「步数 2026.09.03 Health Connect.csv」。看到这批文件,最难的部分就完了。

第二步,电脑上

电脑要能读你的谷歌盘,得走一遍 OAuth。谷歌后台开 Drive API,生成密钥,跑一次授权,令牌存在本地。标准流程,教程一搜一堆,让 AI 带着做也行。

拉文件时撞上一个怪事。按文件类型 text/csv 搜,一条都不返回。查了半天,谷歌把这批 CSV 的类型标成了 text/troff。按文件名搜才对,比如 contains “Health Connect.csv”。

盘里还有第二种文件,名字带两个日期,像「2026.08.03-2026.09.02」。那是月度汇总,解析时跳过,只拿单日的。

第三步,解析

这步最费工夫交给AI来做。每类指标一张表,长得都不一样。

步数、心率、血氧、消耗,一行一个时间点,加总取平均就完事。

睡眠表是日期、时间、持续秒数、阶段,一行一个阶段。我在这张表上修了三回。躺在床上没睡着的那段 awake,头一版算成了夜间醒来。醒来时间,我一开始取最后一段的开始时刻,后来对不上总时长才发现不对,改成开始时刻加持续时长,醒来时间往后挪了 23 分钟。跨零点的觉,归属按醒来那天算,不按入睡那天。

血压表的列序是反的。第 3 列是舒张压,第 4 列才是收缩压,一写反,收缩压和舒张压整对掉了个,血压数就全乱了。

运动这类我漏了一个礼拜才发现。它的文件名不带 Health Connect 字样,叫「MULTISPORT 2026.09.05 06.54.csv」,按统一关键词搜根本搜不出来。单独给它写了检索,才把漏掉的晨练补回来。文件里还有个活动类型字段,我这几次记出来都是 MULTISPORT,一个通用码,活动名称也是空的。想要具体类型,得在手表上开始运动时就选具体模式,跑步选跑步,健走选健走。脚本里我先把这个码显示成综合训练。

再补两个小坑。CSV 编码有的是 utf-8 带 BOM,有的是 GBK,读的时候都要兼容。第一列的日期里带完整时间,第二列又给一遍,拼字符串时防重复。

第四步,写进日记

我的日记由 Obsidian 模板生成,健康区下分睡眠追踪、运动记录等几个小节。写入规则定死三条。睡眠行,写进醒来那天的睡眠追踪。运动行,写进当天的运动记录。步数心率血压的汇总,写进一个单独的 Health Sync 小节。

第五步,挂定时

脚本挂在每晚 23:40 的定时任务里,参数传昨天的日期。选这个点有讲究,昨晚的觉这时候才记完整,按醒来日归属,正好落在该落的日记上。

验证的笨办法最好使。同一天连跑两遍,第二遍全部输出已存在,就成了。

跑起来的样子

跑通那天,日记里长出这么几行。

  • 睡眠:零点后入睡 · 清晨醒 · 深睡一个多小时 · REM 近一小时 · 夜醒 0 次
  • 晨练:综合训练 · 时长、消耗、平均心率、最高心率都记下了
  • 汇总:步数一万两千多 · 心率最高和平均都记下了 · 血氧均值 98 左右
  • 血压只在测量的那天出现,量了就写,没量空着。

关于网盘

Google Drive 无法访问的话,华为手机改选华为云盘,非华为手机可以在数据落到 Health Connect 之后换本地方案,用能读 Health Connect 的工具导出,数据线或局域网传回电脑。

另外,Health Sync 是付费应用,有试用期,并不贵。我的取舍是明细最终都回到自己电脑,日记不上云。用 iPhone 的朋友别照抄这篇,Health Auto Export 配 iCloud 那条路更顺。

落笔