YouTube動画のワンボックス埋め込みが機能しなくなりました

ここでどうすべきかアドバイスが欲しいのですが、同時に、この状況をより良く処理する方法についてのアイデアもあります。

何が「起こり得る」か

一つの仮説として、当サーバーがYouTubeによって音楽動画の農作業(farm)とみなされ、制限またはブロックされている可能性があります。

私たちはイギリスの非常に目立たない小さなフォーラムで、トラフィックも僅かですが、音楽動画に関するスレッドがいくつかあります(実際にはサイズが大きいため1つが2つに分割されています)。1万件+2万件の投稿があります。これは音楽の連鎖であり、次の投稿者が前回の投稿に関連する(多くの場合、間接的に関連する)曲を投稿する形式です。

もちろん、他のスレッドにもYouTubeのリンクはありますが、このスレッドは特に(約100%)音楽で埋め尽くされています。

週末に再構築(rebake)を行った後、YouTubeがOneboxerが多数の音楽動画のヘッダーを取得しようとする活動を確認し、アルゴリズムによって当サーバーが「悪い子リスト」に入れられたのではないかと推測しています。

その後、投稿の再構築を試みたところ、これがYouTubeの疑念を確信させた可能性があります。つまり、このIPアドレスからのすべての活動が音楽動画のダウンロード試行であるとみなされたのです。

Digital Ocean に関連している可能性

YouTubeの429エラーについてGoogle検索を行い、YouTube APIの結果を無視すると、最終的に類似の音声を持つ問題群に辿り着きます。これらはすべて、仮想サーバー上にあることが原因でIPアドレスがグレーリスト/ブラックリスト/禁止リストに登録されたと述べており、特にDigital Oceanの名前が言及されています。

YouTubeがIPアドレスのシリーズを「禁止」し、他の正当なサーバーがしばしば巻き添え被害を受ける可能性があるという指摘があります。

以下はそのような問題と潜在的な解決策の一例です。

https://support.google.com/youtube/thread/21697789?hl=en

また、embed.ly APIで働く開発者がmedium.comに投稿した別の事例もあります。

https://support.google.com/youtube/thread/21939228?hl=en

最初の投稿で提案された解決策は、dropletでIPv6を無効化することでした。

これは妥当な推測でしょうか?また、何か問題を引き起こすでしょうか?

現時点ではこれを実行するのを控えており、解決に必要な他のデータを収集できるようにしています。

本来起こるべきこと

まず、私の経験がエッジケースであり、変更は不要だという反応が来ることは理解しています。
それは理解できます。しかし、もし@marcozambiと私が比較的短期間に同じ問題に遭遇したのであれば、これは他の人も直面する可能性があることを示唆しています。もしかすると、YouTubeは埋め込みの監視を最近より厳格にしたのでしょうか?

私のフォーラムは現在、完全に立ち往生しています。Onebox化に失敗したリンクが数万件ありますが、それらがどこにあるかはわからず、すべてを見つけるためには完全な再構築しか考えられず、それは間違いなくYouTubeからさらに否定的な注目を集めるでしょう。

少なくとも、レート制限エラーに遭遇した際にOneboxが静かに失敗することは許されません。管理者の注意を引く必要があり、可能な限り、レート制限の問題を引き起こしたプロセスを一時停止する必要があります。

フォーラム所有者に問題を知らせるためのオプション

これは簡単ではないと思います。全く。
Oneboxには、明確に異なる役割がいくつかあると考えています。

a) 投稿が作成される際にリアルタイムでOneboxを構築する
b) 背景プロセス(ヘッドレス)で古い投稿の再構築(すでにリンクが既知の場合が多い)に応答する
c) 移行/再構築中に大量のバックグラウンドジョブの処理を依頼される

シナリオa) でレート制限エラーが発生した場合、投稿者はOneboxが展開されなかったことに気づき、フォーラム管理者に苦情を申し立てる可能性があります。気づかれるかもしれません。また、作成中に単一のエラーを捕捉し、管理者にエラーやメッセージをプッシュすることも可能かもしれません。

シナリオb) では、失敗が投稿のバックグラウンド処理中に発生する可能性があるため、再試行が必要か、または再試行回数が上限に達した場合は失敗として処理し、フォーラム管理者に通知する必要があります。

