"Onebox Assistant",可靠地抓取那些预览!

功能说明

将此类结果:

(当您的服务器无法获取页面源代码,因此无法提取构建单框所需的标签时)

转变为这样:

它仅为单框功能提供了一条替代路径,以便在目标服务器拒绝连接时获取页面源代码并查找元数据。

它不会改变单框如何处理页面源代码以查找元数据并渲染单框的方式。

它的目的是允许您输入第三方 API 的详细信息和凭据,以获取页面内容,而不是直接向目标页面发起正常的 HTTP 调用。

原因

我发现我的服务器被禁止访问多个商业网站,导致单框无法渲染。它本质上利用了第三方 API 的可信度,有点像邮件服务。

为何具有成本效益

您可以使用相对便宜的 VPS,即使您的 IP 或用户代理被“列入黑名单”,仍能获得可靠的单框功能。

您不需要它的情况

如果您使用默认安装即可正常为所有目标内容生成单框,且所有用户都满意。

前提条件

您需要拥有一个合适的第三方 API 账户。

设置

onebox assistant api base address:  https://api.embed.rocks/api/

上述示例使用的是 embed.rocks,但未来可能会添加对其他 API 的支持。目前,embed.rocks 性价比较高。

onebox assistant api base query:   ?url=

onebox assistant api options:   &skip=article,description,oembed,imextra&include=source

onebox assistant api page source field:   source

您还需要输入由 embed.rocks 提供的 API 密钥。

参见下方示例:

此设置允许您忽略预取(检查直接爬取是否返回结果),而直接使用 API。

image
默认值为 OFF。

我建议将其设置为 TRUE。

当然,这成本更高,但通常能获得更好的结果,因为在某些情况下,由于不被信任,预取会被重定向到错误的页面。

支持信息

请记住,如果您之前尝试过对某个链接生成单框,Discourse 核心会缓存该结果。

您可以在链接末尾添加随机查询字符串以绕过缓存:https://mylink.com/todaynews?random=random

您还可以通过以下方式检查 API 是否响应,例如:

curl -X GET "https://api.embed.rocks/api/?url=https%3A%2F%2Fnews.bbc.co.uk%0A&skip=article,description,oembed,imextra&include=source" -H "x-api-key: %%%your-api-key%%%"

您需要使用类似 这样的网站(未作担保!)对您要调用的站点(即 url 参数值)进行 URL 编码。

已知限制

  • 目前仅测试过一家提供商,尚未测试其他提供商。该提供商是 https://embed.rocks(我与该提供商无任何关联)。如果工作得到赞助,我很乐意考虑支持更多服务。

  • 猴子补丁是在方法级别完成的。这会覆盖比实际需要更多的代码,从而增加了插件在核心更新后失效的风险。不过,我认为没有进一步减少这种风险的方法?

如何安装插件

请参阅此处指南:Install plugins on a self-hosted site

此仓库地址为:https://github.com/merefield/discourse-onebox-assistant

https://github.com/merefield/discourse-onebox-assistant

欢迎提供反馈。如果您觉得它有用,请在 GitHub 上给它点星。

41 个赞

抱歉,我还没来得及在启用此插件的情况下重建我们的网站,我今晚就会去做。

@WaitroseCarpark 我没有填写任何类似的内容,我遵循的步骤如下:

步骤 1:

步骤 2:

步骤 3:

步骤 4:
完成机器人验证

步骤 5:
添加 oEmbed API


签署协议

oEmbed 出现绿色勾号

步骤 6:
从设置 > 基础信息中获取凭据

步骤 7:
获取应用令牌

使用上述凭据,运行:

curl -X GET "https://graph.facebook.com/oauth/access_token?client_id={your-app-id}&client_secret={your-app-secret}&grant_type=client_credentials"

返回结果如下:

{"access_token":"378384926723309|xxxxxx","token_type":"bearer"}

测试您的身份验证令牌:

curl -X GET \ "https://graph.facebook.com/v9.0/instagram_oembed?url=https://www.instagram.com/p/fA9uwTtkSN/&access_token=xxxx..."

返回结果如下:

