Quando oEmbed falhar, exiba uma alternativa

8

Quero especificar uma imagem alternativa que será exibida quando o oEmbed falhar.

O caso de uso específico é oferecer uma alternativa quando a China (ou outros países) bloquear o YouTube. Sabemos que o conteúdo do YouTube não estará disponível no site, mas queremos fornecer uma imagem alternativa nesse caso.

O código de erro oEmbed pode ser acessível para esse fim?

Bob Easton
fonte
Pergunta muito interessante. Infelizmente eu não tenho uma resposta para você, mas isso é definitivamente algo que vale a pena investigar.
Pieter Goosen
1
Eu estive analisando esse problema. Eu fui bem fundo, mas não encontrei nenhuma solução. O problema é que a solicitação oEmbed é feita no servidor da Web, não no lado do cliente. No servidor, tudo está bem e o HTML incorporado é retornado pelo YouTube; ou seja, o iframe que carrega o vídeo. Quando o cliente tenta carregar o conteúdo do iframe, é quando o conteúdo é bloqueado. Até onde eu entendo, o oEmbed não falha e não há nada ou muito pouco que possamos fazer. Esperando o que os outros pensam sobre isso.
cybmeta
Acho que não tenho certeza, a API do oembed funciona com a API RESTful. Essa API retorna uma resposta para o cliente como esta GET /photos/bees/2362225867/ HTTP/1.1 Host: flickr.com Accept: application/oembed+xml. Alternativa é o padrão para obter um código http de erro, como 406 Não Aceitável. Isso deve ser útil para retornar uma mensagem.
bueltge
@bueltge a resposta retornada do oEmbed não é enviada ao cliente. Não pelo menos para o YouTube, como eu disse no meu comentário. A solicitação oEmbed é feita no servidor, o YouTube retorna um <iframe>HTML e é isso que é incorporado na postagem e é o que é servidor do cliente: a <iframe>. Quando o cliente da China tenta carregar o conteúdo do <iframe>é quando está bloqueado. Não há nada do lado do servidor envolvido. Não testei com outros provedores oEmbed, mas acho que todos funcionam de maneira semelhante. De fato, se o oEmbed fosse feito no lado do cliente, não haveria nenhum conteúdo real incorporado.
cybmeta
1
A única alternativa que vejo é verificar o conteúdo incorporado por javascript. Se você não obter o iframe vídeo, você pode mostrar algo mais ...
jjarolim

Respostas:

1

Eu acho que a melhor coisa a fazer nesse caso é agrupar seu conteúdo oEmbed com um divantes de serem renderizados e, em seguida, mostrar uma imagem alternativa com a background-imagepropriedade CSS . Se o vídeo carregar, o conteúdo incorporado cobrirá a imagem de plano de fundo.

Você pode adicionar o wrapper usando o embed_oembed_htmlfiltro.

add_filter('embed_oembed_html', 'your_function_here');

Se você estiver preocupado com o carregamento de elementos extras, poderá fazer uma verificação do lado do cliente com JS para ver se o oEmbed foi carregado e, se não, carregar uma imagem de plano de fundo no wrapper.

Você pode ficar muito mais complicado adicionando campos personalizados para cada vídeo, mas essa é basicamente a essência.

Daron Spence
fonte
0

Uma abordagem pode ser fazer outra solicitação usando oEmbed no lado do servidor por meio de um proxy baseado na China.

Dessa forma, você saberia com antecedência se a chamada para o recurso no cliente falhará. No início da solicitação da página, você pode verificar onde o IP do cliente está localizado geograficamente, fazer uma chamada no servidor por meio de um proxy para o recurso, por exemplo, youtube e, em seguida, alavancar o erro oEmbed que você provavelmente receberá.

Você pode dar uma olhada no Wonderproxy para conseguir isso (não sou afiliado a eles, mas ouço coisas boas)

codecowboy
fonte