Vídeos "curtos" do Youtube tipo embedding/oneboxing não funcionando

Olá!

A incorporação de vídeos do Youtube funciona nos meus fóruns, mas não com vídeos curtos (aqueles com /shorts/ na URL) como este:

A solicitação do onebox retorna um erro 404.

A incorporação de vídeos regulares do Youtube funciona.
Eu não encontro este problema no try.discourse ou no meta.
Eu suponho que venha de uma configuração do site não configurada corretamente.

Alguma ideia?


O oneboxing do Youtube é algo que criamos internamente. Alguém precisa enviar um pr-welcome para compatibilidade com shorts. Movendo para Feature

Enquanto isso, você sempre pode adicionar a URL do iframe manual à configuração do site iframes permitidos:

É um vídeo longo, porém :rofl:

3 curtidas

Talvez seja por causa da localização do servidor, como era/é aqui Youtube embeddings have stopped working for servers in Europe

1 curtida

Obrigado pelo esclarecimento!

Você poderia me dizer qual URL devo adicionar aos iframes permitidos para que o vídeo seja exibido como você fez? Isso resolveria perfeitamente o problema por enquanto, mesmo que seja realmente alto.


Quanto à altura do vídeo, é possível torná-lo menos alto definindo uma max-height com CSS no iframe. O problema é que o iframe não possui nenhum atributo que especifique que é um vídeo curto (vertical). :confused:

<iframe width="672" height="1194" src="https://www.youtube.com/embed/SWeTMdyv50Q" frameborder="0" allowfullscreen="">

https://www.youtube.com/embed/

Obrigado, Falco.

Acho que estou perto, mas ainda estou um pouco confuso.

Então, adicionei este URL aos iframes permitidos.

Mas então, o que devo fazer para que o vídeo apareça?

Se eu escrever na minha postagem https://www.youtube.com/shorts/SWeTMdyv50Q, não funcionará.
Se eu escrever <iframe>https://www.youtube.com/shorts/SWeTMdyv50Q</iframe>, não funcionará.
Se eu escrever https://www.youtube.com/embed/SWeTMdyv50Q, funcionará, mas exibirá o vídeo curto com a proporção padrão de vídeo do YouTube (o que está bom para mim, embora eu preferisse ter outra proporção e não ter que escrever manualmente “embed” no URL):

Clique com o botão direito em um vídeo do Shorts e selecione “Copiar código incorporado”. Era isso que eu queria dizer com “código incorporado manual”, desculpe por não ter sido claro.

2 curtidas

Além disso, substituir /shorts/ por watch?v=, a URL padrão de um vídeo do YouTube, funciona.

Portanto, no YouTube, em https://www.youtube.com/shorts/SWeTMdyv50Q, clicar com o botão direito → Copiar URL do vídeo funcionará, pois retorna https://youtu.be/SWeTMdyv50Q, que é exibido corretamente no Discourse (embora com a proporção larga normal).

2 curtidas

Não sou um desenvolvedor, mas estou imaginando que algo assim poderia facilitar o pr-welcome para alguém que seja?

2 curtidas

Eu consegui, embora eu possa ter estragado um pouco meu pull request porque, por algum motivo, ainda não estou acostumado com o GitHub… Eu realmente preciso ler o manual (e, um amigo me diz, criar branches do meu fork do Discourse…). :upside_down_face:

Apenas para informação, acabei de editar o arquivo lib\\onebox\\engine\\youtube_onebox.rb para adicionar

# https://www.youtube.com/shorts/wi2jAtpBl0Y
if uri.path["/shorts/"]
  id ||= uri.path[/\\/shorts\\/([\\w\\-]+)/, 1]
end
1 curtida

Seria mais fácil apenas trocar shorts por embed?

Não tenho certeza do que você quer dizer.

As pessoas geralmente copiam e colam o link do YouTube da barra de endereços.

Agora o YouTube tem um novo URL /shorts/, as pessoas copiarão e colarão esses links /shorts/ e eles ainda não são suportados pelo oneboxing do YouTube.

Os links /embed/ são, mas exigem que o usuário realmente procure no YouTube o URL de incorporação, o que praticamente ninguém faz :thinking:

1 curtida

Estou apenas imaginando se seria um trabalho mais fácil apenas mudar essa URL? Porque youtube.com/shorts/something é totalmente igual a youtube.com/embed/something, e com /embed/ o oneboxing/embedding funciona muito bem aqui.\n\nhttps://youtube.com/shorts/aQFdwUeZxkA não funciona:\n\nhttps://youtube.com/shorts/aQFdwUeZxkA?feature=share\n\nMas https://youtube.com/embed/aQFdwUeZxkA funciona:\n\nYouTube

Ainda não te entendi. Quem mudaria a URL? O postador? Mas o postador não quer reescrever manualmente parte de uma URL (eles nem saberão por que o vídeo não é incorporado), eles apenas querem copiar e colar, e pronto, funciona.


Editar: ou você quer dizer que o código Oneboxing do Discourse substituiria /shorts/ por /embed/?

Sim, talvez! Não sou exatamente um mago do código :smile:

Sim. E eu não sei programar nada, mas poderia imaginar que simplesmente substituir não pode ser tão difícil :wink:

2 curtidas

Ambos têm o mesmo resultado final, certo? Que um vídeo do shorts seja então incorporado de forma agradável com funcionalidade de reprodução?

Bem… não tenho certeza se entendi. :sweat_smile:

  1. leva a

Esses três formatos de link diferentes levam a exibições diferentes no Youtube.

Independentemente do formato do URL, o código só se importa com o ID do vídeo:

O código atualmente não suporta /shorts/ e existem várias maneiras de fazê-lo funcionar.

Minha sugestão, como neófito em codificação, é duplicar esta parte:

e substituir embed por shorts. Eu tentei isso na minha instalação de desenvolvimento e funcionou perfeitamente.

Se houver uma maneira mais elegante de fazer isso, ficarei feliz em saber :slight_smile:

2 curtidas

Ótimo trabalho @Canapin :clap:

É algo que você gostaria de enviar um pull request?

Sim, estou com dificuldades no arquivo de teste ruby. Não funciona e não sei porquê. Nunca usei/criei testes unitários antes, então…

O arquivo que deve ser modificado é discourse/spec/lib/onebox/engine/youtube_onebox_spec.rb at 493d437e79f88ab9829a36fa000cc6107085e424 · discourse/discourse · GitHub

Tentei adicionar isto no final do arquivo:

  it \"pode analisar resultados do youtube shorts\" do
    preview = expect(Onebox.preview('https://www.youtube.com/watch?v=wi2jAtpBl0Y').placeholder_html)
    preview.to match(/reacts/)
    preview.to match(/hqdefault/)
  end

E também adicionei isto no início do arquivo, em before do:

stub_request(:get, "https://www.youtube.com/shorts/wi2jAtpBl0Y").to_return(status: 200, body: onebox_response("youtube-shorts"))`

Executei os testes com bin/rspec spec/lib/onebox/engine/youtube_onebox_spec.rb
Mas o teste que adicionei falha.

Não tenho a mensagem de erro agora e estarei ocupado pelas próximas horas, no entanto.

Funciona agora:

https://www.youtube.com/shorts/kt7jiaGVsto

1 curtida