最近搞了一辆九号电动车(本人非精神小伙),APP里面有个签到功能,每天手动签到怪麻烦的,于是从 GitHub 上翻了一个签到脚本,修改了一下,分享出来供大家使用。

🔗 项目地址:https://github.com/waistu/Ninebot


实现功能

  • 💻 本地运行
  • ✅ 自动签到 (GitHub Actions & 青龙面板)
  • 👋 单账号/多账号签到
  • 🔔 Bark 通知推送

如果你有自己的服务器,推荐使用青龙面板进行运行。当然,也可以 GitHub Actions 自动运行,需要 GitHub 访问条件以及 GitHub 账号。


环境变量参数

变量名 值示例 / 说明 必填 备注
NINEBOT_DEVICE_ID 1234567890(你的设备唯一标识) 单账号时填写单个 deviceId
NINEBOT_AUTHORIZATION Bearer xyz789...(你的授权令牌) 单账号时填写单个 authorization
NINEBOT_ACCOUNTS [{"deviceId":"123","authorization":"Bearer xyz","name":"账号1"},{"deviceId":"456","authorization":"Bearer abc","name":"账号2"}] 多账号时使用,JSON 数组格式(需压缩为单行,无换行符)
BARK_KEY xxxxxxxxxxxxxxxx(你的 BARK 推送设备密钥) 选填,用于接收签到结果通知(需配合 BARK 应用)
BARK_URL https://api.day.app(默认值) 选填,自定义 BARK 服务器地址(默认官方地址)
BARK_GROUP 九号签到(推送分组名称) 选填,推送消息的分组标签
BARK_ICON https://example.com/icon.png(图标 URL) 选填,推送消息显示的图标
BARK_SOUND chime(铃声名称) 选填,推送消息的铃声(默认 bell,支持 chimealarm 等)

九号出行 APP 抓包

脚本签到需要用账号的设备 ID(DEVICE_ID)和授权令牌(AUTHORIZATION),通过抓包可以获取,这里以 IOS 为例(安卓抓包自行尝试)。

  1. 首先,确保手机已安装九号出行 APP,并登录自己的账号。
  2. 在 App Store 搜索下载 Stream ,根据提示配置CA证书,然后在手机中进行证书信任设置。

IMG-61ABB21674FC63E60A3E40185AD38F3B.webp

  1. 打开 Stream 工具,点击开始抓包,然后切换至九号 APP,打开签到页面,之后回到抓包工具,结束抓包。

IMG-D0C023BE8637EAE98F79A35344F425D9.webp

  1. 在抓包历史中找到刚抓包的数据,搜索 api/user-sign/v2/sign 字段,点击搜索结果中的第一个 POST 请求数据,打开切换至请求头部分,下面的 Authorization 和 device_id 就是后面需要用的授权令牌和设备 ID。

本地运行

  1. 本地终端克隆仓库
git clone https://github.com/waistu/Ninebot.git
  1. 安装依赖
npm install
  1. 设置环境变量(将.env.example 重命名为.env)
# 九号APP相关(必填)

NINEBOT_DEVICE_ID="你的设备ID"
NINEBOT_AUTHORIZATION="你的授权令牌"
NINEBOT_NAME="你自定义账户名" # 可选
# Bark通知相关(可选,需要则配置)
BARK_KEY=你的Bark密钥
BARK_URL=https://api.day.app # 默认使用 APP 自带服务器
# 以下为Bark可选参数(根据需要添加)
# BARK_GROUP=九号签到通知 # 通知分组
# BARK_ICON=https://xxx.png # 通知图标URL
# BARK_SOUND=bell # 通知铃声
  1. 运行脚本
npm start

使用青龙面板运行脚本

在青龙面板的订阅管理中,选择创建订阅,链接填写 https://github.com/waistu/Ninebot.git ,名称自定义,定时规则可随便填写(例如每天早上七点运行一次 0 7 * * * ),拉取完脚本禁用即可。

IMG-80280DF5455F741A512D57FF643CC436.webp

拉取完成后,在定时任务这里会出现对应的脚本内容,可以自行修改定时规则和名称。

IMG-DA81514FD1A1ABB9AD02BE32998D9591.webp

接下来,在依赖管理这里安装NodeJs 依赖,依次添加 axios、moment、dotenv 即可。

IMG-65CB7852677D3F8AB5548DC6724FA97F.webp

如果下载比较慢,可以在 设置 > 依赖设置 > Node 软件包镜像源 添加加速镜像源。

🔗 Node 软件包镜像源:https://registry.npmmirror.com

最后在环境变量这里填写相关的环境变量即可,NINEBOT_DEVICE_IDNINEBOT_AUTHORIZATION 就是前面抓包获取的参数,为必填项,其他变量主要为 Bark 通知推送,可以按需选择。

IMG-2F763F948B4C8DECE5839A873B060AD8.webp

配置完毕后,可以在定时任务那里手动运行一次,检查日志内容,看是否能正常运行。

手机端 Bark 通知效果如下:

IMG-B60D4E7E5409325B63A4BEB7118A8AA6.webp


最后说明

目前签到貌似送的 N 币非常少了,想跑的可以尝试下,后续不排除 API 失效等问题,可以自行抓包解决。