# Vídeos do YouTube com onebox embedding pararam de funcionar

**URL:** https://meta.discourse.org/t/youtube-videos-onebox-embedding-stopped-working/153748
**Category:** Support
**Created:** [Junho 3, 2020, 9:52pm UTC](https://meta.discourse.org/t/youtube-videos-onebox-embedding-stopped-working/153748 "2020-06-03T21:52:04Z")
**Posts on this page:** 1
**Showing post:** 20

<div class="post-metadata">

### Author: ![bletch](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/bletch/32/69088_2.png) [@bletch](https://meta.discourse.org/u/bletch)
#### Post date: [Agosto 7, 2020, 12:27pm UTC](https://meta.discourse.org/t/youtube-videos-onebox-embedding-stopped-working/153748/20 "2020-08-07T12:27:19Z")

</div>

Aqui estão mais alguns resultados. Note que há muitas suposições no post abaixo, baseadas na falta de conhecimento real.

Vou seguir este post com minha opinião sobre o que está acontecendo e o que deveria acontecer.

> [@merefield](#):
>
> Executar alguns scripts curl repetitivos e curtos na linha de comando do servidor com o mesmo user-agent pode permitir que você isole um problema de limite de taxa.

Obrigado pela resposta, Robert.

Note que a Oneboxing de vídeos usando a rota `/watch` estava (e ainda está!) falhando quando tentei isso, então não precisei de um loop para forçar a falha.

Então, uma _suposição_ que fiz é que o `user-agent` que o Onebox está usando é `Discourse Forum Onebox v2.6.0.beta1`, baseado neste código…

> <https://github.com/discourse/discourse/blob/6a417c308f8abf30b0dec712426a009cabce859e/config/initializers/100-onebox_options.rb#L14>

Escolhi um vídeo aleatório e tentei usar `curl` para ler os cabeçalhos.

Fiz isso dentro do contêiner Docker do meu site ao vivo, o que produziu a seguinte resposta.

### Resultado do primeiro curl usando a rota /watch?

**comando**

`curl --user-agent "Discourse Forum Onebox v2.6.0.beta1" -sD - -o /dev/null "https://m.youtube.com/watch?v=s0ONj4TG0UA"`

**resposta** :

```bash
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"

```

Então fui redirecionado usando uma resposta 303 para a URL no cabeçalho `location`, que era `https://www.youtube.com/watch?v=s0ONj4TG0UA&app=desktop`.

Isso simplesmente teve o efeito de adicionar `&app=desktop` à URL.

### Resultado do segundo curl para a URL redirecionada - ainda na rota /watch?

**comando**  
`curl --user-agent "Discourse Forum Onebox v2.6.0.beta1" -sD - -o /dev/null "https://www.youtube.com/watch?v=s0ONj4TG0UA&app=desktop"`

**resposta**

```curl
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"

```

Então estou recebendo um código de resposta 429 “muitas solicitações”, mas sem receber um cabeçalho `retry-after` — pare e desista, sem negociação.

De qualquer forma, se é isso que o Onebox está vendo, ele está ignorando a resposta ou, pelo menos, não sei onde procurar se estiver sendo registrado.

Embora isso **possa** ser algo legítimo a fazer para um único 429, ver muitas respostas 429 em um período muito curto de tempo não pode ser ignorado.

### Resultado do terceiro curl - desta vez usando a rota /embed/

Para completar, tentei imediatamente obter o mesmo vídeo, mas desta vez usando a rota /embed/.

**comando**

`curl --user-agent "Discourse Forum Onebox v2.6.0.beta1" -sD - -o /dev/null "https://www.youtube.com/embed/s0ONj4TG0UA"`

**resposta**

```bash
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 - Sucesso.

### O plugin lazy-yt parece reescrever URLs no formato /watch

Não tenho certeza se isso é de alguma importância, mas… o plugin embutido lazy-yt está habilitado por padrão? Notei isso na minha instalação de desenvolvimento.

Parece que ele faz um monkey patch no método `to_html` do YouTube Oneboxer.

Não sei se é significativo, mas o método `to_html` do Onebox original retorna o formato de URL `/embed/`…

> <https://github.com/discourse/onebox/blob/eb783a5ccf38b20224294b14c068b3ba01ff2579/lib/onebox/engine/youtube_onebox.rb#L32>

Enquanto o plugin lazy-yt usa o formato de URL `/watch?v=`.

> <https://github.com/discourse/discourse/blob/b86198198fe904899f6b31edfbb7c05873a95625/plugins/lazy-yt/plugin.rb#L43>

Há mais alguma coisa que eu possa fazer para mostrar que há um problema que precisa de alguma forma de atenção? O próximo post explicará o que acho ser a causa raiz.

---

_[View the full topic](https://meta.discourse.org/t/youtube-videos-onebox-embedding-stopped-working/153748)._
