Incorporação de vídeos do facebook.com e outros sites falha

Um dos meus membros postou este link do Facebook isolado, e o Discourse tentou analisá-lo, mas não funcionou.

Deixe-me tentar o mesmo link em sua própria linha:

Caso você não veja acima, é isso que é exibido:

O problema também aparece em alguns sites para adultos, onde membros estavam tentando compartilhar links; fiz um teste rápido colando vários URLs de vídeo de diferentes lugares, e vários dos principais sites para adultos também não funcionam.

Isso parece ser um bug relativamente sério, apenas no sentido de que afeta os embeds do Facebook. Meus membros (menos familiarizados com tecnologia) gostam de compartilhar links para coisas no Facebook, em parte porque é tão popular e universal. :frowning: Além disso, se alguém postar esse URL em uma mensagem, ele é analisado e transformado em algo que não funciona, e o URL original desaparece. Então você nem consegue acessar aquele URL se quisesse… ele simplesmente não está mais disponível.

Então… é possível instruir o Discourse a NÃO tentar incorporar vídeos automaticamente nesses domínios? Eu estava procurando por uma configuração como ‘bloquear URLs que contenham estas palavras na incorporação de mídia’, onde eu pudesse adicionar esses domínios. (Ou talvez uma lista branca de URLs aprovados, como YouTube e Vimeo, para evitar problemas futuros com novos sites.)

Se não for possível, existe uma correção rápida que eu possa fazer nos meus fóruns para ajudar?

Firefox (desktop)

Aqui no meu desktop, usando o Firefox 75 no Mac… recebo a caixa cinza de falha.

Safari (desktop)

Aqui no Safari, o primeiro quadro do vídeo é exibido, mas quando você clica no botão “play”, nada acontece.

Chrome (desktop)

Usando o Chrome v81 no desktop Mac… a mesma coisa… você vê o vídeo, mas ele nunca toca.

iPhone - Safari iOS

O mesmo que no Chrome ou Safari (desktop)… o vídeo aparece, mas não reproduz.

O Discourse não oferece suporte oficialmente ao onebox de vídeos do Facebook.

Você pode querer conferir:

2 curtidas

Podemos substituir a saída do onebox para que não crie um player quebrado? Acredito que devemos fazê-lo funcionar como funcionava antes

3 curtidas

Sim, eu diria que isso é crítico. Para mim, não é grande coisa se o Discourse não suportar vídeos do Facebook. O problema real é quando um membro cola um link (o que é bem comum) e isso gera uma mensagem de erro… e o link original some. Tenho várias mensagens assim no meu fórum agora. Nós, administradores, estamos consertando manualmente conforme aparecem, mas, obviamente, isso não é uma solução ideal.

Acredito que isso seja um bug sério apenas porque o Facebook (juntamente com outros sites de vídeo que testei) é extremamente popular.

Adoraria encontrar uma correção rápida… me avise se posso ajudar?

4 curtidas

A solução mais rápida aqui seria adicionar www.facebook.com à configuração: onebox domains blacklist. Dessa forma, o onebox não tentará incorporar vídeos do facebook.com.

3 curtidas

O que mudou aqui é que o Facebook atualizou os metadados OpenGraph para adicionar links de vídeo com restrições excessivas:

<meta property="og:video:secure_url" content="https://video.fjai1-2.fna.fbcdn.net/v/t42.9040-2/10000000_626864624535070_4779621138076532736_n.mp4?_nc_cat=107&amp;_nc_sid=985c63&amp;efg=eyJybHIiOjM1MiwicmxhIjoxMzI5LCJ2ZW5jb2RlX3RhZyI6InN2ZV9zZCJ9&amp;_nc_oc=AQkUihmrvyg1wU9qH_NjqkLUzl0XSYJGE6JREtPH7jxKc1aXEIuGLSbauCEPM-hI-DCuJRacr1hCB6HHZre1lxto&amp;rl=352&amp;vabr=196&amp;_nc_ht=video.fjai1-2.fna&amp;oh=3fd1d5e14f27d55bc0d2a91d4714148b&amp;oe=5EA6E533" />

O link de vídeo acima mostra o erro: Bad URL timestamp. :man_facepalming:

Até mesmo o link na tag og:image mostra o mesmo erro.

Não temos nenhuma informação para exibir na onebox do Facebook, exceto o título do vídeo. Acredito que devemos codificar a onebox para bloquear links de vídeo do Facebook.

6 curtidas

Excelente, obrigado… isso é perfeito.

