对于外部 Facebook Instant Article 生成器,我们需要已处理的 HTML 帖子,但不包含渲染后的一键框(oneboxes)…
是否已存在针对帖子的此类路由或 API 端点?
对于外部 Facebook Instant Article 生成器,我们需要已处理的 HTML 帖子,但不包含渲染后的一键框(oneboxes)…
是否已存在针对帖子的此类路由或 API 端点?
抱歉,我原以为您需要原始帖子,后来我意识到自己错了,因为帖子已经发布了。
有人吗?这能否以某种方式实现?
你可以编写一个插件,当请求的 User Agent 字符串与 FB 机器人的 User Agent 字符串匹配时,隐藏(或移除)One Box 的 DOM 元素。
希望这能帮到你。
您需要对 HTML 进行后处理,因为已渲染的帖子中已经包含了所有展开的一键盒(onebox)的 HTML。
这正是问题所在。由于已渲染的帖子中包含“单框”(oneboxes,它们不再包含原始媒体链接,只有原始帖子才保留原始链接),我们无法将其转换为符合 Facebook Instant Articles (IA) 有效格式的文档。
Iframely 能够从独立链接生成符合 IA 标准的 iframe。我们曾尝试使用原始帖子,配合 PHP 的 Markdown 解析器(Markdown-It for PHP)以及 Iframely 来处理独立链接,但 Discourse 的 Markdown 解析过程要复杂得多,而我们并不希望重新实现 Discourse 对 Markdown 所执行的所有“魔法”处理。因此,我们正在寻找一种方案:获取已渲染的帖子,但其中不包含已解析的单框(因为我们希望随后通过 Iframely 对这些单框进行后处理)。
我们目前的方法适用于简单帖子:即以原始帖子为基础,使用 PHP 的 Markdown-It 将其转换为 HTML,再利用 Iframely 生成符合 IA 标准的媒体卡片(单框不符合该标准),然后将 HTML 转换为 Facebook IA 所需的 HTML 格式,并通过 Facebook PHP SDK 进行传输。然而,由于 Discourse 在 Markdown 解析过程中应用了大量额外规则,如果我们能直接从 Discourse 获取已解析的 HTML,同时排除其中的单框,那将理想得多。
你不需要在 Discourse 外部处理帖子。只需对负责的方法进行猴子补丁,并排除生成单盒(oneboxes)的部分。大致思路如此。
嗯,我们并不想总体上改变 Discourse 的烹饪行为,但需要一个 API 端点来生成已渲染的帖子,同时不包含 oneboxes(但保留原始独立链接,例如作为 a 标签)。
只需隐藏或移除该 DOM 元素即可。这其实很简单。
这基本上就是“标准”做法,适用于开发者不希望显示(或想要移除)任何 DOM 元素的类似场景。
注意:
使用 Ruby 的 ‘gon’ gem 可以非常轻松地将任何 Ruby 变量传递给 JavaScript,不过我仅在 Rails 应用中使用过它,尚未在包含 EmberJS 的栈中使用(无论如何,将 Ruby 变量传递给 JS 的方法有很多)。