Skip to content

🏆 一个使用GitHub Actions自动化执行的小米运动健康刷步数项目

License

Notifications You must be signed in to change notification settings

chiupam/xmSport

Repository files navigation

小米运动健康刷步数

小米运动 JavaScript TypeScript Node.js GitHub stars GitHub forks License

这是一个使用GitHub Actions自动化执行的小米运动健康刷步数项目,可以定时为小米运动账号模拟随机步数数据。

✨ 功能

  • 🕒 自动定时执行刷步数脚本(每天UTC时间14:55和15:55,对应北京时间22:55和23:55)
  • 🎲 支持自定义步数范围,随机生成步数
  • 🔄 支持GitHub Actions自动化执行及手动触发
  • 🛡️ 内置重试机制,提高执行成功率
  • 📱 支持多种渠道推送通知结果,包括Server酱、Bark、Telegram等

🚀 快速开始

  1. Fork本仓库到你的GitHub账号
  2. 在仓库的Settings > Secrets > Actions中添加以下Secrets:

🔑 必需的环境变量

名称 必填 说明 默认值
PHONE_NUMBER 小米运动/小米健康账号绑定的手机号(不含+86)
PASSWORD 账号密码
xmSportMinStep 最小步数 20000
xmSportMaxStep 最大步数 22000
ENABLE_NOTIFY 是否启用通知功能,设置为true时启用 false

📲 通知配置

启用通知推送功能后(ENABLE_NOTIFY=true),可以配置以下通知渠道(至少需要配置一个):

变量名 说明 参考文档
SERVERCHAN_KEY Server酱的推送密钥 Server酱文档
BARK_KEY Bark推送密钥或完整URL Bark文档
TG_BOT_TOKEN Telegram机器人Token Telegram Bot API
TG_CHAT_ID Telegram接收消息的用户或群组ID 获取Chat ID教程
DINGTALK_WEBHOOK 钉钉机器人的Webhook URL 钉钉自定义机器人文档
DINGTALK_SECRET 钉钉机器人的安全密钥(可选) 同上
WECOM_KEY 企业微信机器人的WebHook Key 企业微信机器人文档
PUSHPLUS_TOKEN PushPlus推送Token PushPlus文档
  1. GitHub Actions将按计划自动运行

⚙️ 工作流程

GitHub Actions工作流程配置在.github/workflows/xmsport.yml文件中:

  • ⏰ 每天14:55和15:55自动执行(UTC时间,对应北京时间22:55和23:55)
  • 👆 支持手动触发工作流程并设置自定义步数范围
  • 🟢 使用Node.js环境运行脚本

🖱️ 手动触发签到

如果你想立即测试签到功能,可以手动触发:

  1. 进入 "Actions" 标签
  2. 选择 "小米运动修改步数" workflow
  3. 点击 "Run workflow" 按钮
  4. 点击 "Run workflow" 确认运行

💡 提示:手动触发时会使用您在GitHub Secrets中配置的环境变量,如果没有配置则使用默认值。

📝 数据模板

仓库中已经包含了src/data.txt文件,其中包含小米运动的数据模板:

  • ✅ 工作流会自动读取该文件内容,无需手动设置环境变量
  • 🔄 如需修改数据模板,只需直接编辑该文件,推送后自动生效

📲 通知功能

脚本执行失败时,可以通过多种渠道接收通知:

  • 需要先设置ENABLE_NOTIFYtrue来启用通知功能
  • 仅在修改步数失败时才会发送通知,成功时不会打扰您
  • Server酱:微信推送,设置SERVERCHAN_KEY环境变量
  • Bark:iOS推送,设置BARK_KEY环境变量
  • Telegram:设置TG_BOT_TOKENTG_CHAT_ID环境变量
  • 钉钉:企业消息,设置DINGTALK_WEBHOOK和可选的DINGTALK_SECRET环境变量
  • 企业微信:设置WECOM_KEY环境变量
  • PushPlus:微信推送,设置PUSHPLUS_TOKEN环境变量

如果未配置任何通知渠道,脚本将只在GitHub Actions日志中输出结果。

📂 文件结构

