• en version
  • version fr

english version

A few days ago I was playing with oEmbed, this is a format and a service used by many sites for online documents, such as videos (youtube, vimeo, dailymotion ...). This allows you to retrieve, among other things, the HTML code to insert in a html page for viewing the content.

I needed to retrieve this information client-side, in JavaScript.
For example, there's some jQuery plugins.
But I was limited by cross domain restrictions on XMLHttpRequest by browsers (that means, we can only make requests on the same domain as the current page).

The solution is to do it server side, and the client can query it.
I was not convinced by the Php classes that I found. So here's my solution. You only need that the curl extension is installed with php.
It's just a few lines of code. And bonus, we can deliver some JSONP , even if the real service does not.

  • the PHP class

  • implementation example, a page example-proxy.php
    just request this page, for example:
    http://example.com/example-proxy.php?url=http%3A//www.youtube.com/watch%3Fv%3DbDOYN-6gdRE&format=json

  • example of file requesting the service (via JQuery)

The services included are YouTube, Vimeo and Dailymotion, but it is possible to override oembedProviders to add more.

I put this under the MIT license, so it can be useful to someone else ;) ...

version française

un proxy oEmbed léger en php

Il y a quelques jours j'ai eu à jouer avec oEmbed, c'est un format et un service utilisé par beaucoup de sites de documents en ligne, vidéos par exemple (youtube, vimeo, dailymotion...). Celà permet de récupérer, entre autre, le code html insérable dans une page pour visualiser un contenu.

J'avais besoin de récupérer ces informations côté client, en JavaScript.
On trouve par exemple des plugins jQuery.
Seulement, j'étais limité par les restrictions multi domaine des navigateurs sur XMLHttpRequest (en clair, on peut faire des requêtes uniquement sur le même domaine que la page courante).

La solution, faire la vraie requête côté serveur, que le client interroge.
Les classes php que j'ai trouvées ne m'ont pas convaincu. Alors voici ma solution. Il suffit que l'extension curl soit installée avec php.
C'est juste quelques lignes de code. Et bonus, on peut délivrer du jsonp même si le vrai service ne le propose pas.

  • La classe PHP

  • exemple d'implémentation, une page example-proxy.php
    Il suffit d'interroger cette page, par exemple :
    http://example.com/example-proxy.php?url=http%3A//www.youtube.com/watch%3Fv%3DbDOYN-6gdRE&format=json

  • exemple de fichier interrogeant le service (via JQuery)

Les services pris en compte sont YouTube, Vimeo et Dailymotion, mais il est possible de surcharger oembedProviders pour en ajouter d'autres.

Je met çà sous licence MIT, si çà peut servir à quelqu'un d'autre ;) ...