{"version":"1.0","author_name":"diegoquinteiro","provider_name":"Instagram","provider_url":"https:\/\/www.instagram.com\/","type":"rich","width":658,"html":"\u003Cblockquote class=\"instagram-media\" data-instgrm-captioned data-instgrm-permalink=\"https:\/\/www.instagram.com\/p\/fA9uwTtkSN\/?utm_source=ig_embed&utm_campaign=loading\" ....

将其添加到 Discourse,即可完成!

6 个赞

哇……

好的,成功了……

谢了兄弟 :bowing_man:

4 个赞

插件安装好了吗?@Richie

1 个赞

@znedw 非常感谢你花时间一步步(还附带了图片!:heart_eyes:)解释如何操作!据我所知,效果非常棒!

3 个赞

安装插件后?

1 个赞

我刚才才发现你刚发布了这个插件……我之前并没有使用它,抱歉占用了你的帖子。

不过,如果今天能抽出一点时间,我会试着用一下……

2 个赞

今晚我花了大约半小时尝试了各种可能的组合,Robert @merefield

按照 @znedw 提供的步骤操作(再次感谢老兄!),看来这种方法在启用 Onebox Assistant 时有效,在禁用时(通过管理面板 > 插件 > 复选框)也同样有效。

我尚未尝试在完全移除插件的情况下重建我的 Discourse。

值得一提的是,我并没有启用“始终使用代理抓取,无论直接响应如何”这一选项。

顺便提一下,似乎 amazon.co.uk 又开始拦截各种请求了,无论是直接请求(插件已禁用)还是通过 embed.rocks 的“试一试”页面,后者也出现了超时情况 :roll_eyes:

3 个赞

谢谢。是的,我本以为至少在不勾选“始终使用代理”的情况下也能正常工作。

2 个赞

说到亚马逊,我通常都会手动使用他们的联盟链接,这些链接不会被屏蔽。

如果你已是联盟会员,进行“一键直达”(Oneboxing)会违反其服务条款。

强烈建议你考虑加入联盟会员计划。虽然这不会带来巨额收入,但或许足以支付服务器和邮件费用。

1 个赞

能否仅将此插件用于 YouTube 链接?我不太清楚应该使用哪些设置。
另外,我在哪里可以找到关于可用设置的更多信息?
谢谢!

不行。您需要 fork 该项目并进一步开发代码。

只需将 OP 中的内容原样复制即可。您将拥有自己的密钥。

2 个赞

我该如何检查插件是否正常运行,以及查询是否已通过 https://embed.rocks 发出?
我已激活它,但错误仍未消失。

我用这些视频进行了测试:

https://www.youtube.com/watch?v=_2wfBNUnOVY
https://www.youtube.com/watch?v=qLNhVC296YI
1 个赞

embed.rocks 上的仪表板应开始反映您的调用(本地计数器是一个可选功能,但尚未实现)。

这两个链接通过插件对我而言都能正常工作。

如果无法正常工作,请尝试检查此选项:

image

2 个赞

您设置的所有选项是否与您提供的图片中的完全一致?也许我在输入时出现了错误。是否有选项可以复制它们?

1 个赞

我已在原帖中为你添加了纯文本。

3 个赞

谢谢。我已检查过,一切正常。我在“使用量”部分的仪表板页面上看不到任何调用记录。这是否意味着出了问题?调用次数是否应该始终可见?

1 个赞

这个问题需要咨询 embed.rocks。我可能会在某个时候为插件添加额外的日志记录,这或许会有所帮助。不过,既然已有调用 Rails.logger.info 的代码,你也可以将站点日志级别设置为 ‘info’ 以获取更多信息。

1 个赞

是的,那太好了。因为我已经激活了插件并配置了设置,但 YouTube 无法工作,仪表盘上也没有任何活动记录。我已向 embed.rocks 支持团队发送了邮件。

1 个赞

如果将文件存储在 Amazon S3,此插件能否正常工作?
我目前仍遇到一些问题,无法使其正常运行。视频并未上传,仅生成了链接。同时,Embed.rocks 的使用面板上也没有任何相关信息。

我有一台测试服务器,文件本地存储在该服务器上。但插件同样无法正常工作,使用仪表板上也没有任何活动记录。不过,视频确实已保存到网站中。

因此,我无法确定该如何排查以及检查哪些内容以解决问题。
请提供一些建议,谢谢!

2 个赞