さらにいくつかの結果があります。ただし、以下の投稿には多くの仮定が含まれており、それらは実際の知識の欠如に基づいています。
次に、何が起きているか、そして何が起こるべきかについての私の見解を投稿します。
レスポンスありがとうございます、ロバート。
注意点として、/watch ルートを使用した動画のワンボックス化は、私が試した際に(今も!)失敗していました。そのため、ループを使って強制的に失敗させる必要はありませんでした。
そこで私が行った仮定の1つは、Onebox が使用する user-agent が Discourse Forum Onebox v2.6.0.beta1 であるということです。これは以下のコードに基づいています…
ランダムな動画を選択し、curl を使用してヘッダーを読み取る試みを行いました。
これはライブサイトの Docker コンテナ内で行ったもので、以下のレスポンスが得られました。
/watch? ルートを使用した最初の curl の結果
コマンド
curl --user-agent "Discourse Forum Onebox v2.6.0.beta1" -sD - -o /dev/null "https://m.youtube.com/watch?v=s0ONj4TG0UA"
レスポンス:
curl --user-agent "Discourse Forum Onebox v2.6.0.beta1" -sD - -o /dev/null "https://m.youtube.com/watch?v=s0ONj4TG0UA"
HTTP/2 303
content-length: 0
p3p: CP="This is not a P3P policy! See http://support.google.com/accounts/answer/151657?hl=en-GB for more info."
cache-control: no-cache
x-frame-options: SAMEORIGIN
content-type: text/html; charset=utf-8
location: https://www.youtube.com/watch?v=s0ONj4TG0UA&app=desktop
accept-ch-lifetime: 2592000
x-content-type-options: nosniff
accept-ch: DPR
expires: Tue, 27 Apr 1971 19:44:06 GMT
strict-transport-security: max-age=31536000
date: Fri, 07 Aug 2020 11:35:21 GMT
server: YouTube Frontend Proxy
x-xss-protection: 0
set-cookie: VISITOR_INFO1_LIVE=rcVTSJn81Ck; path=/; domain=.youtube.com; secure; expires=Wed, 03-Feb-2021 11:35:20 GMT; httponly; samesite=None
set-cookie: YSC=cFXIPerzT3Y; path=/; domain=.youtube.com; secure; httponly; samesite=None
set-cookie: GPS=1; path=/; domain=.youtube.com; expires=Fri, 07-Aug-2020 12:05:20 GMT
alt-svc: h3-29=":443"; ma=2592000,h3-27=":443"; ma=2592000,h3-T050=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
したがって、location ヘッダーにある URL である https://www.youtube.com/watch?v=s0ONj4TG0UA&app=desktop へ 303 レスポンスでリダイレクトされました。
これにより、URL の末尾に &app=desktop が追加されるだけの効果がありました。
リダイレクトされた URL への 2 回目の curl の結果 - まだ /watch? ルート上
コマンド
curl --user-agent "Discourse Forum Onebox v2.6.0.beta1" -sD - -o /dev/null "https://www.youtube.com/watch?v=s0ONj4TG0UA&app=desktop"
レスポンス
HTTP/2 429
x-content-type-options: nosniff
expires: Tue, 27 Apr 1971 19:44:06 GMT
x-frame-options: SAMEORIGIN
cache-control: no-cache
p3p: CP="This is not a P3P policy! See http://support.google.com/accounts/answer/151657?hl=en-GB for more info."
accept-ch-lifetime: 2592000
content-type: text/html; charset=utf-8
accept-ch: DPR
strict-transport-security: max-age=31536000
content-length: 48982
date: Fri, 07 Aug 2020 11:46:00 GMT
server: YouTube Frontend Proxy
x-xss-protection: 0
set-cookie: VISITOR_INFO1_LIVE=VQwNuouhq-s; path=/; domain=.youtube.com; secure; expires=Wed, 03-Feb-2021 11:46:00 GMT; httponly; samesite=None
set-cookie: YSC=8IRfPRFRY6c; path=/; domain=.youtube.com; secure; httponly; samesite=None
set-cookie: GPS=1; path=/; domain=.youtube.com; expires=Fri, 07-Aug-2020 12:16:00 GMT
set-cookie: VISITOR_INFO1_LIVE=VQwNuouhq-s; path=/; domain=.youtube.com; secure; expires=Wed, 03-Feb-2021 11:46:00 GMT; httponly; samesite=None
set-cookie: YSC=8IRfPRFRY6c; path=/; domain=.youtube.com; secure; httponly; samesite=None
set-cookie: GPS=1; path=/; domain=.youtube.com; expires=Fri, 07-Aug-2020 12:16:00 GMT
alt-svc: h3-29=":443"; ma=2592000,h3-27=":443"; ma=2592000,h3-T050=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
つまり、retry-after ヘッダーなしで 429(要求が多すぎます)レスポンスコードが返されており、交渉なしに即座に停止を命じられています。
いずれにせよ、これが Onebox が受け取っている応答であれば、それを無視しているか、少なくともログに記録されている場合でもどこを確認すればよいか分かりません。
単一の 429 に対してはこれが正当な行動かもしれません。しかし、非常に短い期間に多数の 429 レスポンスが返されることは無視できません。
3 回目の curl の結果 - 今回は /embed/ ルートを使用
完全を期すために、同じ動画を取得しようとしましたが、今回は /embed/ ルートを使用しました。
コマンド
curl --user-agent "Discourse Forum Onebox v2.6.0.beta1" -sD - -o /dev/null "https://www.youtube.com/embed/s0ONj4TG0UA"
レスポンス
HTTP/2 200
accept-ch-lifetime: 2592000
content-type: text/html; charset=utf-8
expires: Tue, 27 Apr 1971 19:44:06 GMT
x-content-type-options: nosniff
cache-control: no-cache
p3p: CP="This is not a P3P policy! See http://support.google.com/accounts/answer/151657?hl=en-GB for more info."
strict-transport-security: max-age=31536000
accept-ch: DPR
date: Fri, 07 Aug 2020 11:55:29 GMT
server: YouTube Frontend Proxy
x-xss-protection: 0
set-cookie: VISITOR_INFO1_LIVE=PNE6x6djF00; path=/; domain=.youtube.com; secure; expires=Wed, 03-Feb-2021 11:55:29 GMT; httponly; samesite=None
set-cookie: VISITOR_INFO1_LIVE=PNE6x6djF00; path=/; domain=.youtube.com; secure; expires=Wed, 03-Feb-2021 11:55:29 GMT; httponly; samesite=None
set-cookie: GPS=1; path=/; domain=.youtube.com; expires=Fri, 07-Aug-2020 12:25:29 GMT
set-cookie: YSC=pDW-hdbauK8; path=/; domain=.youtube.com; secure; httponly; samesite=None
alt-svc: h3-29=":443"; ma=2592000,h3-27=":443"; ma=2592000,h3-T050=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
accept-ranges: none
vary: Accept-Encoding
200 - 成功。
lazy-yt プラグインが /watch 形式の URL を書き換えているようです
これが重要かどうかは分かりませんが、埋め込みプラグインの lazy-yt はデフォルトで有効になっていますか?開発環境のインストールでそれを見つけました。
これは YouTube Oneboxer の to_html メソッドをモキーパッチしているようです。
重要かどうかは分かりませんが、元の Onebox の to_html メソッドは /embed/ URL 形式を返します…
一方、lazy-yt プラグインは /watch?v= URL 形式を使用します。
問題が存在し、何らかの形で対応が必要であることを示すために他にできることはありますか?次の投稿では、私が根本原因だと考えていることについて説明します。