xmSport/
├── .github/                          # GitHub相关配置
│   └── workflows/                    # GitHub Actions工作流
│       ├── build.yml                 # TypeScript构建工作流
│       └── xmsport.yml               # 主要运行工作流
├── src/                              # 源代码目录
│   ├── types/                        # 类型定义
│   │   ├── apiService.types.ts       # API服务相关类型
│   │   ├── dataProcessor.types.ts    # 数据处理相关类型
│   │   ├── index.ts                  # 类型导出索引
│   │   ├── main.types.ts             # 主程序相关类型
│   │   └── notify.types.ts           # 通知服务相关类型
│   ├── apiService.ts                 # API服务模块,处理与小米服务器的通信
│   ├── dataProcessor.ts              # 数据处理模块,负责处理和生成数据
│   ├── index.ts                      # 主脚本文件,负责请求处理和步数提交
│   ├── local-test.ts                 # 本地测试脚本
│   ├── notify.ts                     # 通知模块,支持多种渠道推送结果
│   ├── utils.ts                      # 工具函数模块,提供各种通用功能
│   └── data.txt                      # 数据模板文件
├── dist/                             # 编译后的JavaScript文件目录
│   ├── types/                        # 编译后的类型定义
│   ├── apiService.js                 # 编译后的API服务模块
│   ├── dataProcessor.js              # 编译后的数据处理模块
│   ├── index.js                      # 编译后的主脚本文件
│   ├── local-test.js                 # 编译后的本地测试脚本
│   ├── notify.js                     # 编译后的通知模块
│   ├── utils.js                      # 编译后的工具函数模块
│   └── data.txt                      # 复制的数据模板文件
├── js-backup/                        # JavaScript原始文件备份
├── .env.example                      # 环境变量示例文件
├── .gitignore                        # Git忽略文件配置
├── LICENSE                           # 开源协议
├── package.json                      # 项目依赖和脚本配置
├── README.md                         # 项目说明文档
└── tsconfig.json                     # TypeScript配置文件

主要文件说明

  • src/index.ts: 程序入口点,处理环境变量,调用API服务和通知服务
  • src/apiService.ts: 包含与小米运动API交互的所有函数,包括登录、获取token和发送步数数据
  • src/dataProcessor.ts: 负责处理数据模板,替换步数和日期
  • src/notify.ts: 负责发送通知到多个平台(Server酱、Bark、Telegram等)
  • src/utils.ts: 包含通用工具函数,如时间格式化、随机数生成和URL参数转换
  • src/types/: 按模块组织的类型定义文件,提高代码的类型安全性

🔧 开发说明

本项目使用TypeScript开发,提供更好的类型安全和开发体验。源代码在src目录下,编译后的JavaScript文件在dist目录下。

自动构建

当你推送TypeScript源文件变更到GitHub仓库时,会自动触发构建工作流,将TypeScript编译为JavaScript并提交到dist目录。GitHub Actions工作流运行时使用的是编译后的JavaScript文件。

本地开发

如果你想在本地进行开发,请按照以下步骤:

  1. 克隆仓库到本地

    git clone https://github.com/chiupam/xmSport.git
    cd xmSport
  2. 安装依赖

    npm install
  3. 编译TypeScript

    npm run build
  4. 编辑源代码后重新构建

    npm run build
  5. 或者启用开发模式,自动监视文件变化

    npm run dev

⚠️ 免责声明

请仔细阅读以下声明:

  1. 本项目仅供学习和研究目的使用,不得用于商业或非法用途
  2. 使用本项目可能违反小米运动/小米健康的服务条款,请自行评估使用风险
  3. 本项目不保证功能的可用性,也不保证不会被小米官方检测或封禁
  4. 使用本项目造成的任何问题,包括但不限于账号被封禁、数据丢失等,项目作者概不负责
  5. 用户需自行承担使用本项目的全部风险和法律责任

📜 许可证

本项目采用 MIT 许可证 进行许可。

🧪 本地测试

如果你想在本地测试脚本,可以按照以下步骤操作:

  1. 克隆仓库到本地

    git clone https://github.com/chipam/xmSport.git
    cd xmSport
  2. 安装依赖

    npm install
  3. 创建环境变量文件

    cp .env.example .env
  4. 编辑.env文件,填入你的个人信息

    • 修改PHONE_NUMBERPASSWORD为你的账号信息
    • DATA_JSON会通过测试脚本自动读取,无需手动设置
  5. 运行测试脚本(推荐)

    npm test

    这个命令会自动读取src/data.txt文件内容并设置为环境变量

  6. 调试失败通知(可选)

    npm run test:fail

    这个命令使用错误的账号密码来触发失败通知

手动方式测试(可选)

如果你希望手动控制环境变量,可以:

  1. 打开src/data.txt文件,复制其内容
  2. 将内容粘贴到.env文件的DATA_JSON=后面(注意转义特殊字符)
  3. 使用以下命令运行:
    npm run test:env

🔄 Fork仓库自动同步

如果你Fork了此仓库,可以启用自动同步功能,保持与上游仓库的更新一致:

  1. 在你Fork的仓库中,进入Actions标签页
  2. 你会看到一个名为自动同步上游仓库的工作流
  3. 点击I understand my workflows, go ahead and enable them启用工作流
  4. 现在,你的Fork仓库将每天自动与此上游仓库同步

你也可以随时手动触发同步:

  1. 在你Fork的仓库中,进入Actions标签页
  2. 在左侧选择自动同步上游仓库工作流
  3. 点击Run workflow按钮,然后点击绿色的Run workflow按钮确认

这样你的Fork仓库就会立即与上游仓库同步,获取最新的功能和修复。

注意:此工作流仅在Fork的仓库中运行,不会在原始仓库中执行。

About

🏆 一个使用GitHub Actions自动化执行的小米运动健康刷步数项目

Topics

Resources

License

Stars

Watchers

Forks