Lorsque oEmbed échoue, affichez une alternative

8

Je veux spécifier une autre image qui sera affichée en cas d'échec de oEmbed.

Le cas d'utilisation spécifique est d'offrir une alternative lorsque la Chine (ou d'autres pays) bloquent YouTube. Nous savons que le contenu YouTube n'y sera pas disponible, mais nous souhaitons fournir une image alternative dans ce cas.

Le code d'erreur oEmbed peut-il être rendu accessible à cet effet?

Bob Easton
la source
Question très intéressante. Malheureusement, je n'ai pas de réponse pour vous, mais c'est certainement quelque chose qui mérite d'être examiné.
Pieter Goosen
1
J'ai étudié ce problème. Je suis allé assez loin mais je n'ai trouvé aucune solution. Le problème est que la demande oEmbed est effectuée à partir du serveur Web, pas du côté client. Dans le serveur, tout est OK et le HTML intégré est renvoyé par YouTube; c'est-à-dire l'iframe qui charge la vidéo. Lorsque le client essaie de charger le contenu iframe, c'est lorsque le contenu est bloqué. Autant que je puisse comprendre, oEmbed n'échoue pas et il n'y a rien ou très peu que nous puissions faire. Attendre ce que les autres en pensent.
cybmeta
Je pense, pas sûr, que l'API de oembed fonctionne sur l'API RESTful. Cette API renvoie une réponse au client comme celle-ci GET /photos/bees/2362225867/ HTTP/1.1 Host: flickr.com Accept: application/oembed+xml. L'alternative est la valeur par défaut pour obtenir un code http d'erreur, comme 406 Not Acceptable. Cela devrait être utile pour renvoyer un message.
bueltge
@bueltge la réponse retournée par oEmbed n'est pas envoyée au client. Pas au moins pour YouTube comme je l'ai dit dans mon commentaire. La demande oEmbed est effectuée côté serveur, YouTube renvoie un <iframe>code HTML et c'est ce qui est intégré dans la publication et c'est ce qui est serveur pour le client: a <iframe>. Lorsque le client chinois essaie de charger le contenu du, <iframe>c'est quand il est bloqué. Il n'y a rien côté serveur impliqué. Je n'ai pas testé avec d'autres fournisseurs oEmbed mais je pense qu'ils fonctionnent tous de la même manière. En fait, si l'oEmbed était fait côté client, il n'y aurait pas de véritable contenu intégré.
cybmeta du
1
La seule alternative que je vois est de vérifier le contenu intégré par javascript. si vous n'obtenez pas la vidéo iframe, vous pouvez montrer autre chose ...
jjarolim

Réponses:

1

Je pense que la meilleure chose à faire dans ce cas est d'envelopper votre contenu oEmbed avec un divavant de le rendre, puis d'afficher une autre image avec la background-imagepropriété CSS . Si la vidéo se charge, le contenu oEmbed couvrira l'image d'arrière-plan.

Vous pouvez ajouter le wrapper à l'aide du embed_oembed_htmlfiltre.

add_filter('embed_oembed_html', 'your_function_here');

Si vous avez peur de charger des éléments supplémentaires, vous pouvez effectuer une vérification côté client avec JS pour voir si l'oEmbed est chargé, et sinon, charger une image d'arrière-plan dans le wrapper.

Vous pourriez devenir beaucoup plus compliqué en ajoutant des champs personnalisés pour chaque vidéo, mais c'est essentiellement l'essentiel.

Daron Spence
la source
0

Une approche pourrait être de faire une autre demande en utilisant oEmbed côté serveur via un proxy basé en Chine.

De cette façon, vous saurez à l'avance si l'appel à la ressource sur le client va échouer. Au début de la demande de page, vous pouvez déterminer où se trouve géographiquement l'IP du client, effectuer un appel côté serveur via un proxy vers la ressource, par exemple YouTube, puis tirer parti de l'erreur oEmbed que vous obtiendrez probablement.

Vous pouvez jeter un œil à Wonderproxy pour y parvenir (je ne suis pas affilié à eux mais j'entends de bonnes choses)

codecowboy
la source