シナリオc) では、大量の失敗が同時に発生しているという広範な文脈を知る必要があります。現時点では、投稿の再構築プロセスを統括する制御が存在しないため、Oneboxから返された1万件の429エラーが、管理者に1万件の個別メッセージを送るよりも大きな問題として認識されるとは思えません。

実際には、そのような失敗が発生した場合、レート制限が解除されるまで、YouTube(および他のプロバイダーの場合も)へのOnebox呼び出しによる動画の展開をすべて保留にする必要があります。

代替アプローチ

送信リクエストのレート制限

予防は治療に勝るという格言が示唆するように、Discourseのレートリミッターをリクエストの前に配置し、Discourseが設定に基づいてリクエストを保留させることが考えられます。

ただし、これは再構築や移行に混乱を招く可能性があります。

Onebox Assistant

おそらく、@merefield氏がOnebox Assistantプラグインで使用しているような、埋め込みをキャッシュおよびプロキシする組織との商業的関係が必要なのかもしれません。

'bot’のホワイトリスト登録

Discourseの’bot’をYouTubeでホワイトリスト登録する方法を見つけることは可能でしょうか?おそらく乱用されやすすぎるでしょう。

YouTube API

OneboxがTwitterに対して行っているように、レート制限が緩和されている場合、YouTube APIを使用することは可能でしょうか?

素晴らしい調査、ありがとうございます。

ご存知かどうかはわかりませんが、Signal メッセンジャーでも YouTube に問題があり、それは未解決の課題です。

https://meta.discourse.org/t/onebox-assistant-crawl-for-those-previews-reliably/107405/9?u=merefield

WhatsApp でも同様の現象が発生します。

補足しますが、私たちは約2〜3週間ごとにYouTubeから定期的に「禁止」され、1週間ほど禁止された後に解除されます。その後、このサイクルが繰り返されます。
当サイトにはYouTube動画へのリンクが数百件程度しかなく、ユーザーが1日に投稿するのは数件に過ぎません…

OneBox Assistant プラグインを使用せずに、ベースの Discourse で youtu.be リンクをプレビューする解決策はありませんか?

Onebox は YouTube のリンク形式をすべて展開するはずです。

動作していないでしょうか?

もし動作していない場合は、どのような問題が発生していますか?

最新の Discourse を使用していますが、youtu.be のリンクを含む投稿を作成したところ、プレビューが表示されませんでした。通常の YouTube リンクは問題なく動作します。

見てみましょう

https://youtu.be/gLCduDJVksc は問題なさそうです

はい、meta.discourse では動作します。なぜ自分のサイトでは動作しないのか調べています。管理パネルからこの設定を構成するオプションはありますか?

上記の通り、YouTube はおそらくあなたのサーバーまたは IP 範囲を禁止しました。

でも通常のYouTubeリンクは機能します。もし禁止されているなら、すべてのリンクが機能しなくなるはずです。

@AntiMetaman さん、そのようにはなっています。

@codinghorror さんが上記で示唆された通り、YouTube は特定の形式のリンクに対してレート制限や禁止を適用しているようですが、他の形式は引き続き機能しているようです。

私の場合、‘/embed’ 形式のリンクは機能しますが、他の形式は機能しません。

どうやら YouTube は形式ごとに異なるレート制限を設けているようです。‘/embed’ 形式はより多くのリクエストを許可しているように見えます。これはあくまで経験則であり、確固たるデータを持っているわけではありません。

いくつか質問があります。

Digital Ocean でホストしていますか?

IPv6 を使用していますか?

動画 ID が正しく形成されているか確認しましたか?(11 文字)(愚問かもしれませんが、驚かれるかもしれません)

特定の YouTube 動画について、サポートされている 3 つの形式すべてを試しましたか?つまり、

どれが機能し、どれが機能しませんでしたか?

私はこの問題に数週間頭を悩ませましたが、実用的な解決策を見つけました。しかし、なぜそれが機能するのかは本当に理解できていません。

もし 同じ問題に直面しているなら、Onebox Assistant をインストールし、有効化してください。ただし、設定は行わないでください

有効化後にサーバーを再起動する必要があることがわかりました。これで確実に機能します。

この設定では、本来はまったく機能してはいけないはずなのに、レート制限にかかっていた YouTube 動画(どの形式でも)が Onebox によって展開されます。しかし、これがなぜ機能するのかはわかりません。

私はこの件について @merefield(作者)とここで議論しています…

https://meta.discourse.org/t/onebox-assistant-crawl-for-those-previews-reliably/107405/36?u=bletch

