Quiero especificar una imagen alternativa que se mostrará cuando falla oEmbed.
El caso de uso específico es ofrecer una alternativa cuando China (u otros países) bloquean YouTube. Sabemos que el contenido de YouTube no estará disponible allí, pero queremos proporcionar una imagen alternativa en ese caso.
¿Se puede hacer accesible el código de error oEmbed para este propósito?
GET /photos/bees/2362225867/ HTTP/1.1 Host: flickr.com Accept: application/oembed+xml
. La alternativa es el valor predeterminado para obtener un código http de error, como 406 No aceptable. Esto debería ser útil para devolver un mensaje.<iframe>
HTML y eso es lo que está incrustado en la publicación y eso es lo que es el servidor para el cliente: a<iframe>
. Cuando el cliente de China intenta cargar el contenido del<iframe>
es cuando está bloqueado. No hay nada del lado del servidor involucrado. No he probado con otros proveedores de oEmbed, pero creo que todos funcionan de manera similar. De hecho, si oEmbed se hiciera del lado del cliente, no habría contenido real incorporado.Respuestas:
Creo que lo mejor que se puede hacer en este caso es envolver el contenido de oEmbed con un
div
antes de que se procesen y luego mostrar una imagen alternativa con labackground-image
propiedad CSS . Si se carga el video, el contenido de oEmbed cubrirá la imagen de fondo.Puede agregar el contenedor utilizando el
embed_oembed_html
filtro.Si le preocupa cargar elementos adicionales, puede hacer una verificación del lado del cliente con JS para ver si el oEmbed se cargó, y si no, cargar una imagen de fondo en el contenedor.
Podría ser mucho más complicado si agrega campos personalizados para cada video, pero eso es esencialmente lo esencial.
fuente
Un enfoque podría ser hacer otra solicitud usando oEmbed en el lado del servidor a través de un proxy con sede en China.
De esta manera, sabrá de antemano si la llamada al recurso en el cliente va a fallar. Al principio de la solicitud de la página, puede determinar dónde se encuentra geográficamente la IP del cliente, hacer una llamada del lado del servidor a través de un proxy al recurso, por ejemplo, youtube, y luego aprovechar el error oEmbed que presumiblemente obtendrá.
Podrías echar un vistazo a Wonderproxy para lograr esto (no estoy afiliado a ellos pero escucho cosas buenas)
fuente