Quando oEmbed ha esito negativo, visualizzare un'alternativa


8

Voglio specificare un'immagine alternativa che verrà visualizzata quando oEmbed fallisce.

Il caso d'uso specifico è offrire un'alternativa quando la Cina (o altri paesi) blocca YouTube. Sappiamo che i contenuti di YouTube non saranno disponibili lì, ma in questo caso vogliamo fornire un'immagine alternativa.

Il codice di errore oEmbed può essere reso accessibile a questo scopo?


Domanda molto interessante. Sfortunatamente non ho una risposta per te, ma questo è sicuramente qualcosa che vale la pena esaminare.
Pieter Goosen il

1
Ho esaminato questo problema. Sono andato abbastanza in profondità ma non ho trovato alcuna soluzione. Il problema è che la richiesta oEmbed viene eseguita dal server Web, non dal lato client. Nel server è tutto a posto e l'HTML incorporato viene restituito da YouTube; cioè, l'iframe che carica il video. Quando il client tenta di caricare il contenuto iframe, è quando il contenuto è bloccato. Per quanto posso capire, oEmbed non fallisce e non c'è nulla o molto poco che possiamo fare. Aspettando cosa ne pensano gli altri.
cybmeta,

Penso, non sono sicuro, l'API di oembed funzioni sull'API RESTful. Questa API restituisce una risposta al client come questa GET /photos/bees/2362225867/ HTTP/1.1 Host: flickr.com Accept: application/oembed+xml. L'alternativa è l'impostazione predefinita per ottenere un codice http di errore, come 406 Not Acceptable. Questo dovrebbe essere utile per restituire un messaggio.
fusione

@bueltge la risposta restituita da oEmbed non viene inviata al client. Non almeno per YouTube, come ho detto nel mio commento. La richiesta oEmbed viene eseguita sul lato server, YouTube restituisce un <iframe>HTML e questo è ciò che è incorporato nel post e che è ciò che è server per il client: a <iframe>. Quando il client dalla Cina prova a caricare il contenuto di <iframe>è quando è bloccato. Non c'è nulla sul lato server coinvolto. Non ho testato con altri provider oEmbed ma penso che tutti funzionino in modo simile. In effetti, se l'OEmbed fosse realizzato sul lato client, non verrebbe incorporato alcun contenuto reale.
cybmeta,

1
L'unica alternativa che vedo è controllare il contenuto incorporato tramite JavaScript. se non ottieni il video iframe, potresti mostrare qualcos'altro ...
jjarolim,

Risposte:


1

Penso che la cosa migliore da fare in questo caso sia di avvolgere il contenuto oEmbed divprima di renderizzarlo e quindi mostrare un'immagine alternativa con la background-imageproprietà CSS . Se il video viene caricato, il contenuto oEmbed coprirà l'immagine di sfondo.

È possibile aggiungere il wrapper utilizzando il embed_oembed_htmlfiltro.

add_filter('embed_oembed_html', 'your_function_here');

Se sei preoccupato di caricare elementi aggiuntivi, puoi fare un controllo lato client con JS per vedere se oEmbed è stato caricato e, in caso contrario, caricare un'immagine di sfondo nel wrapper.

Potresti diventare molto più complicato aggiungendo campi personalizzati per ogni video, ma questo è essenzialmente l'essenza di esso.


0

Un approccio potrebbe essere quello di effettuare un'altra richiesta utilizzando oEmbed sul lato server tramite un proxy con sede in Cina.

In questo modo sapresti in anticipo se la chiamata alla risorsa sul client fallirà. All'inizio della richiesta della pagina puoi verificare dove si trova l'IP del cliente geograficamente, effettuare una chiamata sul server tramite un proxy alla risorsa, ad esempio youtube, e quindi sfruttare l'errore oEmbed che presumibilmente otterrai.

Puoi dare un'occhiata a Wonderproxy per raggiungere questo obiettivo (non sono affiliato con loro ma sento cose positive)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.