Holen Sie sich direkte Link-Videos von Vimeo in PHP
Ich möchte einen direkten Link zu Videos von Vimeo mit einem PHP-Skript. Ich habe sie manuell gefunden, aber mein PHP-Skript funktioniert nicht. Hier ist die Initiative: Zum Beispiel habe ich dieses Video aufgenommen:http://vimeo.com/22439234
Wenn Sie auf die Seite gehen, generiert Vimeo eine Signatur, die dem aktuellen Zeitstempel und diesem Video zugeordnet ist. Diese Informationen werden in einer JavaScript-Variablen um die Zeile 520 herum gespeichert, unmittelbar nach:window.addEvent ('domready', function () {
Wenn Sie dann auf "Abspielen" klicken, liest der HTML5-Player diese Variable und sendet eine HTTP-Anfrage:
http:// player.vimeo.com/play_redirect?clip_id=37111719&sig={SIGNATURE}&time={TIMESTAMP}&quality=sd&codecs=H264,VP8,VP6&type=moogaloop_local&embed_location=
Es funktioniert aber auch mit:
http:// player.vimeo.com/play_redirect?clip_id=37111719&sig={SIGNATURE}&time={TIMESTAMP}&quality=sd
Wenn diese URL nicht mit der geöffneten IP-Adresse geöffnet wirdhttp://vimeo.com/22439234Gibt den HTTP-Code 200 mit einer Fehlermeldung zurück.
Wenn diese URL mit der richtigen IP-Adresse geöffnet wird, wird die Überschrift "Ort" weitergeleitet, um auf die Videodatei zu verlinken:http://av.vimeo.com/XXX/XX/XXXX.mp4?aksessionid=XXXX&token=XXXXX_XXXXXXXXX
Wenn ich diesen Link bauehttp://player.vimeo.com/play_redirect?...
manuell ("Rechtsklick"> "Quellcode"> "Zeile 520") funktioniert es.
Aber mit PHP und Regex gibt es dieHTTP code 200
mit einer Fehlermeldung.
Warum ?
Nach meinen Beobachtungen überprüft Vimeo nicht die Header der HTTP-Anfrage nachhttp:// player.vimeo.com/play_redirect?...
GET
, HEAD
, mit Cookies, ohne Cookies, Referrer etc. ... ändert sich nicht.
Mit PHP benutze ich die Funktionfile_get_contents()
undget_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));
}