本地获取 onebox 图片

大家好,

我开发了一个插件,用于扩展我们论坛许多用户常用网站的 onebox 功能。

该 onebox 还会显示来自上述网站的图片。请问有没有办法将图片本地存储,这样即使源网站上的图片发生变化,onebox 也不会失效?

我注意到论坛本身具备此类功能,但无法找到如何在所创建的插件中访问该功能。

非常感谢!:smiley:


附:此处 是我开发的插件的 GitHub 仓库。非常欢迎对我的代码提出任何反馈。

(这是我第一次从 NodeJS 后端背景转向使用 Ruby 进行编程。)

1 个赞

Onebox 和 Discourse 原生即可实现此功能,无需任何额外插件。

你只需确保目标网站生成正确的 og 元标签。如果需要修改,应针对目标网站进行调整,而非 Discourse,这样才能实现预期效果。

例如:

BBC 网站为每个页面生成这些元标签。Discourse 和 Onebox 将提取 site_name、image、description 和 title,并自动生成 Onebox 预览。

只要确保你的目标网站遵循该标准,通常无需再做其他操作。

这样做是合理的,因为这样你的网站在其他平台(如 Facebook)的预览也能得到覆盖。

我假设你对该网站拥有控制权或影响力,但这可能是一个较大的假设!

如果无法实现上述方案,你则需要在 Onebox 中开发一个定制引擎,以识别该网站的独特性并抓取相应的元数据。Nokogiri 库是完成此项工作的合适工具。

1 个赞

它并没有:sweat_smile:

不幸的是不行:/ 此外,我还想稍微自定义一下 onebox 视图。如果使用默认引擎,这是无法实现的。

不过……
我已经开发了 onebox 扩展。它完成了所有获取工作,运行效果很好!

问题是:如何确保获取到的图片会被本地存储? 我猜需要在插件中编写一些额外的代码。

一些可供探索的途径:

Cooked Post Processor 会为此排队一个任务,详见:

相关任务代码位于:discourse/app/jobs/regular/pull_hotlinked_images.rb at e98c7b15d6ce864f1b5e83b6881700eaa808bdd1 · discourse/discourse · GitHub

如果你已成功将热链图片恢复至帖子中,且图片符合相关条件,同时设置已确保外部图片被上传,那么此功能应能正常工作。

image

相关条件见:discourse/lib/cooked_post_processor.rb at e98c7b15d6ce864f1b5e83b6881700eaa808bdd1 · discourse/discourse · GitHub

如果此功能尚未生效,但你已能在一框(onebox)中成功显示外部图片,我的推测是这些图片尚未满足上传所需的条件。

2 个赞