我想还有Vimeo与PHP脚本直接链接到视频。 我设法找到他们手动,但我的PHP脚本不起作用。 这里是举措: 比如我把这个视频:http://vimeo.com/22439234获得来自Vimeo的直接链接的视频在PHP
当你走在页面上,Vimeo的产生与目前的时间戳和这部影片相关联的签名。该信息被存储在一个JavaScript变量,周围线520刚过: window.addEvent ('domready', function() {
然后当你点击播放,HTML5播放器读取该变量,并发送一个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=
但它也适用搭配:
http:// player.vimeo.com/play_redirect?clip_id=37111719&sig={SIGNATURE}&time={TIMESTAMP}&quality=sd
如果此URL不与开http://vimeo.com/22439234 IP地址打开,将返回一个错误消息的HTTP代码200。
如果此URL被打开了正确的IP地址,标题“位置”重定向到链接到视频文件: http://av.vimeo.com/XXX/XX/XXXX.mp4?aksessionid=XXXX&token=XXXXX_XXXXXXXXX
当我建立这个链接http://player.vimeo.com/play_redirect?...
手动(“右键”>“源代码“>”line 520“)它的工作原理。
但是使用PHP和正则表达式,它会返回带有错误消息的HTTP code 200
。
为什么?
从我的观察,Vimeo的不检查HTTP请求的标头http:// player.vimeo.com/play_redirect?...
GET
,HEAD
,有饼干,没有cookies,引用等等......不会改变。
使用PHP,我使用功能file_get_contents()
和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));
}
不在这里工作,我总是得到1的结果 – Magico 2013-12-06 10:30:49
我有相同的结果时,我对代码进行测试。 – 2015-01-14 14:40:04