Skip to content

RSS 订阅适合什么场景?

RSS 储存库可以把远端播客、连载有声书或其他音频 Feed 同步成一本可播放的书。服务端只保存书籍与章节索引,播放时由客户端通过远端音频地址读取内容,不需要先把全部音频下载到服务器。

一个 RSS 储存库对应一本书。Feed 中的有效音频条目会成为书籍章节,标题、作者、演播者、封面、简介、发布时间和时长会在来源提供时一并同步。

支持的 Feed 和字段

当前支持:

  • RSS 2.0:标准 channelitemguidenclosure 字段
  • iTunes Podcast:作者、所有者、封面、简介和章节时长
  • Media RSS:音频 media:content、封面和标题;命名空间前缀可以自定义
  • Dublin Core:作者和发布时间等通用元数据
  • Podcast 2.0 人员字段:作者、主持人或演播者信息
  • Atom:Feed 元数据与 rel="enclosure" 音频链接

暂不支持 JSON Feed、OPML 批量导入、网页自动发现订阅地址,以及需要 Cookie 登录的私有 Feed。

哪些条目会成为章节?

服务端按以下顺序寻找音频:

  1. RSS 标准 <enclosure>
  2. Media RSS 的音频 <media:content>
  3. Atom 的 <link rel="enclosure">
  4. 明确以 .mp3.m4a.m4b.aac.flac.wav.wma.ogg.opus 结尾的直接链接。

普通节目网页、文章链接、图片和视频不会被当作音频。Feed 能读取但没有任何有效音频时,连接测试会直接提示该订阅没有受支持的音频条目。

音频和封面可以使用相对地址,服务端会按最终 Feed 地址解析;所有远端资源只接受 HTTP 或 HTTPS。

章节身份和同步规则

为了避免刷新订阅后丢失进度,服务端优先使用 RSS guid 或 Atom entry id 识别同一个条目。来源标识不变时,即使 CDN 地址、临时令牌、标题、时长或 Feed 顺序变化,也会更新原章节并保留后端章节 ID。

旧版本创建的 RSS 章节没有来源标识。升级后的首次同步会先按原音频地址匹配并补齐标识,不会主动重建全部章节。

许多播客 Feed 只返回最近若干期,因此同步采用保守策略:

  • 本次 Feed 中出现的条目按来源当前顺序更新;
  • 本次未出现的既有章节默认保留,并按原相对顺序追加;
  • Feed 解析失败或没有有效音频时,不会清空既有书籍和章节;
  • 同一来源标识或音频地址重复出现时,只生成一个章节。

这意味着从上游删除一期节目不会自动删除 Leelaa Reader 中已经同步的历史章节。当前版本不提供 RSS 单集删除或“完全镜像上游删除”的开关。

添加和自动同步

  1. 使用管理员账号进入 “我的” -> “储存库管理”
  2. 点击 “添加储存库”,选择 “RSS 播客订阅”
  3. 填写名称和以 http://https:// 开头的 Feed 地址。
  4. 保存。服务端会验证格式,并确认至少存在一个有效音频条目。
  5. 在储存库列表触发同步,或开启自动同步并选择周期。

订阅地址不一定以 .xml/feed 结尾;只要该 URL 最终返回受支持的 RSS 或 Atom 文档即可。服务端支持有限次数的 HTTP 重定向。

私有 Feed 和访问令牌

RSS 模式目前没有独立的用户名、密码或 Cookie 输入框。带访问令牌的私有订阅可以直接使用供应商提供的完整 URL,但请把它当作密码保管:

  • 不要把完整地址发到公开 issue、截图或日志中;
  • 令牌失效后,在储存库编辑页替换订阅地址;
  • 需要网页登录、Cookie 或交互式认证的 Feed 暂不支持。

音频地址本身如果带短期令牌,只要条目 guid/entry id 保持不变,后续同步会更新播放地址而不更换章节 ID。

播放、下载和流量

  • 在线播放会通过服务端返回的章节播放入口跳转到远端音频,不会长期代理整段音频流量。
  • 移动端离线下载会把所选章节保存到设备,实际能力仍取决于来源是否允许下载以及令牌有效期。
  • 来源服务器不可访问、禁止 Range 请求或返回错误的媒体类型时,可能出现播放或下载失败。

排错

提示“RSS 读取失败”

  • 在浏览器中打开订阅地址,确认返回的是 XML Feed,而不是登录页、验证码页或普通 HTML 页面。
  • 确认服务端所在网络可以访问该域名;Docker 内的 DNS 和代理配置可能与电脑浏览器不同。
  • 如果地址包含令牌,确认令牌没有过期或被截断。
  • 任务与日志 中查看失败阶段:请求失败、HTTP 状态异常、响应过大、格式不支持或无有效音频。

能看到节目但章节数为 0

  • 检查条目是否提供 RSS enclosure、Media RSS 音频、Atom enclosure 或明确的音频直链。
  • 普通文章页链接不会被当作音频,这是为了避免生成无法播放的章节。

刷新后仍保留上游已删除的节目

这是预期的保守同步行为,用于保护截断 Feed 中的历史章节和收听进度。当前暂无 RSS 单集清理入口,不建议通过清空数据库、清除进度或重建设备环境来规避。