Files
book-source-creator-skill/SKILL.md
T

13 KiB
Raw Blame History

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书源包含以下主要部分:

  1. 基本信息

    • bookSourceName: 书源名称
    • bookSourceUrl: 书源网站URL
    • bookSourceGroup: 分组
    • bookUrlPattern: 书籍URL正则
  2. 搜索功能

    • searchUrl: 搜索URL模板
    • ruleSearch: 搜索结果解析规则
  3. 发现功能(一般不使用,除非用户明确要求)

    • exploreUrl: 发现页URL
    • ruleExplore: 发现列表解析规则
    • 注意:大多数书源不需要发现功能,建议默认禁用
  4. 书籍详情

    • ruleBookInfo: 书籍信息解析规则
  5. 目录解析

    • ruleToc: 目录解析规则
  6. 正文获取

    • 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:先判断是否需要登录

  1. 检查网站是否存在登录入口、登录拦截、会员可见内容或未登录降级页面。
  2. 能登录时,优先完成登录,再分析搜索、详情、目录和正文。
  3. 如果登录需要扫码、验证码、短信、二次验证或人工确认,立即提醒人类协助完成登录。

步骤2:先做网站可生成性评估

  1. 检查搜索是否可触达,是否能拿到稳定的结果列表。
  2. 检查详情页是否可触达,是否能拿到书名、作者、简介、封面或目录入口。
  3. 检查目录是否完整,是否存在分页、懒加载、倒序或登录后差异。
  4. 检查正文是否为可提取文本,是否存在单章多页、图片化、脚本渲染、强广告或内容截断。
  5. 检查是否存在明显反爬、跳转、签名、验证码、App 专属接口或高不确定性链路。
  6. 输出可生成性评级:
    • 可直接生成
    • 可生成但高风险
    • 需登录后再评估
    • 不建议生成
  7. 若评级为 需登录后再评估 或 不建议生成,仍可继续,但必须明确标记为 高风险,并写出继续生成的理由。

步骤3:网站分析

使用Playwright MCP或 scripts/analyze_with_playwright.mjs 分析目标网站:

await page.goto('https://novel-site.com');
// 如果网站需要登录,先由人类协助完成登录,再继续分析

分析时应同时观察页面DOM、接口请求、跳转逻辑和登录态差异。脚本可用于辅助抓取或整理结果,但不应替代模型对站点行为的判断。

步骤4:创建搜索规则

基于网站分析结果:

  1. 确定搜索URL格式
  2. 分析搜索结果列表结构
  3. 提取书籍信息字段

步骤5:创建详情规则

分析书籍详情页:

  1. 书名提取规则
  2. 作者提取规则
  3. 封面图片URL
  4. 简介内容
  5. 目录链接

步骤6:创建目录规则

分析目录页:

  1. 章节列表结构
  2. 章节名称提取
  3. 章节链接提取
  4. 分页处理

步骤7:创建正文规则

分析正文页:

  1. 正文内容提取
  2. 广告过滤
  3. 分页处理
  4. 特殊编码处理

步骤8:输出评估模板

在展示规则、生成 JSON 或宣称可继续之前,应先输出一份简短评估:

## 网站可生成性评估
- 目标站点:
- 登录状态:
- 搜索可用性:
- 详情可用性:
- 目录可用性:
- 正文可用性:
- 特殊风险:
- 可生成性评级:
- 是否继续生成:
- 继续生成理由 / 停止理由:

若评级为 需登录后再评估 或 不建议生成,模板中的“是否继续生成”与“继续生成理由 / 停止理由”必须明确说明这是高风险继续推进,而不是默认通过。

实用工具

以下工具都应视为辅助工具,而不是决策中心。工具失效、脚本报错、规则测试不稳定时,应回到网页实际结构、接口响应和登录态行为重新分析。

1. 网站分析脚本

2. 书源验证脚本

3. 规则审计工具

4. 模板生成器

常见问题

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. 示例书源

见 references/examples.md

调试技巧

1. 逐步测试

  1. 先测试搜索功能
  2. 再测试详情获取
  3. 然后测试目录解析
  4. 最后测试正文获取

2. 使用日志

// 添加调试日志
java.log("当前URL: " + baseUrl);
java.log("获取到书籍数量: " + books.length);

3. 脚本失效时的处理

  1. 先确认脚本失败是脚本问题、环境问题还是站点行为变化。
  2. 回到浏览器页面、网络请求和响应内容,直接分析真实数据来源。
  3. 如果模型已经能从页面结构或接口中得出稳定规则,不要因为脚本不可用而停止推进。
  4. 将脚本结论视为辅助证据,而不是唯一裁判。

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阅读器提供丰富的小说资源。