ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

书源找不到想看的书?花20分钟给ReadCat写一个专属书源插件

书源找不到想看的书?花20分钟给ReadCat写一个专属书源插件 书源找不到想看的书花20分钟给ReadCat写一个专属书源插件【免费下载链接】read-cat一款免费、开源、简洁、纯净、无广告的小说阅读器项目地址: https://gitcode.com/gh_mirrors/re/read-cat“等一下这书我明明在XX网站在线看ReadCat里怎么搜不到”——这是很多刚用上这款开源小说阅读器的用户第一句吐槽。原因其实很简单ReadCat默认不携带任何书源插件所有在线内容都靠你亲手导入或编写。好消息是写一个能搜索、能看详情、能读正文的插件全程只需要实现3个方法你完全可以在一个午休时间里搞定自己的第一个专属书源。为什么书源插件是ReadCat的灵魂ReadCat定位是免费、开源、简洁、纯净、无广告的小说阅读器它把“内容从哪来”这件事完全交给插件系统。插件跑在独立的JavaScript沙箱里既不污染主程序也让你可以放心粘贴自己写的代码。所有插件的类型定义都集中在src/core/plugins/defined/booksource.d.ts先花两分钟读一遍你会发现它短得惊人——书源只需要三样东西搜索、详情、正文。第一关给插件办一张“身份证”ReadCat插件管理器在导入时会做严格校验src/core/plugins/index.ts身份证字段一个都不能少。照抄这个骨架把值换成你自己的class MyBookSource { static ID myBookSource_123456789; // 16~32位只允许字母数字和-_别乱改 static TYPE 0; // 0书源1书城2TTS朗读 static GROUP 原创; static NAME 我的小说源; static VERSION 1.0.0; static VERSION_CODE 1; static PLUGIN_FILE_URL ; // 留空代表不提供在线更新 static BASE_URL https://example.com; // 目标网站根地址 constructor({ request, cheerio }) { this.request request; // 帮你封装好的网络请求自动处理编码和代理 this.cheerio cheerio; // 服务端版jQuery解析HTML就靠它 } }避坑提醒ID是插件唯一的身份证导入时重复会直接报错“Plugin exists”。取个够长又独特的ID能少踩一个坑。第二关点亮三个核心技能接口定义在src/core/plugins/defined/booksource.d.ts一共就三个方法逐个点亮即可。技能一search——让用户搜得到你的书async search(searchkey) { const { body } await this.request.get( ${BookSource.BASE_URL}/search?q${encodeURIComponent(searchkey)} ); const $ this.cheerio.load(body); return $(.book-item).map((_, el) ({ bookname: $(el).find(.name).text(), // 书名 author: $(el).find(.author).text(), // 作者 detailPageUrl: $(el).find(a).attr(href), // 详情页链接必填 coverImageUrl: $(el).find(img).attr(src), // 封面可选 })).get(); }看到没ReadCat连encodeURIComponent都不限制你用沙箱里给足了常用能力。返回的SearchEntity字段名必须严格对上bookname、author、detailPageUrl。技能二getDetail——把目录完整搬下来用户点击一本书后ReadCat会带着详情页链接来敲门async getDetail(detailPageUrl) { const { body } await this.request.get(detailPageUrl); const $ this.cheerio.load(body); const chapterList $(.chapter-list a).map((i, el) ({ title: $(el).text(), url: $(el).attr(href), index: i, })).get(); return { bookname: $(.book-title).text(), author: $(.book-author).text(), coverImageUrl: $(.book-cover).attr(src), intro: $(.book-intro).text(), chapterList, // 章节数组一个都不能漏 }; }技能三getTextContent——把正文干干净净交出来这是阅读体验的生死线。ReadCat会在你返回后自动对正文做HTML消毒所以这里只负责取回正文别塞广告脚本之类的脏东西进去async getTextContent(chapter) { const { body } await this.request.get(chapter.url); const $ this.cheerio.load(body); // 挑出正文节点按段落切成数组返回 return $(#content).text().split(/\n/).filter(t t.trim()); }chapter是{ title, url, index }结构直接按url请求即可。返回string[]每个元素是一段文字。第三关导入验证见证奇迹写完保存为my-source.js打开ReadCat →设置 → 插件→ 点击导入选中文件插件就进入列表了。然后回到搜索页搜一本书——如果一路顺畅你的书架里就会多出一个能用的新书源。想在开发时快速看日志ReadCat内置了插件调试窗口相关代码在electron/plugin-devtools.ts可以观察插件运行时的 console 输出排查选择器写错这类问题会快很多。常见错误搜索不到结果时八成是选择器没写对。先用浏览器打开目标网站按F12确认.book-item这类类名真的存在再回到插件里跑。从“能跑”到“好用”的进阶清单三个方法跑通只是起点想让插件值得被收藏建议再做三件事错误处理每个方法包一层try/catch网站改版或断网时给出友好提示而不是直接报红。图片代理部分网站封面防盗链给coverImageUrl走一下项目里的代理配置能提升显示成功率。参数化BASE_URL如果网站有多域名镜像把地址抽成变量改一处即可全插件生效。完整实现可参考src/core/plugins/built-in/tts/edge.ts这个内置TTS插件它是官方沙箱写法的活教材。下一步行动现在就打开src/core/plugins/defined/booksource.d.ts对照接口挑一个你常逛的小说网站按“身份证→三技能→导入”的顺序走一遍。第一版不求完美能搜到、能点开、能读就及格了。等你写完第一个书源你大概就能体会到——开源阅读器真正的自由是内容来源由你说了算。【免费下载链接】read-cat一款免费、开源、简洁、纯净、无广告的小说阅读器项目地址: https://gitcode.com/gh_mirrors/re/read-cat创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表