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?
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.<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.Respostas:
Eu acho que a melhor coisa a fazer nesse caso é agrupar seu conteúdo oEmbed com um
div
antes de serem renderizados e, em seguida, mostrar uma imagem alternativa com abackground-image
propriedade 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_html
filtro.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.
fonte
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)
fonte