GNU Affero General Public License v3.0

技术解读

以下内容由 GitRead 中文社区 编辑团队基于项目 README 与官方资料整理, 结合中文开发者的常见使用场景补充技术选型建议。具体以项目官方文档为准。

Legado 书库接入 KOReader:pengcw/legado.koplugin 技术剖析

项目背景与痛点

中文网文读者的设备生态有一段长期断裂:内容在 Android 的「阅读」(Legado)里,阅读体验却在 Kindle、Kobo、PocketBook 这些墨水屏设备上——而 KOReader 恰恰是这些设备上体验最好的第三方阅读器。问题在于,KOReader 是纯本地阅读器,它不理解「书源」这套东西,更不会执行 ruleSearch、ruleToc、ruleContent 那一整套抓取规则。

pengcw/legado.koplugin 填的就是这条裂缝。它不是一个把网页抓下来存成 TXT 的粗糙脚本,而是试图把 Legado 的书源体系、书架语义和阅读进度,桥接到 KOReader 的 Lua 运行时里。对墨水屏用户而言,这意味着不必在手机和电纸书之间来回导文件,也不必为了追更去折腾 Calibre 转换链。

核心技术揭秘

理解这个项目的关键,是先看清 Legado 书源的复杂度。一条书源不是「一个 URL + 一个 CSS 选择器」,它是一套方言:@css:、@XPath:、@json:、@js: 前缀区分解析器,{{}} 做变量插值,<js> 块里允许写任意 JavaScript,还有 loginUrl、jsLib、header、webJs 等扩展字段。KOReader 端跑的是 Lua/LuaJIT,没有 V8,没有 jsoup,也没有 Android 的 OkHttp。这是本项目的真正技术难点,而不是「发个 HTTP 请求」。

从架构上看,插件走的是一条双轨路线:

graph TD A[KOReader 主界面] --> B[legado 插件入口] B --> C[书源管理(加载 JSON 规则)] C --> D{"规则执行方式"} D -->|"依赖 Legado 后端"| E[Legado Web API 代理] D -->|"插件本地执行"| F[Lua 规则解析器] E --> G[目录与章节数据] F --> G G --> H[正文清洗与分页缓存] H --> I[本地文档生成] H --> J[阅读进度回写] I --> K[ReaderUI 渲染] J --> L[书架与进度同步]

第一条轨道是代理模式:插件把检索、目录、正文请求转发给局域网里跑着的 Legado 实例(其内置 HTTP 服务),由服务端完成规则执行,插件只负责结果消费。这让几乎所有书源都能用,代价是必须有一台常开的 Android 设备或服务端。第二条轨道是本地解析模式:插件在 Lua 侧实现规则方言的一个子集,把 @css、正则、简单 {{}} 翻译成 Lua 的字符串处理与模式匹配。这条路径离线可用,但对含 @js: 的书源必然降级。

往下是真正影响体验的部分:数据落地。KOReader 的 ReaderUI 面向的是本地文档,网络章节必须先经过正文清洗(剥标签、合并段落、处理 <br> 与全角空格)、再写入缓存或拼装成可被 DocumentRegistry 打开的文件。缓存分层在这里是刚需——目录层变动慢、正文层可增量追加、封面图需要单独落盘,否则每次翻页都重新请求会把墨水屏的刷新节奏彻底打乱。进度回写则是另一处细节:KOReader 有自己的 kosync 体系,插件需要把章节索引折算成 Legado 的 durChapterIndex / durChapterPos,两套坐标系的换算不准,就会出现「手机上在第 3 章、电纸书上跳回第 1 章」的经典事故。

功能亮点与差异

与常见的「RSS 抓取转 EPUB」方案相比,它的差异点有三个。

其一,保留书源语义而非网页语义。RSS 方案绑定具体站点,站点改版就废;书源方案绑定规则,规则社区维护,插件跟着规则走,生命周期长得多。

其二,书架与进度是一等公民。多数抓取工具只产出文件,读完即失联;本项目把「书架」抽象搬进 KOReader 菜单,检索、加书、追更、续读形成闭环,这是它区别于一次性转换脚本的核心。

其三,复用 Legado 既有生态。对已有 Legado 用户而言,书源、书架、阅读记录都是现成资产,插件是零迁移成本的前端延伸,而不是一个要重新配置的独立系统。

应用场景与落地建议

最适合的场景很明确:手里有 Kindle/Kobo,家里有一台常年开机的 Android 设备跑 Legado,希望在墨水屏上稳定追更。部署时注意几点:

  • 网络与超时:墨水屏设备 WiFi 休眠策略激进,务必配置合理的重试与超时,并在章节拉取时保持网络唤醒,否则失败率会高得离谱。
  • 规则兼容边界:上车前先看目标书源是否大量使用 @js: 与 loginUrl,这类源在本地模式下大概率不可用,应走代理模式。
  • 缓存与存储:正文缓存要设上限并支持章节级清理,Kindle 的可用空间经不起整本缓存多个书源。
  • 合规与频率:书源抓取本质上是对第三方站点的访问,请求频率、User-Agent、失败退避都要克制,这不是技术问题而是可持续性问题。

综合评价

优点:定位精准,切口极窄却极痛;架构上诚实地区分了「能代理就代理、能本地就本地」两条路径,没有为了纯粹性牺牲可用性;把书架、进度、缓存这些真正决定长期使用体验的东西都考虑进去了。

