Wenn oEmbed fehlschlägt, zeigen Sie eine Alternative an

8

Ich möchte ein alternatives Bild angeben, das angezeigt wird, wenn oEmbed fehlschlägt.

Der spezielle Anwendungsfall besteht darin, eine Alternative anzubieten, wenn China (oder andere Länder) YouTube blockieren. Wir wissen, dass der YouTube-Inhalt dort nicht verfügbar ist, möchten aber in diesem Fall ein alternatives Bild bereitstellen.

Kann der oEmbed-Fehlercode zu diesem Zweck zugänglich gemacht werden?

Bob Easton
quelle
Sehr interessante Frage. Leider habe ich keine Antwort für Sie, aber das ist definitiv einen Blick wert.
Pieter Goosen
1
Ich habe mich mit diesem Thema befasst. Ich bin ziemlich tief gegangen, aber ich habe keine Lösung gefunden. Das Problem ist, dass die oEmbed-Anforderung vom Webserver und nicht vom Client ausgeführt wird. Auf dem Server ist alles in Ordnung und der eingebettete HTML-Code wird von YouTube zurückgegeben. Das heißt, der Iframe, der das Video lädt. Wenn der Client versucht, den Iframe-Inhalt zu laden, wird der Inhalt blockiert. Soweit ich verstehen kann, scheitert oEmbed nicht und wir können nichts oder nur sehr wenig tun. Erwarten, was andere darüber denken.
Cybmeta
Ich denke, nicht sicher, die API von oembed funktioniert über RESTful API. Diese API gibt eine Antwort wie diese an den Client zurück GET /photos/bees/2362225867/ HTTP/1.1 Host: flickr.com Accept: application/oembed+xml. Alternativ wird standardmäßig ein Fehler-http-Code angezeigt, z. B. 406 Not Acceptable. Dies sollte nützlich sein, um eine Nachricht zurückzugeben.
Bueltge
@bueltge Die von oEmbed zurückgegebene Antwort wird nicht an den Client gesendet. Nicht zuletzt für YouTube, wie ich in meinem Kommentar sagte. Die oEmbed-Anforderung wird serverseitig ausgeführt, YouTube gibt einen <iframe>HTML- Code zurück und dies ist das, was in den Beitrag eingebettet ist, und das ist der Server für den Client: a <iframe>. Wenn der Client aus China versucht, den Inhalt des zu laden <iframe>, wird er blockiert. Es ist nichts serverseitig beteiligt. Ich habe nicht mit anderen oEmbed-Anbietern getestet, aber ich denke, dass sie alle auf ähnliche Weise funktionieren. Wenn das oEmbed clientseitig durchgeführt würde, wären keine echten Inhalte eingebettet.
Cybmeta
1
Die einzige Alternative, die ich sehe, besteht darin, den eingebetteten Inhalt mit Javascript zu überprüfen. Wenn Sie das Video
Iframe

Antworten:

1

Ich denke, das Beste, was Sie in diesem Fall tun können, ist, Ihren oEmbed-Inhalt divvor dem Rendern mit einem zu versehen und dann ein alternatives Bild mit der CSS- background-imageEigenschaft anzuzeigen . Wenn das Video geladen wird, deckt der oEmbed-Inhalt das Hintergrundbild ab.

Sie können den Wrapper mithilfe des embed_oembed_htmlFilters hinzufügen .

add_filter('embed_oembed_html', 'your_function_here');

Wenn Sie Bedenken haben, zusätzliche Elemente zu laden, können Sie mit JS eine clientseitige Überprüfung durchführen, um festzustellen, ob das oEmbed geladen wurde, und wenn nicht, ein Hintergrundbild in den Wrapper laden.

Sie könnten viel komplizierter werden, wenn Sie benutzerdefinierte Felder für jedes Video hinzufügen, aber das ist im Wesentlichen das Wesentliche.

Daron Spence
quelle
0

Ein Ansatz könnte darin bestehen, eine weitere Anfrage über oEmbed auf der Serverseite über einen in China ansässigen Proxy zu stellen.

Auf diese Weise wissen Sie im Voraus, ob der Aufruf der Ressource auf dem Client fehlschlägt. Zu Beginn der Seitenanforderung können Sie feststellen, wo sich die IP des Clients geografisch befindet, einen serverseitigen Anruf über einen Proxy an die Ressource, z. B. YouTube, tätigen und dann den vermutlich aufgetretenen oEmbed-Fehler nutzen.

Sie könnten sich Wonderproxy ansehen, um dies zu erreichen (ich bin nicht mit ihnen verbunden, höre aber gute Dinge).

Codecowboy
quelle