chore: remove legacy qx compatibility paths
This commit is contained in:
@@ -5,13 +5,10 @@
|
||||
## 仓库结构
|
||||
|
||||
```text
|
||||
conf/qdreader.conf # 起点读书 QX 远程重写订阅文本,参考 chickliu/qx 老仓库风格
|
||||
js/qdreader_cookie.js # 起点读书 QX Rewrite 脚本入口
|
||||
qx/subscribe/qdreader.subscription.json # 兼容旧订阅地址,内容同 conf/qdreader.conf
|
||||
qx/subscribe/qdreader.qx.snippet # 兼容旧片段地址,内容同 conf/qdreader.conf
|
||||
qx/rewrite/qdreader_cookie.js # 兼容旧脚本地址,内容同 js/qdreader_cookie.js
|
||||
docs/qx-rewrite-lessons.md # 本次制作经验
|
||||
source/qdreader.upstream.js # 上游 QDReader 脚本备份
|
||||
conf/qdreader.conf # 起点读书 QX 远程重写订阅文本,参考 chickliu/qx 老仓库风格
|
||||
js/qdreader_cookie.js # 起点读书 QX Rewrite 脚本入口
|
||||
docs/qx-rewrite-lessons.md # 本次制作经验
|
||||
source/qdreader.upstream.js # 上游 QDReader 脚本备份
|
||||
```
|
||||
|
||||
## 当前订阅地址
|
||||
@@ -22,12 +19,6 @@ source/qdreader.upstream.js # 上游 QDReader 脚本备份
|
||||
https://gitea.chickliu.fun/Hermes/qx/raw/branch/main/conf/qdreader.conf
|
||||
```
|
||||
|
||||
兼容旧地址:
|
||||
|
||||
```text
|
||||
https://gitea.chickliu.fun/Hermes/qx/raw/branch/main/qx/subscribe/qdreader.subscription.json
|
||||
```
|
||||
|
||||
## 订阅内容
|
||||
|
||||
```text
|
||||
|
||||
@@ -2,20 +2,13 @@
|
||||
|
||||
## 仓库结构
|
||||
|
||||
参考 `chickliu/qx` 老仓库风格,推荐保留这两个顶层目录:
|
||||
参考 `chickliu/qx` 老仓库风格,仓库只保留通用顶层目录,不再保留旧兼容路径:
|
||||
|
||||
```text
|
||||
conf/ # Quantumult X 远程重写订阅文本
|
||||
js/ # Rewrite 脚本入口,订阅文本直接引用这里
|
||||
```
|
||||
|
||||
本仓库为了兼容历史路径,也保留:
|
||||
|
||||
```text
|
||||
qx/subscribe/ # 旧订阅地址,内容与 conf/qdreader.conf 同步
|
||||
qx/rewrite/ # 旧脚本地址,内容与 js/qdreader_cookie.js 同步
|
||||
```
|
||||
|
||||
## QX 订阅格式
|
||||
|
||||
BOSS 常用的远程订阅不是 JSON 对象,而是类似下面的纯文本:
|
||||
@@ -62,10 +55,8 @@ Autman 插件保留快捷命令:
|
||||
## 验证清单
|
||||
|
||||
- `node --check js/qdreader_cookie.js`
|
||||
- `node --check qx/rewrite/qdreader_cookie.js`
|
||||
- raw 地址返回 HTTP 200:
|
||||
- `conf/qdreader.conf`
|
||||
- `js/qdreader_cookie.js`
|
||||
- 兼容旧地址 `qx/subscribe/qdreader.subscription.json`
|
||||
- 兼容旧地址 `qx/rewrite/qdreader_cookie.js`
|
||||
- 订阅文本内容第一行是 `hostname = ...`,第二行是 rewrite rule。
|
||||
- 新增重写时按 `conf/<name>.conf` + `js/<name>.js` 放置,不再创建 `qx/subscribe/` 或 `qx/rewrite/` 兼容目录。
|
||||
|
||||
@@ -1,71 +0,0 @@
|
||||
/*
|
||||
* 启点读书 Cookie 自动获取/更新 - Quantumult X
|
||||
* 只负责抓取 Cookie 并弹窗展示“复制给 Autman 机器人”的快速登录命令,不主动请求 Autman,也不本地持久化。
|
||||
*
|
||||
* 抓取:打开起点读书 App → 我的 → 福利中心。
|
||||
* 抓到后会:
|
||||
* 1. 解析 uid 用于弹窗标题
|
||||
* 2. 通知/弹窗里展示完整快速登录命令 + CK,便于直接复制
|
||||
*/
|
||||
|
||||
function getHeader(headers, name) {
|
||||
const lower = String(name).toLowerCase()
|
||||
for (const k in (headers || {})) if (String(k).toLowerCase() === lower) return headers[k]
|
||||
return ''
|
||||
}
|
||||
function parseCookie(cookie) {
|
||||
const jar = {}
|
||||
String(cookie || '').split(';').forEach(part => {
|
||||
const i = part.indexOf('=')
|
||||
if (i <= 0) return
|
||||
const k = part.slice(0, i).trim()
|
||||
const v = part.slice(i + 1).trim()
|
||||
if (k) jar[k] = v
|
||||
})
|
||||
return jar
|
||||
}
|
||||
function b64decode(s) {
|
||||
try { return decodeURIComponent(escape(atob(String(s || '')))) } catch (e) { return '' }
|
||||
}
|
||||
function uidFromQDHeader(qdheader) {
|
||||
const decoded = b64decode(qdheader)
|
||||
return decoded ? String(decoded.split('|')[0] || '').trim() : ''
|
||||
}
|
||||
function parseJson(s, def) { try { return JSON.parse(s) } catch (e) { return def } }
|
||||
function getUid(cookie, body) {
|
||||
const jar = parseCookie(cookie)
|
||||
let uid = uidFromQDHeader(jar.QDHeader || jar.qdheader || jar.QDHEADER || '')
|
||||
if (uid) return uid
|
||||
if (jar.uid) return String(jar.uid)
|
||||
const obj = parseJson(body || '', null)
|
||||
uid = obj && obj.Data && obj.Data.UserInfo && (obj.Data.UserInfo.UserId || obj.Data.UserInfo.userId)
|
||||
return uid ? String(uid) : ''
|
||||
}
|
||||
function notify(title, sub, msg, opts) {
|
||||
try { $notify(title, sub || '', msg || '', opts || {}) } catch (e) { $notify(title, sub || '', msg || '') }
|
||||
}
|
||||
function copyAction(command) {
|
||||
return {
|
||||
'open-url': 'shortcuts://run-shortcut?name=Copy&input=text&text=' + encodeURIComponent(command),
|
||||
'media-url': 'data:text/plain;charset=utf-8,' + encodeURIComponent(command)
|
||||
}
|
||||
}
|
||||
|
||||
const cookie = getHeader($request && $request.headers, 'Cookie')
|
||||
if (!cookie) {
|
||||
notify('启点读书', 'Cookie 获取失败', '请求中没有 Cookie')
|
||||
$done({})
|
||||
} else {
|
||||
const body = typeof $response !== 'undefined' ? ($response.body || '') : ''
|
||||
const uid = getUid(cookie, body)
|
||||
if (!uid) {
|
||||
notify('启点读书', 'Cookie 获取失败', '无法识别 uid,请确认已登录并进入福利中心')
|
||||
$done({})
|
||||
} else {
|
||||
// 发给 Autman 机器人的完整快速登录命令。Autman 插件保留“启点ck <cookie>”快速提交通道。
|
||||
const submitText = `启点ck ${cookie}`
|
||||
const msg = submitText
|
||||
notify('启点读书', `抓取成功 uid:${uid}`, msg, copyAction(submitText))
|
||||
$done({})
|
||||
}
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
hostname = h5.if.qidian.com
|
||||
^https:\/\/h5\.if\.qidian\.com\/argus\/api\/v1\/user\/getlogininfo url script-response-body https://gitea.chickliu.fun/Hermes/qx/raw/branch/main/js/qdreader_cookie.js
|
||||
@@ -1,2 +0,0 @@
|
||||
hostname = h5.if.qidian.com
|
||||
^https:\/\/h5\.if\.qidian\.com\/argus\/api\/v1\/user\/getlogininfo url script-response-body https://gitea.chickliu.fun/Hermes/qx/raw/branch/main/js/qdreader_cookie.js
|
||||
Reference in New Issue
Block a user