概览
本指南介绍如何为新的健康设备或平台构建自定义提供商 (Provider) 集成。提供商系统的设计目标是在保持安全性和数据质量的同时,让新增集成变得简单直接。如果您是想使用现有的提供商(如 Garmin 或 Whoop),请参阅使用提供商。
前置条件
在集成新的提供商之前,请确保您具备以下条件:技术要求
技术要求
- Python 3.12+ 环境
- 访问目标设备/服务 API 文档的权限
- 获得设备厂商提供的 OAuth 凭据 (OAuth 1.0 或 OAuth 2.0)
- 熟悉 Python 的 async/await 异步模式
- 熟悉 REST API 和 JSON 数据格式
OAuth 凭据
OAuth 凭据
从健康设备厂商获取 OAuth 凭据:
- Client ID / Consumer Key
- Client Secret / Consumer Secret
- 用于身份验证和数据访问的 API 端点 (Endpoints)
- 访问健康数据所需的 OAuth 权限范围 (Scopes)
数据库设置
数据库设置
您的提供商需要一个专用的表来存储原始数据:
提供商架构
目录结构
类层次结构
现有示例
参考以下提供商实现:- Garmin Connect:
mirobody/pulse/theta/mirobody_garmin_connect/ - Whoop:
mirobody/pulse/theta/mirobody_whoop/
快速上手
实现检查清单
必需方法
必需方法
您的提供商必须实现:
- ✅
factory()- 提供商实例化 - ✅
info()- 提供商元数据 - ✅
link()- 发起 OAuth 流程 - ✅
callback()- 处理 OAuth 回调 - ✅
unlink()- 断开提供商连接 - ✅
pull_from_vendor_api()- 从 API 获取数据 - ✅
format_data()- 转换为标准格式 - ✅
save_raw_data_to_db()- 持久化原始数据 - ✅
is_data_already_processed()- 检查重复数据
OAuth 实现
OAuth 实现
根据提供商要求选择 OAuth 版本:OAuth 1.0 (如 Garmin):
- 请求令牌 (Request token)
- 用户授权
- 交换访问令牌 (Access token)
- 授权码 (Authorization code)
- 交换令牌
- 令牌刷新处理
数据映射
数据映射
测试
测试
核心概念
提供商生命周期
数据流
- 原始数据获取: 从厂商 API 拉取数据
- 原始数据存储: 保存到提供商特定的表中
- 转换: 转换为标准指标
- 标准存储: 保存到
th_series_data表 - 去重: 跳过已处理的记录
配置
在config.yaml 中添加提供商配置:
config.yaml
示例:极简提供商
以下是一个极简的提供商实现示例:详细文档
有关全面的实现细节,请参阅以下指南:标准健康指标
将您的提供商数据映射到这些标准指标:| 指标 | 描述 | 单位 |
|---|---|---|
DAILY_STEPS | 每日步数 | steps |
DAILY_SLEEP_DURATION | 总睡眠时间 | 毫秒 (milliseconds) |
HEART_RATE | 心率测量值 | bpm |
DAILY_HEART_RATE_RESTING | 静息心率 | bpm |
HRV | 心率变异性 | 毫秒 (ms) |
WEIGHT | 体重 | 克 (grams) |
DAILY_CALORIES_ACTIVE | 活动卡路里消耗 | kcal |
SLEEP_EFFICIENCY | 睡眠效率 | 百分比 (percentage) |
贡献您的提供商集成
一旦您构建了一个提供商,请考虑将其贡献回社区:有关详细的实现说明,包括所有必需的方法、OAuth 模式、数据转换示例和最佳实践,请参阅仓库中完整的提供商集成指南。