feat(qqmusic): QQ音乐会员成长值+福利站自动签到(zzc签名对拍验证)
- u6.y.qq.com 协议底座: zzc/time33 与 LDP924/auto-checkin qmcommon.py 逐字节对拍 PASS(6向量) - 续期闭环: QQLogin 换新 key + openid/access_token 二级救活, 缓存存 /ql/data/qqmusic_cache(订阅git免疫) - 任务中心三态机: 签到/挂件/装扮/听书/节目, Y零请求/W直领/N动作, 10006写锁即停 - 福利站全量: 每日签到/礼券/旅程激励/月里程碑/月度好礼/臻享抽奖, 先探后做 - env: SH_QQMUSIC_KEY 多账号(uin#key / cookie串 / 混排), code 1000/2000 归一失效语义 - 播放上报(任务20完整+10)默认关闭, 定时 1 0,6 * * * 双轮
This commit is contained in:
59
qqmusic/README.md
Normal file
59
qqmusic/README.md
Normal file
@@ -0,0 +1,59 @@
|
||||
# QQ音乐自动签到(qqmusic_checkin.js)
|
||||
|
||||
QQ音乐会员成长值任务 + 会员福利站 自动签到,青龙面板 Node 零依赖。
|
||||
协议底座与 [LDP924/auto-checkin](https://github.com/LDP924/auto-checkin)(Python)逐字节同源:
|
||||
`u6.y.qq.com/cgi-bin/musics.fcg` 网关 + `zzc` 签名(sha1 重组 + 置乱表 + b64 去尾)+ `qm_keyst` cookie。
|
||||
|
||||
## 环境变量
|
||||
|
||||
| 变量 | 必填 | 说明 |
|
||||
|---|---|---|
|
||||
| `SH_QQMUSIC_KEY` | ✅ | 多账号:青龙同名 env 加多条(注入自动 `&` 连接)。**单条格式 `<uin>#<qm_keyst>`**,如 `123456789#Q_H_L_xxxx`。也接受整串 cookie(含 `qm_keyst=` 与 `uin=o...`) |
|
||||
| `QM_KEY` / `QM_UIN` | 备选 | 单账号兼容形态(`SH_QQMUSIC_KEY` 优先) |
|
||||
| `QM_CACHE_DIR` | 可选 | key 缓存目录,默认 `/ql/data/qqmusic_cache`(青龙)/ `qqmusic/.cache`(本地) |
|
||||
| `QM_PLAY_REPORT` | 可选 | `on` 才启用任务20播放上报(本版未实现模板,挂了开关占位) |
|
||||
|
||||
## 凭证获取(web 抓一次,之后无限续)
|
||||
|
||||
1. 浏览器打开 [y.qq.com](https://y.qq.com) 登录(QQ/微信均可)
|
||||
2. F12 → Application → Cookies → `https://y.qq.com` → 复制 `qm_keyst` 与 `uin`(`o123456789` 去掉 `o`)
|
||||
3. 青龙新建环境变量 `SH_QQMUSIC_KEY`,值 `uin#qm_keyst`
|
||||
|
||||
**为什么抓一次就够**:签名/`g_tk` 全是本地算法(无盐、无设备绑定、无动态 token);
|
||||
`qm_keyst` 名义 72h,但续期接口 `QQConnectLogin.LoginServer.QQLogin` 旧 key 不吊销——
|
||||
脚本每次运行先续期,新 key 写缓存滚动,环境变量永远不用再动。
|
||||
只有脚本断跑超 72h 且缓存丢失(推送出现 🔴 2000)才需要重新抓。
|
||||
|
||||
## 缓存与订阅安全
|
||||
|
||||
续期产物存 `/ql/data/qqmusic_cache/qm_<uin>.json`(**订阅仓库之外**)。
|
||||
git 的 reset/clean 只动 tracked 文件,untracked 目录在 `git pull` 下天然安全;
|
||||
且脚本读缓存优先、env 兜底,缓存丢失仅退化为"72h 内重新抓一次"。
|
||||
|
||||
## 定时
|
||||
|
||||
```
|
||||
cron: 1 0,6 * * *
|
||||
```
|
||||
|
||||
每天 00:01 + 06:02 双轮:任务20(收听节目)跨天滚动翻账本 + 福利站 0 点翻新兜底。
|
||||
|
||||
## 任务覆盖
|
||||
|
||||
| 层 | 内容 | 风险 |
|
||||
|---|---|---|
|
||||
| 任务中心 | 签到(15) / 挂件(5) / 装扮(5) / 听书(5) / 节目StartTask | 低(等价 App 点击) |
|
||||
| 会员福利站 | 每日签到(15) / 礼券(+10心愿值) / 旅程激励 / 月里程碑 / 月度好礼 / 臻享抽奖 | 低(先探后做,无硬编码 ID) |
|
||||
| 播放上报 | 任务20 完整 +10 需 App 正常收听(伪造统计默认关) | 中(默认关闭) |
|
||||
| 支付流水任务 | 4/5/6/12/14/18/21 | 不可伪造,不碰 |
|
||||
|
||||
状态三态机:`Y`=已完成零请求(防风控)/ `W`=进行中直接领 / `N`=执行动作。
|
||||
错误码处置:`20020` 冷却3s重领 · `30005` 只读探测后补领 · `10006` 写锁即停次日恢复 · `2000` 登录态失效推送提示。
|
||||
|
||||
## 本地测试
|
||||
|
||||
```bash
|
||||
node --check qqmusic_checkin.js # 语法
|
||||
node qqmusic_checkin.js # 无 env 时优雅跳过
|
||||
SH_QQMUSIC_KEY='123#Q_H_L_x' node -e "console.log(require('./qqmusic_checkin').parseAccounts())"
|
||||
```
|
||||
Reference in New Issue
Block a user