RSS 播客订阅
全新推出 RSS 储存库模式,支持通过订阅地址直接同步单本书(播客)内容。
RSS 订阅适合什么场景?
RSS 储存库可以把远端播客、连载有声书或其他音频 Feed 同步成一本可播放的书。服务端只保存书籍与章节索引,播放时由客户端通过远端音频地址读取内容,不需要先把全部音频下载到服务器。
一个 RSS 储存库对应一本书。Feed 中的有效音频条目会成为书籍章节,标题、作者、演播者、封面、简介、发布时间和时长会在来源提供时一并同步。
支持的 Feed 和字段
当前支持:
- RSS 2.0:标准
channel、item、guid和enclosure字段 - iTunes Podcast:作者、所有者、封面、简介和章节时长
- Media RSS:音频
media:content、封面和标题;命名空间前缀可以自定义 - Dublin Core:作者和发布时间等通用元数据
- Podcast 2.0 人员字段:作者、主持人或演播者信息
- Atom:Feed 元数据与
rel="enclosure"音频链接
暂不支持 JSON Feed、OPML 批量导入、网页自动发现订阅地址,以及需要 Cookie 登录的私有 Feed。
哪些条目会成为章节?
服务端按以下顺序寻找音频:
- RSS 标准
<enclosure>; - Media RSS 的音频
<media:content>; - Atom 的
<link rel="enclosure">; - 明确以
.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 单集删除或“完全镜像上游删除”的开关。
添加和自动同步
- 使用管理员账号进入 “我的” -> “储存库管理”。
- 点击 “添加储存库”,选择 “RSS 播客订阅”。
- 填写名称和以
http://或https://开头的 Feed 地址。 - 保存。服务端会验证格式,并确认至少存在一个有效音频条目。
- 在储存库列表触发同步,或开启自动同步并选择周期。
订阅地址不一定以 .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 单集清理入口,不建议通过清空数据库、清除进度或重建设备环境来规避。
