Obtenha vídeos de links diretos do Vimeo em PHP
Eu quero um link direto para vídeos do Vimeo com um script PHP. Eu consegui encontrá-los manualmente, mas meu script PHP não funciona. Aqui está a iniciativa: Por exemplo eu peguei este vídeo:http://vimeo.com/22439234
Quando você vai na página, o Vimeo gera uma assinatura associada ao timestamp atual e a este vídeo. Esta informação é armazenada em uma variável JavaScript, em torno da linha 520 logo após:window.addEvent ('domready', function () {
Então, quando você clica em Reproduzir, o player HTML5 lê essa variável e envia uma solicitação 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=
Mas também funciona com:
http:// player.vimeo.com/play_redirect?clip_id=37111719&sig={SIGNATURE}&time={TIMESTAMP}&quality=sd
Se este URL não abrir com o endereço IP abertohttp://vimeo.com/22439234, isso retorna o código HTTP 200 com uma mensagem de erro.
Se esse URL for aberto com o endereço IP correto, o cabeçalho "Local" redirecionará para o link para o arquivo de vídeo:http://av.vimeo.com/XXX/XX/XXXX.mp4?aksessionid=XXXX&token=XXXXX_XXXXXXXXX
Quando eu construir esse linkhttp://player.vimeo.com/play_redirect?...
manualmente ("clique direito"> "código de fonte"> "linha 520") trabalha.
Mas com PHP e regex retorna oHTTP code 200
com uma mensagem de erro.
Por quê ?
De minhas observações, o Vimeo não verifica os cabeçalhos da solicitação HTTP parahttp:// player.vimeo.com/play_redirect?...
GET
, HEAD
, com cookies, sem cookies, referenciador, etc ... não muda.
Com PHP, eu uso a funçãofile_get_contents()
eget_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));
}