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
Vous devez vous connecter pour publier un commentaire.
L'algorithme ressemble à ceci:
attribut.
$vidéo = json_decode($this->getRemoteContent($vidéo->getAttribute('data-config-url')));
lien direct pour la SD de la qualité de la vidéo.
Voici ma classe simple, que de travail pour ce moment.
À l'aide de:
<iframe>
avec vidéo intégrée et à l'intérieur de la<body>
vous verrez la<script>
de la balise avec une fonction JS. L'intérieur de cette fonction trouvervar config
et puis vous pouvez le voir, il y JSON clé"progressive"
avec la valeur de tableau avec des liens vers des vidéos avec des résolutions différentes.OriginalL'auteur Alexander Yarovoy
Essayez d'ajouter un utilisateur valide de l'agent à l'en-tête pour chaque demande.
Pour cela, vous devez utiliser cURL ou HttpRequest au lieu file_get_contents().
Après ces manipulations, j'ai reçu un lien de travail pour le téléchargement d'un fichier vidéo.
Voici mon code:
J'ai le même résultat quand je l'ai tester le code.
OriginalL'auteur Empty