用于将心率数据从iOS Health传输到计算机的命令行工具。与一个配套的iOS快捷方式一起工作。

heartbridge的Python项目详细描述


Heartbridge:iOS心率数据导出

Build Status

结合苹果手表,iOS健康应用程序包含丰富的心率读数。我总是发现这些读数在健康应用程序中有点难以使用,并且无法找到一种方法将它们轻松导出到我可以操作/可视化读数的格式(例如JSON或CSV文件)。在

幸运的是,使用Shortcuts应用程序,访问这些数据要容易得多。它结合了一个快捷方式和一个快速的HTTP端点,可以将心率数据从iOS设备传输到Mac或PC上,这对我来说是一个有趣的小实验,看看这两者如何协同工作。除了Python标准库中已经包含的内容之外,它没有依赖关系。在

Heartbridge是一个命令行程序,可以从快捷方式(通过HTTP)接收数据,自动将其导出到您选择的目录(CSV或JSON格式),并根据文件所覆盖的日期范围自动命名文件。导出的文件包含时间戳(“健康”中的“开始日期”)和心率(“健康”中的“值”)。在

注意:这是为在本地计算机上运行而设计的!它并不是为了部署到服务器或任何东西上,而且还没有准备好生产。仅在信任本地网络上的设备时运行。在

要求

你需要两样东西:

  • 安装了Python(>;=3.6)的计算机
  • 在同一网络上安装了Shortcuts的iPhone

第一次运行时,快捷方式将提示您访问您的健康数据(特别是心率数据)。在

入门

  1. 在命令行使用pip安装heartbridge(或使用releases下的分发包):
pip install heartbridge
  1. 然后,在命令行中运行heartbridge
^{pr2}$

这将以CSV格式将所有导出的文件保存到当前工作目录中。您可以用--directory--type参数覆盖这两项。如果我希望桌面上有JSON文件,我可以使用:

heartbridge --directory ~/Desktop --type json

您还可以通过向port传递参数来更改heartbridge将侦听上的数据的端口(默认为8888)。要获得可以传递的参数的完整列表,请键入heartbridge --help。在

  1. 记下脚本输出的端点URL,并确保在防火墙提示时允许脚本接受传入连接。在本例中,我的将是http://matt-mac.local:8888

The line of terminal output "Waiting to receive heart rate sample data at http://matt-mac.local:8888" tells me that my endpoint URL is http://matt-mac.local:8888

  1. 在你的iPhone上,download the shortcut to extract Health samples。它将询问您刚才提到的HTTP端点URL是什么。在

  2. 快跑!系统将提示您选择要覆盖的日期范围。指定的日期范围的结束日期不包括在返回的数据中。例如,要获取2020年5月2日的所有数据:

To select all data for May 2nd, 2020, you would select a date range between May 2nd and 3rd

脚本将从快捷方式接收到的有关数据的信息输出到控制台:

Information about the data received by the script (number of samples and path of the file produced) is outputted to the console

  1. 停止侦听并继续运行新的数据。当您完成导出所需的所有数据时,请停止运行脚本(Ctrl-C)。享受探索你的心率数据吧!在

所有命令行选项:

  • --help:打印帮助文本。在
  • --directory:设置导出文件的输出目录。默认为当前目录。将创建不存在的目录。在
  • --type:设置输出文件类型。可以是csv或json。默认为csv。在
  • --port:设置端口以侦听上的HTTP请求。默认为8888。在

注释

快捷方式数据格式

这对我来说不是小事,所以我想先写一点关于如何使用快捷方式来获取健康数据的文章。“查找所有样本”快捷方式使用“查找所有样本:

A screenshot of the "Find All Health Samples where" action

这将返回运行状况样本的结果集,包括读取的开始日期、值和d阅读的持续时间。我发现困难的是一次导出这组数据的多个属性——我只能将日期导出到一个数组(日期数组)中,而实际心率值却导出到一个数组(一个值数组)中。一旦将它们绑定到字典中,快捷方式生成的结果JSON如下所示:

{"hrDates":["2019-12-16 08:24:36","2019-12-16 08:26:39",...],"hrValues":["74","72",...]}

hrDates和{}列表都是按开始日期升序排列的。这样做可以避免在health样本集中使用“Repeat with Each…”操作,这会给快捷方式带来很多慢。在

其中,Python脚本用于将这两个数组组合成一个元组列表。一旦在httppost请求中接收到上述JSON,脚本就会将其转换为[("2019-12-16 08:24:36", 74.0), ("2019-12-16 08:26:39", 72.0)]。然后将其转换为CSV或JSON文件。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java SimpleFramework和工厂方法   Java适当地处理异常   java单例类不起作用   java小程序和Swing在eclipse中不显示组件   多个键上的java Redisson FastRemove不起作用   java验证请求正文不等于模式   在Java中从URL读取数据   eche RecyclerView项的java Set自定义字体   string Java如何从Date获取HH:mm:ss   当Java应用程序落后于负载均衡器时,在某些URL上强制使用SSL   使用esapi时发生java错误   java使用流根据第二个列表中的值更新一个列表中的对象   组织。openqa。硒。Java中的NoTouchElementException WebDriver?   从JSON字符串Java创建CSV文件