RSS 轮询 Onebox

:information_source: 摘要 RSS Polling Onebox 将 RSS Polling 的导入内容渲染为原始文章的 Onebox,支持可选的源摘要、YouTube 描述以及标题格式
:hammer_and_wrench: 仓库链接 Peter-Petrik/discourse-rss-onebox
:open_book: 安装指南 如何在 Discourse 中安装插件

功能

  1. Onebox 渲染:在您选定的分类中,RSS Polling 导入的内容将显示为文章 URL 的 Onebox——包含文章页面的标题、图片和描述——而不是截断至第一段的源正文。其他分类中的导入内容保持不变。
  2. 隐藏“显示完整帖子”:仅在选定的分类中隐藏该按钮。
  3. 源摘要(可选):当文章页面本身没有描述时,源中的摘要会显示在 Onebox 内部;如果无法构建 Onebox,则显示在链接下方。
  4. YouTube 描述(可选):来自频道源的视频完整描述会显示在播放器下方,保留换行和可点击的链接。
  5. 标题格式(可选):为博客和 YouTube 主题提供独立的格式,使用 %{title} 和 %{source},例如 %{source} 博客: %{title}。重命名操作是静默的——不产生修订记录、不提升主题、不发送通知——且旧链接依然有效。
  6. 显示名称:管理页面列出所有 RSS Polling 源及其发布名称,您可以在此设置用于 %{source} 的名称。保存后,该源的标题将重新渲染。
  7. 防止源更新覆盖:已编辑的源帖子或更改的源格式不再覆盖已 Onebox 化的主题。
  8. Rake 任务(针对现有主题):rss_onebox:convert 将早期导入转换为 Onebox,rss_onebox:enhance 则回填摘要、描述和标题。两者默认均为试运行(dry run)。

设计初衷

我们运营一个论坛,将成员的博客和 YouTube 频道拉取到同一个分类中。RSS Polling 的摘录渲染了许多源的效果不佳——格式错乱、图片缺失、以及一个会重新抓取页面的“显示完整帖子”按钮——而将相同的 URL 粘贴到帖子中却能生成干净的 Onebox。此插件使所有导入内容看起来都像那个粘贴的链接,并补充了仅靠页面本身无法提供的信息。

配置

安装后,前往 管理 → 插件 → RSS Polling Onebox:

  1. 设置:启用插件,选择应进行 Onebox 渲染的分类,并开启可选功能。
  2. 显示名称:为每个源设置用于标题中 %{source} 的名称,或留空以使用源发布的名称。刷新发布名称 会读取所有已启用的源。

对于安装前已导入的主题,请在容器内运行 rake rss_onebox:convert,然后运行 rake rss_onebox:enhance(两者均为试运行;添加 APPLY=1 以写入更改)。README 记录了所有设置和任务,CHANGELOG 列出了所有发布版本。

注意事项

  1. 已在 Discourse 2026.7 ESR 上测试;截至 2026 年 9 月,代码已验证与 main 分支兼容。旧版本未经验证。
  2. 需要 RSS Polling,该功能已随 Discourse 捆绑提供。
  3. 由于文档化的钩子尚不存在,某些功能封装了 RSS Polling 和 TopicEmbed 的内部机制;请参阅 RSS Polling:插件扩展点。
  4. 在 RSS Polling 中原生读取 YouTube 描述正在 RSS Polling:从 YouTube 频道源读取视频描述 中讨论;如果该功能进入核心,此插件将使用它。
  5. Onebox 的质量取决于每个文章页面的 Open Graph 标签。

问题和反馈:请在此回复,或在 GitHub 上提交 issue。

3 个赞

我觉得这个主意不错,而且我很好奇能不能结合大语言模型(LLM)来生成经过精心设计的摘要,而不是随意截取一段内容?

在我看来,这或许是个折中方案,因为单纯粘贴链接似乎违背了论坛的初衷。

感谢分享!

2 个赞

看起来很棒。我在想,如果你的网站是公开的,我们是不是可以去看看它实际运行的效果?

既然需要 RSS Polling 插件,那是不是需要在两个插件中都设置信息源?还是只需要在你的插件中设置?

1 个赞

谢谢!不过这段文字并不是随意选取的——它是文章自带的描述或作者自己提供的动态摘要,因此成员看到的是博主的原话,而非转述。主题本身是成员讨论该帖子的地方;而 Onebox 则是进入该讨论的入口。

作为一个可选项,使用 LLM 生成摘要是个有趣的想法。Discourse AI 的 gists 功能是对主题内容进行摘要,而在这里主题内容仅仅是一个链接,这意味着该插件需要读取文章内容并将其交给论坛配置的模型处理。我希望这个功能是可选开启的(opt-in),因为它会消耗 token,并且会用生成的内容替换作者的原话——但我已经记下这个建议了。

很遗憾不行——我们的论坛仅限成员访问,因此上面的截图直接来自实时主题。如果你有特别想看的部分,我很乐意发布更多截图。

只需要在 RSS Polling 中设置。你在那里添加和管理 feed,和现在完全一样;这个插件本身没有 feed。它作用于 RSS Polling 导入到你所选分类中的内容,而“显示名称”页面只是列出 RSS Polling 的 feed,以便你为它们命名。

1 个赞

太棒了,Peter,谢谢你的考虑!你看,提示词(prompt)可以这样处理:不改变作者的语气,并且确保结果仅基于链接中指定的数据生成。

https://ask.discourse.com 采用的就是这种方法,那里的回答严格绑定在文档和经过筛选的知识库上。模型几乎不使用其训练数据,我认为这是实际利用这项技术最聪明且最有效的方式。

此外,还有一些价格低廉的模型在摘要方面表现非常出色。所以我希望这个功能能够被实现;它不仅能提升读者的体验,也有助于改善 SEO/IA-SEO 实践。

1 个赞

有道理——如果严格基于文章内容,就像 Ask Discourse 仅在其文档范围内运作那样,就能解决我对作者声音的主要担忧。这已经作为一个可选功能列入了清单,目前还没有时间表。