13 KiB
13 KiB
name, description
| name | description |
|---|---|
| book-source-creator | Use when 需要为 Legado 阅读器创建、调试或验证书源,尤其是在分析网站结构、登录态页面、接口行为或排查解析规则异常时 |
Legado书源创建技能
本技能帮助用户为Legado阅读器创建和调试书源。Legado是一款Android阅读应用,支持自定义书源来访问各种小说网站。
核心原则
- AI模型对页面结构、接口链路和规则语义的分析应作为主判断依据,脚本和工具只用于辅助验证。
- 如果脚本结果与页面实际表现、网络请求或模型推断冲突,优先相信直接观察到的证据,不要死磕脚本。
- 网站支持或依赖登录时,应优先在登录态下分析搜索、详情、目录和正文,而不是默认以未登录状态直接分析。
- 如果登录需要扫码、验证码、短信、二次验证或其他人工操作,应立即提醒人类协助登录,完成后再继续分析。
- 在正式生成书源前,必须先做网站可生成性评估,先判断站点是否具备稳定生成条件,再决定是否继续推进。
快速开始
1. 先确认登录前提
- 判断目标网站是否存在登录后才可见的搜索结果、书籍详情、目录或正文。
- 能登录的网站,优先在登录态下进行分析。
- 如果登录过程需要人类协助,应立即提醒人类完成登录,不要跳过登录直接继续。
2. 做网站可生成性评估
- 在写任何规则前,先判断搜索、详情、目录、正文是否都具备可分析入口。
- 先给出评级,再决定是否继续生成,不要先写规则再回头补评估。
- 可生成性评级只允许使用以下四类:
可直接生成可生成但高风险需登录后再评估不建议生成
- 如果评级为
需登录后再评估或不建议生成,仍然可以继续生成,但必须明确标成高风险,并说明继续生成的理由和已知风险。
3. 分析网站结构
使用Playwright MCP分析目标小说网站的结构:
- 导航到网站首页
- 分析搜索功能
- 查看书籍详情页
- 检查目录页结构
- 查看正文内容
4. 创建书源模板
基于网站结构创建书源JSON模板:
{
"bookSourceName": "示例书源",
"bookSourceUrl": "https://example.com",
"bookSourceGroup": "分类",
"searchUrl": "搜索URL规则",
"ruleSearch": {
"bookList": "书籍列表规则",
"name": "书名规则",
"author": "作者规则",
"coverUrl": "封面规则",
"bookUrl": "详情页URL规则"
},
"ruleBookInfo": {
"name": "书名规则",
"author": "作者规则",
"coverUrl": "封面规则",
"intro": "简介规则",
"tocUrl": "目录URL规则"
},
"ruleToc": {
"chapterList": "章节列表规则",
"chapterName": "章节名称规则",
"chapterUrl": "章节URL规则"
},
"ruleContent": {
"content": "正文内容规则"
}
}
5. 输出评估结论
在开始生成规则前,至少输出一次以下模板:
## 网站可生成性评估
- 目标站点:
- 登录状态:
- 搜索可用性:
- 详情可用性:
- 目录可用性:
- 正文可用性:
- 特殊风险:
- 可生成性评级:
- 是否继续生成:
- 继续生成理由 / 停止理由:
6. 测试书源
使用测试工具验证书源功能:
- 测试搜索功能
- 测试书籍详情获取
- 测试目录解析
- 测试正文获取
- 脚本报错或结果异常时,回到页面结构、请求链路和规则本身重新判断,不要让脚本决定结论
核心概念
书源结构
Legado书源包含以下主要部分:
-
基本信息
bookSourceName: 书源名称bookSourceUrl: 书源网站URLbookSourceGroup: 分组bookUrlPattern: 书籍URL正则
-
搜索功能
searchUrl: 搜索URL模板ruleSearch: 搜索结果解析规则
-
发现功能(一般不使用,除非用户明确要求)
exploreUrl: 发现页URLruleExplore: 发现列表解析规则- 注意:大多数书源不需要发现功能,建议默认禁用
-
书籍详情
ruleBookInfo: 书籍信息解析规则
-
目录解析
ruleToc: 目录解析规则
-
正文获取
ruleContent: 正文解析规则
规则语法
Legado支持多种规则语法:
1. Jsoup Default语法
tag.div.0@class.content@text
tag: 标签类型div: 标签名0: 位置索引@: 分隔符text: 获取文本内容
2. CSS选择器
@css:.book-list li a@text
3. XPath
@XPath://div[@class="content"]/text()
4. JSONPath
@json:$.data.books[*].name
5. JavaScript
<js>result.replace(/\\s+/g, ' ')</js>
6. 正则表达式
- AllInOne:
:正则表达式 - OnlyOne:
##正则表达式##替换内容### - 净化:
##正则表达式##替换内容
工作流程
步骤1:先判断是否需要登录
- 检查网站是否存在登录入口、登录拦截、会员可见内容或未登录降级页面。
- 能登录时,优先完成登录,再分析搜索、详情、目录和正文。
- 如果登录需要扫码、验证码、短信、二次验证或人工确认,立即提醒人类协助完成登录。
步骤2:先做网站可生成性评估
- 检查搜索是否可触达,是否能拿到稳定的结果列表。
- 检查详情页是否可触达,是否能拿到书名、作者、简介、封面或目录入口。
- 检查目录是否完整,是否存在分页、懒加载、倒序或登录后差异。
- 检查正文是否为可提取文本,是否存在单章多页、图片化、脚本渲染、强广告或内容截断。
- 检查是否存在明显反爬、跳转、签名、验证码、App 专属接口或高不确定性链路。
- 输出可生成性评级:
可直接生成可生成但高风险需登录后再评估不建议生成
- 若评级为
需登录后再评估或不建议生成,仍可继续,但必须明确标记为高风险,并写出继续生成的理由。
步骤3:网站分析
使用Playwright MCP或 scripts/analyze_with_playwright.mjs 分析目标网站:
await page.goto('https://novel-site.com');
// 如果网站需要登录,先由人类协助完成登录,再继续分析
分析时应同时观察页面DOM、接口请求、跳转逻辑和登录态差异。脚本可用于辅助抓取或整理结果,但不应替代模型对站点行为的判断。
步骤4:创建搜索规则
基于网站分析结果:
- 确定搜索URL格式
- 分析搜索结果列表结构
- 提取书籍信息字段
步骤5:创建详情规则
分析书籍详情页:
- 书名提取规则
- 作者提取规则
- 封面图片URL
- 简介内容
- 目录链接
步骤6:创建目录规则
分析目录页:
- 章节列表结构
- 章节名称提取
- 章节链接提取
- 分页处理
步骤7:创建正文规则
分析正文页:
- 正文内容提取
- 广告过滤
- 分页处理
- 特殊编码处理
步骤8:输出评估模板
在展示规则、生成 JSON 或宣称可继续之前,应先输出一份简短评估:
## 网站可生成性评估
- 目标站点:
- 登录状态:
- 搜索可用性:
- 详情可用性:
- 目录可用性:
- 正文可用性:
- 特殊风险:
- 可生成性评级:
- 是否继续生成:
- 继续生成理由 / 停止理由:
若评级为 需登录后再评估 或 不建议生成,模板中的“是否继续生成”与“继续生成理由 / 停止理由”必须明确说明这是高风险继续推进,而不是默认通过。
实用工具
以下工具都应视为辅助工具,而不是决策中心。工具失效、脚本报错、规则测试不稳定时,应回到网页实际结构、接口响应和登录态行为重新分析。
1. 网站分析脚本
- 主脚本:见 scripts/analyze_with_playwright.mjs
- 兼容入口:见 scripts/analyze_with_playwright.py
- 说明:支持人工登录后继续分析,适合需要浏览器上下文和登录态的站点
2. 书源验证脚本
- 主脚本:见 scripts/validate_source.mjs
- 兼容入口:见 scripts/validate_source.py
- 说明:验证 JSON 结构、字段类型和基础规则组完整性
3. 规则审计工具
- 主脚本:见 scripts/test_rules.mjs
- 兼容入口:见 scripts/test_rules.py
- 说明:只做规则占位检查、风险提示和搜索URL预览,不模拟 Legado 的完整解析行为
4. 模板生成器
- 主脚本:见 scripts/generate_template.mjs
- 兼容入口:见 scripts/generate_template.py
- 说明:基于分析结果或交互输入生成书源模板
常见问题
1. 编码问题
- GBK网站:添加
"charset": "gbk" - UTF-8网站:默认不需要指定
2. 登录需求
- 需要登录的网站:优先在登录态下分析,再决定是否配置
loginUrl - 使用Cookie:
java.getCookie() - 如果未登录和已登录页面结构不同,应分别检查搜索、详情、目录、正文是否受影响
- 如果登录需要人类协助完成,应立即提醒,不要假设可以跳过登录继续分析
3. 可生成性评估
- 不是所有网站都适合直接生成书源,应先评估再写规则。
- 若搜索、详情、目录、正文任一链路证据不足,必须先把风险写明。
需登录后再评估和不建议生成不是硬阻断,但继续推进时必须标记为高风险。- 不允许跳过评估直接给出“可用书源”结论。
4. 动态内容
- JavaScript渲染:使用
"webView": true - AJAX加载:分析API接口
5. 反爬虫
- 添加请求头:
User-Agent,Referer - 使用代理:
"proxy": "http://127.0.0.1:8080" - 添加延迟:JavaScript等待
高级功能
1. 变量使用
// 在规则中使用变量
{{key}} // 搜索关键词
{{page}} // 页码
{{java.base64Encode(key)}} // 编码关键词
2. JavaScript处理
// 复杂数据处理
<js>
const data = JSON.parse(result);
return data.books.map(b => b.name).join(',');
</js>
3. 正则净化
// 移除广告
all##<div class="ad">.*?</div>##
// 替换空格
text##\\s+##
4. 多规则组合
// 使用||取第一个有效值
name1||name2||name3
// 使用&&合并所有值
author1&&author2
参考资源
1. 官方文档
2. 在线工具
3. 示例书源
调试技巧
1. 逐步测试
- 先测试搜索功能
- 再测试详情获取
- 然后测试目录解析
- 最后测试正文获取
2. 使用日志
// 添加调试日志
java.log("当前URL: " + baseUrl);
java.log("获取到书籍数量: " + books.length);
3. 脚本失效时的处理
- 先确认脚本失败是脚本问题、环境问题还是站点行为变化。
- 回到浏览器页面、网络请求和响应内容,直接分析真实数据来源。
- 如果模型已经能从页面结构或接口中得出稳定规则,不要因为脚本不可用而停止推进。
- 将脚本结论视为辅助证据,而不是唯一裁判。
4. 错误处理
// 使用try-catch处理错误
<js>
try {
return result.match(/书名:(.*?)</)[1];
} catch(e) {
return "未知";
}
</js>
5. 性能优化
- 避免复杂的正则表达式
- 使用简单的选择器
- 减少JavaScript使用
- 合理使用缓存
最佳实践
1. 规则简洁性
- 优先使用简单的选择器
- 避免过度嵌套
- 使用明确的定位
2. 错误容忍
- 提供备选规则
- 处理空值情况
- 添加默认值
3. 维护性
- 添加注释说明
- 模块化规则
- 定期更新
4. 兼容性
- 测试不同页面结构
- 处理网站改版
- 支持移动端和PC端
5. 功能选择
- 搜索功能: 大多数书源必备,用于查找书籍
- 发现功能: 一般不使用,除非网站有专门的推荐或排行榜页面且用户明确要求
- 默认情况下应禁用发现功能(设置
"enabledExplore": false) - 只在用户明确需要时才配置
exploreUrl和ruleExplore
6. 工具与判断的优先级
- 先看真实页面、真实响应、真实登录态,再看脚本输出
- 脚本用于加速验证,不应用来否定已经通过页面和接口证据支持的判断
- 工具不可用时继续推进人工分析,不要把脚本是否可运行当作前置条件
- 发现登录相关限制时,先解决登录问题,再继续做规则分析
通过本技能,您可以快速创建高质量的书源,为Legado阅读器提供丰富的小说资源。