Photobucket の oEmbed onebox 対応

2004年からある写真フォーラムがあり、多くのメンバーがPhotobucketを使用しています…しかし、Photobucketを使用した古い投稿では、画像が投稿に表示されません… (Metrô de NYC - #3 de fotografosonline - Galeria de Fotos - Fotógrafos Online)

Photobucketのサポートはありますか、またはこれを許可されるドメインのリストに追加する方法はありますか?

Photobucket はそれらの画像を埋め込みたくないようです。

しかし、待ってください! これを行うと:

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

これが得られます:

これにより、Discourse はそれらの画像をダウンロードできなくなり、photobucket から利用できなくなった場合でも画像を手に入れることができますが、画像は表示されます。

その後、rails にアクセスし、^https://hosting.photobucket.com を持つすべての投稿を取得し、それらの生の URL を ![](the url) に置き換える gsub を実行する必要があります。

待ってください。最初にこれを書いたとき、上の 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]

これらの投稿を検索し、[URL...][/URL] を実際のURLのみに置換して、ワンボックスでレンダリングできるようにする Rails コマンドを実行する必要があります。

DiscourseHelper:

検索

検索対象: Rails コマンドまたはコンソールコードを使用して、[URL] タグのような特定の文字列形式を含むすべての投稿を検索し、それらのタグを含まれるURLのみに置き換えるにはどうすればよいですか?

Discourse の投稿にある [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 "更新された投稿 ID: #{post.id}"
      end
    end
    
  3. スクリプトをテストする:
    一括置換を実行する前に、gsub ロジックを 1 つの投稿で実行して、期待どおりに動作することを確認します。

    test_post = Post.first # より良いテストのために ID に置き換えてください
    puts test_post.cooked.gsub(/\[URL=.*?\](.*?)\[\/URL\]/, '\1')
    
  4. スクリプトを実行して監視する:
    完全なスクリプトを実行し、出力を監視して、必要に応じてエラーを修正します。

:

  • このスクリプトは、指定されたパターンに一致および置換するために正規表現 (\[URL=.*?\\](.*?)\\[\\/URL\\]) を使用します。パターンがニーズに正確に一致することを確認してください。
  • PostRevisor を使用して、変更が投稿の編集履歴に記録されるようにします。
  • 一括変更を実行する前に、必ず徹底的にテストし、データベースをバックアップしてください。

追加のガイダンスについては、meta.discourse.org の関連ドキュメントを確認してください。問題が発生した場合は、ここでお気軽にご質問ください。

pfaffman:

cooked ではなく raw で置換する必要があります。

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 "更新された投稿 ID: #{post.id}"
      end
    end
    
  2. 変更点の解説:

    • cooked の代わりに raw: raw フィールドには元の投稿コンテンツが含まれているため、gsub 操作は raw テキストに適用されます。
    • cooked のリセット: cookednil に設定すると、投稿が正しく再ベイク (処理) されます。
    • 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