我希望能够使用PHP脚本直接链接到Vimeo的视频。
我已经手动找到了它们,但我的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和错误消息。
如果此URL使用正确的IP地址打开,则标题“位置”将重定向到视频文件链接:http://av.vimeo.com/XXX/XX/XXXX.mp4?aksessionid=XXXX&token=XXXXX_XXXXXXXXX
当我手动构建此链接http://player.vimeo.com/play_redirect?...
("右键单击">“源代码”>“第520行”)时,它起作用。
但是使用PHP和正则表达式会返回HTTP代码200
和错误消息。
为什么?
根据我的观察,Vimeo不会检查http:// player.vimeo.com/play_redirect?...
HTTP请求的标题GET
、HEAD
,带有Cookie,没有Cookie,引荐等都不会改变。
使用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));
}
<iframe>
,在<body>
内部,您将看到带有JS函数的<script>
标签。在此函数内部查找var config
,然后您可以看到其中JSON键“progressive”,其值为具有不同分辨率视频链接的数组。 - Alexander Yarovoy