Desidero un collegamento diretto ai video di Vimeo con uno script PHP. Sono riuscito a trovarli manualmente, ma il mio script PHP non funziona. Qui è l'iniziativa: Per esempio ho preso questo video: http://vimeo.com/22439234Ottieni video di collegamento diretto da Vimeo in PHP
Quando vai sulla pagina, Vimeo genera una firma associata con il timestamp corrente e questo video. Queste informazioni sono memorizzate in una variabile JavaScript, attorno alla riga 520 subito dopo: window.addEvent ('domready', function() {
Poi, quando si fa clic su Play, il player HTML5 legge questo variabile e invia una richiesta 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=
Ma funziona anche con:
http:// player.vimeo.com/play_redirect?clip_id=37111719&sig={SIGNATURE}&time={TIMESTAMP}&quality=sd
Se questo URL non si apre con l'indirizzo IP che ha aperto http://vimeo.com/22439234, questo restituisce il codice HTTP 200 con un messaggio di errore.
Se questo URL viene aperto con l'indirizzo IP corretto, l'intestazione "Location" reindirizza per collegare il file video: http://av.vimeo.com/XXX/XX/XXXX.mp4?aksessionid=XXXX&token=XXXXX_XXXXXXXXX
Quando costruisco questo link http://player.vimeo.com/play_redirect?...
manualmente ("tasto destro"> "codice sorgente ">" riga 520 ") funziona.
Ma con PHP e regex restituisce HTTP code 200
con un messaggio di errore.
Perché?
Dalle mie osservazioni, Vimeo non verifica le intestazioni di richiesta HTTP per http:// player.vimeo.com/play_redirect?...
GET
, HEAD
, con biscotti, senza cookie, referrer, ecc ... non cambia.
Con PHP, utilizzo la funzione file_get_contents()
e 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));
}
non funziona qui, ho sempre avuto 1 come risultato – Magico
Ho lo stesso risultato quando prova il codice. –