Obtenir le lien direct des vidéos de Vimeo en PHP

Je veux un lien direct vers les vidéos de Vimeo avec un script PHP.
J'ai réussi à trouver manuellement, mais mon script PHP ne fonctionne pas.
Voici la démarche:
Pour exemple, j'ai pris cette vidéo: http://vimeo.com/22439234

Quand vous allez sur la page Vimeo génère une signature associée avec le timestamp actuel et cette vidéo. Cette information est stockée dans une variable JavaScript, autour de la ligne 520 juste après:
window.addEvent ('domready', function () {

Ensuite, lorsque vous cliquez sur Jouer, le lecteur HTML5 lit cette variable et envoie une requête HTTP:

http://player.vimeo.com/play_redirect?clip_id=37111719&sig={SIGNATURE}&time={TIMESTAMP}&quality=sd&codecs=H264,VP8,VP6&type=moogaloop_local&embed_location=

Mais il fonctionne également avec:

http://player.vimeo.com/play_redirect?clip_id=37111719&sig={SIGNATURE}&time={TIMESTAMP}&quality=sd

Si cette URL ne s'ouvre pas avec l'adresse IP qui a ouvert http://vimeo.com/22439234, il renvoie le code HTTP 200 avec un message d'erreur.

Si cette URL est ouvert avec la bonne adresse IP, l'en-tête "Emplacement" redirige vers un lien vers le fichier vidéo:
http://av.vimeo.com/XXX/XX/XXXX.mp4?aksessionid=XXXX&token=XXXXX_XXXXXXXXX

Quand j'ai construit ce lien http://player.vimeo.com/play_redirect?... manuellement ("clic droit"> "source code"> "ligne 520"), il fonctionne.

Mais avec PHP et regex il renvoie la HTTP code 200 avec un message d'erreur.

Pourquoi ?

De mes observations, Vimeo ne pas vérifier les en-têtes de la requête HTTP pour http://player.vimeo.com/play_redirect?...
GET, HEAD, avec les cookies, sans témoins, référent etc. ... ne change pas.

Avec PHP, j'utilise la fonction file_get_contents() et get_headers().

    <?php
    function getVimeo($id) {

    $content = file_get_contents('http://vimeo.com/'.$id);

    if (preg_match('#document\.getElementById\(\'player_(.+)\n#i', $content, $scriptBlock) == 0)
        return 1;

    preg_match('#"timestamp":([0-9]+)#i', $scriptBlock[1], $matches);
    $timestamp = $matches[1];
    preg_match('#"signature":"([a-z0-9]+)"#i', $scriptBlock[1], $matches);
    $signature = $matches[1];

    $url = 'http://player.vimeo.com/play_redirect?clip_id='.$id.'&sig='.$signature.'&time='.$timestamp.'&quality=sd';

    print_r(get_headers($url, 1));
    }

OriginalL'auteur Sony | 2012-07-08