もし、これがあなたにも機能するとしても(大きな「もし」ですが)、これは正式な修正ではありません。単にメソッドの戻り値の仕掛けに過ぎず、長期的に依存すべきではありません。

別途、Onebox Assistant プラグインを本来の目的で使用しました。embed.rocks を購読するだけで、完璧に機能します。

通常の YouTube リンクと非通常の YouTube リンクを定義していただけますか?

もしそうなら、なぜOneboxはデータをポーリングする前に、動作する1つの形式に変換できないのでしょうか?

たぶんそうかもしれませんけど、それは「解決策」ではありません。

すべての形式にレート制限がかかっており、最終的には失敗します。私も、以前の再ビルド中に失敗した YouTube 埋め込みをすべて再ビルドしようとした後、'/embed’形式でも失敗しました。

さらに、他の方法が失敗したにもかかわらず’/embed’が機能したという経験は、私を含めてここには 2 例しか報告されていません。

まだ十分な証拠も、十分な「被害者」もいないため、変更を提案するには早計です。

@Terrapop さんも同様の問題に直面していますか?それとも単に関心があるだけですか?

Discourse への移行に伴い、私たちはその一員として関心を持っています。現在はステージング環境での運用ですが、現時点では問題なく動作しています。しかし、最初から安全な設定を構築したいと考えているため、Onebox Assistant を自社のエンドポイントに設定し、そこから embeds.rock の応答を中継・キャッシュするようにする予定です。もしこれが失敗した場合は、Iframely からデータを取得します。

はい、ちょっと試していたら、meta.discourse でも再現できました!markdown が関係していると思います。私の youtu.be のリンクは、フォーラムでは意図した通りに機能しているのですが、以下の例では機能しません。YouTube が私のホストをブロックしているわけではありません。

  1. これは meta.discourse でも機能しません:https://youtu.be/MLpyi-oVoI

ご覧の通り、動画リンクに問題はありません。リンクを次の行に置いても、まだ機能しません。

  1. これも機能しません:
    https://youtu.be/MLpyi-oVoIY

ご覧の通り。同じリンクをここに貼り付けると、機能します:

YouTube にブロックされていないようで安心しました。すべて正常に動作しているはずです。これはフォーマットの問題です。

Onebox の展開には、リンクが a) 行の先頭に単独で存在すること、および b) リストの途中にある場合は、その前に追加の改行(リターン)が必要だと考えています。

投稿の生バージョンを見てみてください。

https://meta.discourse.org/raw/153748/36

Ok, so I was just playing around and I was able to reproduce it here on meta.discourse! I believe it has something to do with markdown. My youtu.be links do in fact work my forum as intended just not in the examples below. Youtube isn't blocking my host at all.

1. This won't work even on meta.discourse: https://youtu.be/MLpyi-oVoI

See? There's nothing wrong with the video link. If you put the link on the next line, it still won't work.

2. This won't work either:
https://youtu.be/MLpyi-oVoIY

You see? Now if I paste this same link here, it will work:

https://youtu.be/MLpyi-oVoIY

項目 1 を見ると、リンクが行の途中にあるため展開されません。リンクは行の最初の要素である必要があります。

また、項目 2 では YouTube リンクの前に改行が 1 つしかないため、これも展開されません。

投稿のフォーマット済みバージョンを見ると、YouTube リンクがインデントされて表示されていることに気づくかもしれません…

…つまり、Markdown がまだリンクを箇条書き 2 の一部として扱っているため、展開されないのです。

以下のようにしてみてください。

  1. これはダミーテキストです
  2. このリンクは、この行と YouTube リンクの間に2 つの改行を残しているため、正常に動作します

はい、markdown の使い方を学び、YouTube のリンクを別行に配置する必要があるでしょう。私のユーザーもまだ慣れ始めたところですが、私が注目したユーザー投稿で youtu.be のリンクが機能しなかったことが、このすべてのきっかけとなりました。

こんにちは。2 日前に 100 万件以上の投稿の再レンダリングを開始しましたが、今日から YouTube プレビューが機能しなくなりました。おそらく私の IP アドレスがブロックされたのでしょう。
この場合、どのような対応が推奨されますか?再レンダリングが完了するまで待ってから YouTube に連絡してブロック解除を依頼すべきでしょうか?
それとも、"Onebox Assistant", crawl for those previews reliably!? を利用すべきでしょうか?

それが可能なら、確かに一つの手段です。