Cuando oEmbed falla, muestra una alternativa

8

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?

Bob Easton
fuente
Pregunta muy interesante Desafortunadamente no tengo una respuesta para ti, pero definitivamente es algo que vale la pena considerar.
Pieter Goosen el
1
He estado investigando este problema. He profundizado bastante pero no he encontrado ninguna solución. El problema es que la solicitud oEmbed se realiza desde el servidor web, no desde el lado del cliente. En el servidor todo está bien y YouTube devuelve el HTML incrustado; es decir, el iframe que carga el video. Cuando el cliente intenta cargar el contenido del iframe, es cuando el contenido está bloqueado. Hasta donde puedo entender, oEmbed no falla y no hay nada o muy poco que podamos hacer. Esperando lo que otros piensan sobre esto.
cybmeta
Creo que, no estoy seguro, la API de oembed funciona sobre la API RESTful. Esta API devuelve una respuesta al cliente como esta 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.
bueltge
@bueltge la respuesta devuelta de oEmbed no se envía al cliente. No al menos para YouTube como dije en mi comentario. La solicitud de oEmbed se realiza del lado del servidor, YouTube devuelve un <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.
cybmeta
1
La única alternativa que veo es verificar el contenido incrustado mediante javascript. si no obtiene el iframe de video, puede mostrar algo más ...
jjarolim

Respuestas:

1

Creo que lo mejor que se puede hacer en este caso es envolver el contenido de oEmbed con un divantes de que se procesen y luego mostrar una imagen alternativa con la background-imagepropiedad CSS . Si se carga el video, el contenido de oEmbed cubrirá la imagen de fondo.

Puede agregar el contenedor utilizando el embed_oembed_htmlfiltro.

add_filter('embed_oembed_html', 'your_function_here');

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.

Daron Spence
fuente
0

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)

codecowboy
fuente