我设法手动找到它们,但我的PHP脚本不起作用.
这是倡议:
例如,我拍了这个视频: http://vimeo.com/22439234
当您进入页面时,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.
如果使用正确的IP地址打开此URL,则标题“位置”会重定向以链接到视频文件:
http://av.vimeo.com/XXX/XX/XXXX.mp4?aksessionid=XXXX\u0026amp;token=XXXXX_XXXXXXXXX
当我建立这个链接http://player.vimeo.com/play_redirect?…手动(“右键单击”>“源代码”>“520行”)它可以工作.
但是使用PHP和regex,它会返回带有错误消息的HTTP代码200.
为什么?
根据我的观察,Vimeo没有检查http:// player.vimeo.com/play_redirect的HTTP请求的标头?…
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',$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)); }