oEmbed onebox 对 Photobucket 的支持

我们有一个可以追溯到 2004 年的摄影论坛,许多会员都在使用 Photobucket……然而,带有 Photobucket 的旧帖子中的图片无法显示在帖子中…… (Metrô de NYC - #3 de fotografosonline - Galeria de Fotos - Fotógrafos Online)

是否有 Photobucket 支持,或者有没有办法将其添加到允许的 onebox 域列表中?

Photobucket 不希望你嵌入这些图片:

但是等等!!如果你这样做:

![](https://hosting.photobucket.com/images/af237/atpaula/tempImageuaxhM1.heic?width=1920&height=1080&fit=bounds
)

你就可以得到这个:

这不会让 Discourse 下载这些图片,所以当它们不再可从 photobucket 获取时你仍然拥有它们,但它会显示它们。

所以,你可能需要进入 rails,获取所有包含 ^https://hosting.photobucket.com 的帖子,然后使用 gsub 将这些裸 URL 替换为 ![](the url)

等等。当我第一次写这个的时候,顶部的 URL 没有渲染,但后来看起来 Discourse 确实设法下载了它!(它在我的测试服务器上也起作用了!)

也许你只需要重新烘焙帖子?

但它在你的网站上不起作用:https://forum.fotografos.online/t/esta-imagem-do-photobucket-sera-renderizada/226420

你是否禁用了下载到本地?

下载到本地 - 我不知道 :confused:

如果您是管理员,您可以看到:

https://forum.fotografos.online/admin/site_settings/category/all_results?filter=download%20remote%20images

如果禁用,请启用它,进入我创建的主题,点击 :wrench: ,然后点击翻译为“重建 HTML”的那个东西。

我刚才在管理员那里启用了……然后去原始帖子重建……但它没有起作用……

它确实在的帖子上起作用了。

在原始帖子中,我只添加了原始 URL:

https://hosting.photobucket.com/images/af237/atpaula/tempImageRLm0iR.heic?width=1920&height=1080&fit=bounds

(我猜 Discourse 禁用了它)

那是因为在原始帖子中,它们被编码为 URL:https://forum.fotografos.online/posts/1579128.json

像这样


1
[URL=https://hosting.photobucket.com/images/af237/atpaula/tempImage7XmEb0.heic?width=1920&height=1080&fit=bounds]
https://hosting.photobucket.com/images/af237/atpaula/tempImage7XmEb0.heic?width=1920&height=1080&fit=bounds
[/URL]

所以当您进行迁移时,您确实想修复它们,但仍然可以在 rails 中运行一个任务来修复它们。

1 个赞

我在 https://ask.discourse.com/ 上询问过,在一次尝试失败后,得到了这个:

在 Discourse 帖子中替换 [URL] 标签 AI

pfaffman:

我有一堆帖子看起来像这样:

1
[URL=https://hosting.photobucket.com/images/af237/atpaula/tempImage7XmEb0.heic?width=1920&height=1080&fit=bounds]
https://hosting.photobucket.com/images/af237/atpaula/tempImage7XmEb0.heic?width=1920&height=1080&fit=bounds
[/URL]

我需要运行一个 rails 命令来查找所有这些帖子,然后使用 gsub 将 [URL...][/URL] 替换为实际的 URL,以便它能在“one-box”中渲染。

DiscourseHelper:

搜索

搜索内容:如何使用 Rails 命令或控制台代码查找包含特定字符串格式(如 [URL] 标签)的所有帖子,然后将这些标签替换为 Discourse 中包含的 URL?

要查找所有 [URL]...[/URL] 实例并将其替换为仅包含的 URL,您可以使用 Discourse 控制台中的 Rails 来完成。操作方法如下:

步骤:

  1. 访问 Rails 控制台
    您需要 SSH 访问您的服务器。运行以下命令以访问 Discourse Rails 控制台:

    cd /var/discourse
    ./launcher enter app
    rails c
    
  2. 运行查找和替换命令
    使用以下代码片段来定位包含 [URL]...[/URL] 的帖子并进行替换。

    Post.where("cooked LIKE ?", "%[URL=%[/URL]%").find_each do |post|
      updated_cooked = post.cooked.gsub(/\[URL=.*?\](.*?)\[\/URL\]/, '\1')
      if updated_cooked != post.cooked
        post.update!(cooked: updated_cooked)
        PostRevisor.new(post, Discourse.system_user).revise!(
          post.user,
          { cooked: updated_cooked },
          revised_at: Time.now
        )
        puts "Updated post id: #{post.id}"
      end
    end
    
  3. 测试脚本
    在批量替换内容之前,请在单个帖子中运行 gsub 逻辑,以确保其行为符合预期。

    test_post = Post.first # 替换为 ID 以便更好地测试
    puts test_post.cooked.gsub(/\[URL=.*?\](.*?)\[\/URL\]/, '\1')
    
  4. 运行脚本并监控
    执行完整脚本,监控输出,并在必要时纠正任何错误。

注意

  • 此脚本使用正则表达式(\[URL=.*?\\](.*?)\\[\\/URL\\])来匹配和替换指定的模式。请确保该模式与您的需求完全匹配。
  • 它使用 PostRevisor 来确保更改被记录在帖子的编辑历史中。
  • 在执行任何批量更改之前,请务必进行彻底测试并备份您的数据库。

有关其他指导,请参阅 meta.discourse.org 上的相关文档。如果您遇到问题,请随时在此处分享详细信息!

pfaffman:

它需要在 raw 中替换,而不是在 cooked 中。

DiscourseHelper:

感谢您的澄清!由于更改需要应用于 raw(原始帖子内容),我们可以修改脚本以使用 raw 字段。操作方法如下:

更新后的 raw 字段 Rails 命令

  1. 修改并运行脚本
    以下是用于处理和替换帖子 raw 字段中的 [URL]...[/URL] 标签的更新脚本:

    # 查找 raw 包含 [URL] 标签的所有帖子
    Post.where("raw LIKE ?", "%[URL=%[/URL]%").find_each do |post|
      updated_raw = post.raw.gsub(/\[URL=.*?\](.*?)\[\/URL\]/, '\1')
      
      if updated_raw != post.raw
        # 更新 raw 内容
        post.update!(raw: updated_raw, cooked: nil)
    
        # 触发重新烘焙以重新生成 cooked 内容
        post.rebake!
    
        puts "Updated post id: #{post.id}"
      end
    end
    
  2. 更改说明

    • raw 而不是 cookedraw 字段包含原始帖子内容,因此 gsub 操作应用于 raw 文本。
    • 重置 cooked:将 cooked 设置为 nil 可确保帖子被正确地重新烘焙(处理)。
    • rebake!:这将触发重新烘焙过程,该过程将根据更新的 raw 内容重新生成帖子的 cooked(HTML 渲染)版本。
  3. 测试 raw 内容的 gsub
    在单个帖子中测试正则表达式替换,以确保其行为正确:

    test_post = Post.first # 替换为适当的帖子 ID 进行测试
    puts test_post.raw.gsub(/\[URL=.*?\](.*?)\[\/URL\]/, '\1')
    
  4. 运行批量更新
    确认按预期工作后,您可以运行脚本来处理包含 [URL] 标签的所有帖子。

  5. 监控和验证
    监控脚本的输出。对于每个更新的帖子,其 id 将会打印到控制台。完成后,在网站上检查几个帖子,以确保更改正确显示。


备份提醒
在运行脚本之前,请确保您拥有完整的数据库备份,尤其是在处理批量更新时。

如果您有其他问题或遇到问题,请随时提问!

而且我喜欢它使用了 PostRevisor,这样如果出现问题,您将拥有编辑记录。

1 个赞

啊……我来看看!!!非常感谢!!!

1 个赞

您绝对想在发布之前先在几篇帖子中进行测试,并查看它将修复多少篇帖子以及谁将收到所有这些帖子的通知(我认为有一个类似 bypass_bump 的功能可以跳过通知)。

1 个赞