A propósito, lembre-se de que isso acontece em outros sites além do Facebook; um membro tentou postar um link para uma página de vídeo no xvideos.com e também falhou. (Aviso NSFW! Esse é MUITO um site adulto!) Testei com alguns outros sites e encontrei o mesmo problema.

1 curtida

Para o Facebook, podemos pegar o atributo twitter:player e usá-lo para um iframe? Parece ser uma URL que não expira:

Screenshot 2020-04-27 at 12.26.42

(É tão irônico o Facebook servir dados opengraph quebrados, mas dados do Twitter funcionando :joy:)

Ou, alternativamente, aplicar a mesma lógica do Instagram. Mostrar uma miniatura grande com um botão :play_or_pause_button:, que é um link.

4 curtidas

Eu tentei isso e obtive links quebrados nas tags twitter:image e twitter:player. Elas funcionam para você?

1 curtida

No vídeo de exemplo do @pnoeric, vejo

<meta name="twitter:player" content="https://www.facebook.com/plugins/video.php?height=222&width=400&href=https://www.facebook.com/dccarmen/videos/10222567743521148/">

Que parece funcionar bem.

Mas, se você encontrou algum que esteja quebrado, provavelmente devemos evitá-lo.

1 curtida

Para o mesmo link, estou vendo:

https://www.facebook.com/plugins/video.php?height=222&amp;width=400&amp;href=https://www.facebook.com/dccarmen/videos/10222567743521148/

Note o &amp; que está quebrando a URL… mudar isso para & resolve o problema. Então, sim, podemos contornar isso.

Os links twitter:image ainda estão quebrados (aqui está um exemplo).

Então, temos duas opções aqui:

  1. usar links twitter:player para incorporar vídeos do Facebook
  2. bloquear vídeos do Facebook no onebox e mostrá-los como links normais

Qual você prefere, @codinghorror?

3 curtidas

Podemos tentar isso, mas temos certeza de que os links não expiram?

Acho que o link não vai expirar, pois a URL aponta basicamente para um plugin do Facebook que incorporará o vídeo de qualquer link de vídeo que passarmos no parâmetro href.

https://www.facebook.com/plugins/video.php?height=222&width=400&href=https://www.facebook.com/dccarmen/videos/10222567743521148/

Portanto, podemos usar um iframe para incorporar o vídeo do Facebook.

1 curtida

Não, a correção será específica para o Facebook.

Observe que a onebox de vídeo com falha geralmente indica que o erro está no site que você está tentando incorporar. No caso do Facebook, era o Facebook sendo muito restritivo e permitindo a reprodução de vídeo apenas por um determinado período.

Geralmente, contornamos esses erros apenas para sites muito populares (exemplo: Instagram), para que a comunidade em geral possa se beneficiar. Se o site não for popular e você precisar incorporá-lo no seu site, a maneira recomendada é criar um plugin personalizado adicionando um motor Onebox personalizado para esse site.

2 curtidas

Ok.

Hmm. Existe uma maneira de permitir apenas domínios específicos que o onebox tentará incorporar? Se não, parece que temos a seguinte situação:

  1. Eu administro um fórum comunitário onde os membros gostam de linkar sites com vídeos. (Esses podem ser qualquer site, claro… não sabemos no momento.)

  2. Se um site tiver um erro no código que impeça a incorporação de funcionar, o Discourse distorce a incorporação (feio), e pior ainda, remove a URL original para que outros não possam ver o que o OP estava tentando compartilhar.

Não parece que o passo 2 deveria ser: “Se um site tiver um erro no código que impeça a incorporação de funcionar, o Discourse para de tentar incorporar e, em vez disso, apenas deixa o link passar?

Não consigo corrigir isso com a lista negra porque não sei quais domínios são afetados por isso e, claro, qualquer site pode ter esse problema no futuro. Assim como vimos aqui com o Facebook.

Claro que você pode corrigir — basta colocar em lista negra os domínios com os quais você observa problemas. Isso não é uma impossibilidade.

2 curtidas

Ok, isso está bom. Não tenho uma boa noção de quão grande é esse problema; lidar manualmente com eles é uma ótima solução se houver poucos domínios com esse problema.

Ainda acho que o Discourse deveria lidar com dados externos malformados de maneira mais graciosa do que “criar uma mensagem de erro gigantesca e remover o conteúdo mais importante da postagem do OP” — e acho que você provavelmente também pensa assim. :slight_smile: Mas, por enquanto, a blacklist é uma solução alternativa aceitável. Obrigado.

2 curtidas