Wer schonmal versucht hat Videos/Bilder/etc. von anderen Seiten einzubinden wird das Problem kennen: will man nur wenige Sites ohne Meta-Daten unterstützen ist es noch relativ überschaubar – will man aber z.B. noch den Autor oder Ähnliches anzeigen wird es kompliziert. Ausserdem wächst der Aufwand mit zusätzlichen Sites die man unterstützen will immer mehr an.
An dieser Stelle kommt oEmbed ins Spiel. oEmbed ist eine Technologie die es Inhaltsanbietern wie YouTube/Flickr/etc. ermöglicht eine einfache Schnittstelle zur Verfügung zu stellen über die man Daten zu einem “Objekt” (Video/Bild/etc.) abrufen kann.
Angenommen ein User möchte ein Video von YouTube einbinden, dann übergibt man die URL des Videos an den oEmbed-Provider von YouTube und erhält z.B. ein Array (JSON-kodiert) zurück welches alle relevanten Daten zu dem Video enthält. Die Antwort enthält z.B. Angaben zum Autor, die Höhe/Breite, den HTML-Code um einen Player einzubinden, uvm.
Das Besondere ist nun, dass man neben der YouTube-Unterstützung quasi jede Video-Seite unterstützen kann die oEmbed anbietet. Statt der YouTube-URL könnte ein User auch eine Viddler-URL angeben. Per oEmbed würde man die URL abrufen, dort finden man im <head>-Bereich Details zum oEmbed-Provider von Viddler, den man dann abfragen kann und schon bekommt man von Viddler genauso ein Array wie man es sonst von YouTube erhält.
Auf diese Weise kann man quasi jede Video-Seite unterstützen die oEmbed anbietet ohne grossartig neuen code schreiben zu müssen.
Mit WordPress 2.9 wird diese Technik bei WP Standard und hoffentlich eine grossflächige Unterstützung erhalten (momentan gibt es nur relativ wenige Seiten die oEmbed schon unterstützen).
Auf der Website finden sich übrigens Bibliotheken für PHP, Perl, Ruby und Python um oEmbed in eigene Projekte einzubinden.
Alles in Allem ist das eine (meiner Meinung nach) sehr spannende Technik die vieles erleichtern kann. Einen Blick ist es auf jeden Fall wert.



Es gibt auch eine CodeIgniter-Library dafür: http://wiki.codeigniter.ch/wiki/ci-wiki/OEmbed-Library