ReadCat书源插件开发指南三个方法讲透自定义小说书源的完整流程【免费下载链接】read-cat一款免费、开源、简洁、纯净、无广告的小说阅读器项目地址: https://gitcode.com/gh_mirrors/re/read-catReadCat是一款免费、开源、简洁纯净的小说阅读器它的书源插件系统是这款应用最核心的能力通过一段JavaScript插件代码就能让阅读器支持任意小说网站。这篇文章带你反向拆解一个成品书源插件看透它背后的三个核心方法和一份声明然后亲手写出属于你的第一个自定义小说书源。先看成品一个书源插件长什么样在动手之前我们先见一见成品。一个标准ReadCat书源插件本质上就是一个带有固定静态属性的JavaScript类。把它保存成.js文件在应用的设置→插件里一键导入就能立刻使用。class MyBookSource { static ID mybooksource-00000001; static TYPE 0; static GROUP 我的书源; static NAME 示例书源; static VERSION 1.0.0; static VERSION_CODE 1; static PLUGIN_FILE_URL ; static BASE_URL https://example.com; constructor(config) { this.request config.request; this.store config.store; this.cheerio config.cheerio; } async search(searchkey) {} async getDetail(detailPageUrl) {} async getTextContent(chapter) {} }是不是比想象中简单这个类没有继承任何基类也没有复杂的框架约束。接下来我们像解谜一样把每一块拼图拆开来看。拆解第一层那些静态属性是干什么的类名上方那一串static属性是插件在ReadCat眼中的身份证。在src/core/plugins/index.ts的Plugins类中每次导入插件都会先执行一次严格的校验_isPlugin方法逐项检查这些属性是否存在、格式是否正确ID唯一标识长度必须落在 16 到 32 位之间只能由字母、数字、下划线和连字符组成一旦重复会被拒绝导入TYPE插件类型0代表书源BOOK_SOURCE1是书城2是TTS朗读引擎GROUP 与 NAME分组名和显示名称用于在插件列表里归类和展示VERSION 与 VERSION_CODE版本号和版本代号未来在线更新时靠它们做版本比较PLUGIN_FILE_URL插件文件的更新地址留空表示不支持在线更新BASE_URL书源请求的基础域名ReadCat用它来拼接页面链接。对照src/core/plugins/defined/plugins.d.ts里的PluginBaseProps定义你会发现这七项就是全部清单。写错任何一项导入时都会弹出明确的错误提示这也是排错最快的地方——先检查静态属性再检查方法。拆解第二层三个核心方法就是一条完整阅读链路接口定义在src/core/plugins/defined/booksource.d.ts中总共只有三个方法它们恰好串起了用户从找书到读书的全流程第一步search(searchkey)搜索入口。用户输入关键词后ReadCat会把这个词传给所有启用的书源收集它们返回的结果列表。每个结果是一个SearchEntity包含书名、作者、封面图、详情页链接和最新章节标题。async search(searchkey) { const { body } await this.request.get(${this.BASE_URL}/search?q${searchkey}); const $ this.cheerio.load(body); const results []; $(.book-item).each((i, el) { results.push({ bookname: $(el).find(.name).text(), author: $(el).find(.author).text(), coverImageUrl: $(el).find(img).attr(src), detailPageUrl: $(el).find(a).attr(href) }); }); return results; }第二步getDetail(detailPageUrl)详情与章节目录。传入搜索得到或书架中的详情页链接返回完整的DetailEntity书名、作者、封面、简介以及最重要的——章节列表chapterList。每个章节是一个Chapter对象标题、链接、序号列表会按顺序显示在书籍详情页里。async getDetail(detailPageUrl) { const { body } await this.request.get(detailPageUrl); const $ this.cheerio.load(body); const chapterList []; $(.chapter-list a).each((i, el) { chapterList.push({ title: $(el).text(), url: $(el).attr(href), index: i }); }); return { bookname: $(.book-name).text(), author: $(.book-author).text(), coverImageUrl: $(.book-cover img).attr(src), intro: $(.book-intro).text(), chapterList }; }第三步getTextContent(chapter)正文解析。传入一个章节对象返回一个字符串数组每个元素是一段正文。ReadCat在src/core/plugins/index.ts中会自动对返回结果做HTML消毒处理sanitizeHTML过滤掉广告脚本和不安全的标签所以你只需要把正文抽干净就行。async getTextContent(chapter) { const { body } await this.request.get(chapter.url); const $ this.cheerio.load(body); const paragraphs []; $(#chapter-content p).each((i, el) { paragraphs.push($(el).text().trim()); }); return paragraphs; }src/core/plugins/booksource.ts里的isBookSource检查函数会逐一验证这三个方法是否都存在且为函数缺一不可——所以哪怕你的书源只需要搜索功能三个方法也得全部实现。拆解第三层构造函数里注入的四个工具细心的你可能注意到了构造函数接收了一个config对象里面有四个开箱即用的工具request.get / request.post封装的网络请求工具替你处理了跨域、代理、编码转换等问题返回{ body, code, headers }。这是书源插件唯一推荐的请求方式cheerio服务端jQuery用$(...)选择器解析HTML比正则抠标签可靠得多store插件专用的小型存储空间setStoreValue / getStoreValue / removeStoreValue适合缓存搜索历史、记住用户上次阅读位置单个插件最多4MB实现在src/core/plugins/store.tsnanoid / uuid生成随机ID的小工具做去重、拼请求参数时很顺手。这些工具全部由createPluginClassInstance在src/core/plugins/index.ts中注入插件代码运行在沙箱环境vm2里既能访问这些安全能力又碰不到主程序的其他部分这也是ReadCat插件系统纯净无广告的底气所在。验证环节插件开发工具怎么用写完之后怎么验证ReadCat在设置页的插件→开发区域内置了插件开发工具先导入.rpdt工具包设置端口号点击启动就会弹出一个专门的调试窗口对应源码electron/plugin-devtools.ts。调试窗口会实时显示插件代码里的console.log输出和报错堆栈你可以直接对照报错信息修解析逻辑改完重新导入即可不需要重启应用。对于书源插件来说这是最高效的排错手段。从示例到实用三个常见坑最后分享三个新手最容易踩的坑提前避开能省下大量调试时间详情页链接可能不是完整URL网站内部链接常是/book/123.html这样的相对路径记得用BASE_URL拼接成完整地址再请求封面图需要补全协议很多网站的封面路径以//开头建议判断后补上https:否则封面加载不出来章节正文用text()抽取后记得trim()否则每段开头结尾的空格会让阅读排版显得松散ReadCat的消毒过滤也会把空段剔掉。下一步交给你的想象力到这里你已经完整拆解了一个书源插件一份静态声明 三个核心方法 四个注入工具。这套模式同样适用于TTS朗读引擎和书城插件的开发接口定义都集中在src/core/plugins/defined/目录下随时可以翻阅参考。现在就可以打开 ReadCat从https://gitcode.com/gh_mirrors/re/read-cat克隆源码研究细节或者直接新建一个.js文件开始你的第一个自定义小说书源。先从你平时用得最多的那个小说网站练手把搜索和正文解析跑通你就正式入门了。当你的书源能让别人一键导入、直接读书时那种成就感绝对值得你此刻的尝试。动手吧第一个书源插件正在等你写完它【免费下载链接】read-cat一款免费、开源、简洁、纯净、无广告的小说阅读器项目地址: https://gitcode.com/gh_mirrors/re/read-cat创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考