缺点:天花板清晰——Lua 侧永远无法完整复刻 JS 规则方言,兼容性只能靠子集加降级来维持;对 Legado 服务端的依赖使它并非「独立客户端」;书源生态的频繁变动会让解析层持续处于维护状态,这是所有规则型项目的宿命。

一句话总结:它不是通用方案,但对「Legado + 墨水屏」这个具体人群,它把原本需要五步手工操作的事情压缩成了一步,这就够了。

简要分析

热度分
345
价值分
190
活跃状态
活跃

语言占比

Lua

Release

贡献者

README

legado.koplugin

License KOReader Version

一个在 KOReader 中阅读 Legado 开源阅读书库的插件, 适配阅读3.0, 支持手机app、reader3、轻阅读后端,初衷是 Kindle 的浏览器体验不佳, 目的部分替代受限设备的浏览器实现流畅的网文阅读,提升老设备体验。


demo

功能特性

  • 前后章节无缝翻页浏览
  • 离线缓存,自动向前向后预缓存章节
  • 同步阅读进度
  • 书籍换源搜索
  • 碎片章节历史记录清除
  • 支持漫画流式阅读
  • 支持绑定按键或手势
  • 文件浏览器云端书籍链接

安装方法

  1. 下载最新版本的插件发布包 release。
  2. 将 plugins/legado.koplugin 目录复制到设备上 KOReader 的插件目录 koreader/plugins 文件夹中。
  3. 重启 KOReader。
  4. 安装后在 文件管理界面 顶部菜单搜索部分找到插件菜单入口。
  5. 设置服务接口地址。分为服务器版和手机阅读APP版,请按要求填写(例如:手机APP开启Web服务后填入 http://192.168.1.8:1122)。
  6. (可选) 在 点击与手势 > 手势管理器 里设置快捷键 (比如在文件管理界面长按右下角开启书库,在阅读界面长按右下角返回章节目录)。

设备支持

已验证机型:

・Kobo → Libra 2
・Kindle → K3/K5/PW4
・其他 KOReader 设备 → 理论兼容

常见问题排查

——————Q&A——————
验证插件是否安装成功
  • koreader 顶部下拉菜单 工具 > 更多工具 > 插件管理器 里面查看是否有 Legado 阅读书库,有就是安装成功了。
安装后找不到插件入口
  1. 首先检查插件是否安装成功
  2. 确保你处于 文件浏览器 界面
  3. 打开顶部菜单🔍 搜索
  4. 找到 Legado 书目
填写接口后提示 timeout 或下拉无法刷新书架

问题描述:
设置好接口后刷新加载不出书架,出现 timeout 或其他提示(通常是接口无法正确访问)。
注意:这属于网络连接问题,非插件本身问题,请按以下步骤排查:


排查步骤:
  1. 检查接口地址准确性

    • IP 地址输错的情况时有发生
    • 示例正确格式:http://192.168.1.8:1122
  2. 核对接口格式

    • 开源阅读 app:不需要加 /reader3 后缀
    • reader3 服务器版本:需要加 /reader3
    • 轻阅读:需要加 /api/5 5为 api 版本号
    • 若有账号密码认证需按格式填入
  3. 测试接口可访问性

    • 假设接口地址为:http://192.168.1.8:1122
    • 在 Kindle 浏览器访问(或同局域网其他设备):
      http://192.168.1.8:1122/test
      
    • ✅ 正常:页面会显示 web/test 字符
    • ❌ 异常:无输出或其他

常见失败原因

  • 阅读 APP 的 Web 服务未开启
  • 地址或端口号输入错误
  • 设备不在同一局域网
  • 局域网开启了网络隔离
  • (根据实际情况排查其他可能原因)

安装后点击章节报错或者闪退
  • 一般是 koreader 版本低了有部分函数不兼容, 请升级最新版
如何同步阅读进度
  • 在目录页面有菜单 拉取网络进度 与 上传章节 (为节约资源,插件没有在阅读时自动同步进度,需要手动点击)
其他端换源了与本地内容不一致
  • 刷新书架即可
如何清除缓存
1. 单章缓存清除

入口:按住章节不放有菜单选项

2. 单本书籍缓存清除

入口:章节页面左上角菜单选项

3. 所有缓存清除

两种方法(效果相同):

  • 书架页面左上角菜单有选项
  • KOReader 菜单 开发者选项 > 清除缓存
源章节内容和本地不一致
  • 在章节菜单长按章节清除缓存后重新下载
开源阅读是否需要一直开着 web 服务
  • 章节缓存后支持离线阅读
保活开源阅读 app 后台的办法
  • 如果出现频繁 web 服务被关闭,可以保活下后台,每个品牌不一样,可以参考下 adguard 的设置,关键词 “如何让 AdGuard 保持后台运行”, 把程序改成开源阅读即可。
开源阅读 app 接口地址频繁变化

这个属于网络知识固定 ip 的方法:

🔸 手动设置 DHCP
🔸 路由器里面绑定 MAC
🔸 关掉手机 wifi 设置里面手机虚拟 mac 地址
(每个手机品牌不一样,大概差不多这个意思)

相关项目


开源声明

本插件不提供内容,如有侵权请联系删除

评论

暂无评论