Видео с YouTube в onebox больше не отображаются

Вот ещё несколько результатов. Обратите внимание, что в сообщении ниже содержится множество предположений, основанных на недостатке реальных знаний.

В следующем сообщении я изложу своё мнение о том, что происходит и что должно произойти.

Спасибо за ответ, Роберт.

Обратите внимание, что Oneboxing видео по маршруту /watch (как и раньше!) не удавалось при моих попытках, поэтому мне не потребовался цикл, чтобы вызвать сбой.

Таким образом, одно из моих предположений состоит в том, что user-agent, используемый Onebox, — это Discourse Forum Onebox v2.6.0.beta1, исходя из этого кода…

Я выбрал случайное видео и попытался использовать curl для чтения заголовков.

Я выполнил это внутри Docker-контейнера на моём работающем сайте, что дало следующий ответ.

Результат первого запроса curl через маршрут /watch?

команда

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="Это не политика P3P! Дополнительную информацию см. по адресу http://support.google.com/accounts/answer/151657?hl=en-GB"
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"

Таким образом, я был перенаправлен с помощью ответа 303 на URL, указанный в заголовке location, который был https://www.youtube.com/watch?v=s0ONj4TG0UA&app=desktop.

Это просто привело к добавлению &app=desktop к URL.

Результат второго запроса curl к перенаправленному URL — всё ещё по маршруту /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="Это не политика P3P! Дополнительную информацию см. по адресу http://support.google.com/accounts/answer/151657?hl=en-GB"
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"

Таким образом, мне возвращается код ответа 429 «слишком много запросов», но без заголовка retry-after — прекращение без переговоров.

В любом случае, если Onebox видит именно это, он игнорирует ответ, или, по крайней мере, я не знаю, где искать его, если он где-то логируется.

Хотя это может быть допустимым действием для единичного ответа 429, получение множества ответов 429 за очень короткий промежуток времени нельзя игнорировать.

Результат третьего запроса 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="Это не политика P3P! Дополнительную информацию см. по адресу http://support.google.com/accounts/answer/151657?hl=en-GB"
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, похоже, переписывает URL в формате /watch

Не уверен, имеет ли это какое-либо значение, но… включён ли по умолчанию плагин lazy-yt для встроенного контента? Я заметил его в своей установке для разработки.

Похоже, он патчит метод to_html однобоксера YouTube.

Не знаю, важно ли это, но исходный метод to_html однобоксера возвращает формат URL /embed/

В то время как плагин lazy-yt использует формат URL /watch?v=.

Могу ли я что-то ещё сделать, чтобы показать, что существует проблема, требующая внимания? В следующем сообщении я объясню, что, по моему мнению, является корневой причиной.