Onebox 和 YouTube 的问题

例如:

在 Fakebook 主题、TLP 插件等情况下,YouTube 缩略图无法在主题列表中显示。

复现步骤(STR):

发布一个 YouTube 视频,切换到 Fakebook 主题,缩略图未显示。

临时解决方案:

重建帖子后缩略图会出现。然而,由于用户期望缩略图能立即显示,无需人工干预,因此这并不是一个理想的解决方案。

更多信息:

Topic.image_url 似乎为 nil

这个问题似乎是自 8 月初以来最近才出现的……我认为在 8 月 5 日之前该功能正常(但不确定具体何时失效)。我注意到这与 Onebox 的新版本发布时间大致吻合。

我在之前的构建版本上进行了测试,该问题并未出现,因此希望这并非 YouTube 的 Open Graph 响应所致。此外,Fakebook 主题与 TLP 插件表现出相同的行为,从而排除了 TLP 插件的问题。因此,我怀疑这是 Discourse 或 Onebox 近期引入的回归问题。

这对使用主题列表预览功能的用户来说是一个真实存在的问题。

4 个赞

更新:我已执行 Git Bisect,问题似乎出在以下提交:

3 个赞
diff --git a/lib/cooked_post_processor.rb b/lib/cooked_post_processor.rb
index ac16eb82c16..46050a69e40 100644
--- a/lib/cooked_post_processor.rb
+++ b/lib/cooked_post_processor.rb
@@ -28,7 +28,7 @@ def initialize(post, opts = {})
     @cooking_options = @cooking_options.symbolize_keys
 
     @doc = Nokogiri::HTML::fragment(post.cook(post.raw, @cooking_options))
-    @has_oneboxes = post.post_analyzer.found_oneboxes?
+    @has_oneboxes = @doc.css("aside.onebox").count > 0
     @size_cache = {}

@nbianca 为什么我们不再在这里使用 post.post_analyzer.found_oneboxes? 方法了?

所有使用 oembed 或 iframe 的 Onebox 在新的 CSS 选择器模式下都会失败,这也导致我们的 Onebox 检测器在整个代码库中表现不一致。

4 个赞

我同意 @nbianca 的观点,这看起来是一个非常脆弱的改动,为什么选择了这个方法?

2 个赞

问题在于,First Onebox 被授予了任何发布的链接,无论该链接是否真的生成了 Onebox。这是因为 PrettyText 会给所有链接添加 class="onebox" 类,随后 Oneboxer 会尝试解析所有带有 onebox 类的链接。

我做的修改会检查最终文档中是否存在任何 Onebox(Onebox 是带有 onebox 类的 aside 元素)。我会再仔细检查一下,看看是什么导致了问题以及原因,然后提出一个能同时修复这两个问题的方案。

7 个赞

我在这里做了一些改进,并创建了 这个 PR

我刚刚测试了 v2.3.2,看起来 YouTube 链接并没有设置主题的 image_url 属性。原因是图像是从 img 标签的 src 属性中提取的,但当链接 YouTube 视频时,存在一个带有 background-image CSS 属性的 <div>

您确定 image_url 以前是被设置过的吗?

5 个赞

谢谢查看。让我检查一下我的部分,然后回复。

@nbianca 抱歉,这可能是两个问题的组合。

在此提交之前及当时,配合 TLP 插件可以正常工作:

在此提交之后,配合 TLP 插件会失败。

我同意你的看法,对于 YouTube,默认情况下该属性并未填充。

看来 TLP 在覆盖处理方面做得更好,但它依赖的某些东西现在已经发生了变化。

供参考,相关的覆盖代码在这里:https://github.com/angusmcleod/discourse-topic-previews/blob/master/lib/cooked_post_processor_edits.rb

我认为我需要做进一步分析,但看起来变化已经大到足以破坏 TLP 的功能。

让我再深入调查一下,然后再次回滚。不幸的是,我可能在未来几天内没有机会处理此事。

1 个赞

我不明白那个提交怎么会破坏 TLP 插件🤔 你的二分查找是 100% 确定的吗?

1 个赞

奇怪的是,二分查找竟然定位到了 cooked_post_processor 的变更……我会再次确认并回滚。

是的,已确认:

包含此提交时失败:7c83d2eeb261ac676a8320e6a704752c56fd242e
包含此先前提交时正常:922c40f87cdceb8197dd61361334e0def23f13d5

1 个赞

问题已在此处修复:

7 个赞