1

以下代码没有让我得到正确的文件:

<?php
header("Content-Type: application/octet-stream");
readfile("http://player.vimeo.com/play_redirect?clip_id=24195442&sig=49daac0ff885745c27601a80402bba14&time=1351783454&quality=hd&codecs=H264&type=moogaloop_local&embed_location=");
?>

相反,它似乎下载了http://player.vimeo.com/play_redirect?clip_id=24195442。我曾尝试使用htmlentitieshtmlspecialchars,但它并没有改变任何东西。

4

2 回答 2

0

这在视频和下载网站上很常见。为了防止琐碎的直接链接或热链接,它们会在用户与页面、视频播放器或验证码进行交互后为主要数据生成一个唯一的 URL。这就是您的 URL 的sigtime部分。此类生成的 URL 通常通过 IP 地址与用户绑定,并且会在一段时间后过期。

要传递该类型的内容,您必须破译用于生成视频 URL 的步骤。它通常像请求 HTML 页面然后在 Flash 小程序参数或脚本标记中查找 URL 一样简单。其他站点在复杂的客户端脚本或 Flash 小程序中生成 URL。

我快速浏览了 Vimeo 并弄清楚了如何获取 URL,它似乎工作正常。试试这个:

$clipId = 24195442;

ini_set('user_agent', 'Mozilla/5.0 (Windows NT 6.1; rv:10.0.9) Gecko/20100101 Firefox/10.0.9');
$config = json_decode(file_get_contents('http://player.vimeo.com/config/' . $clipId));
$videoUrl = 'http://player.vimeo.com/play_redirect?clip_id=' . $clipId .
    '&sig=' . $config->request->signature .
    '&time=' . $config->request->timestamp;
header('Content-Type: application/octet-stream');
readfile($videoUrl);

是的,您必须设置User-Agent字符串。当它看起来不像真正的浏览器时,Vimeo 拒绝了它。

我不知道是否有一个 Vimeo API 说它应该可以工作。请注意,它可能仅在 Vimeo 不更改其站点结构的情况下才有效。如果可能的话,最可靠的做法是保存或缓存视频文件并从您自己的服务器本地提供。

于 2012-11-01T17:49:31.887 回答
0

试试这个例子,它基于 Vimeo Simple API(版本 2)。自己复制粘贴试试吧……

http://www.lib.montana.edu/~jason/files/api/vimeo/item.txt

如果需要,请检查是否有注释行以使用 curl_init() 方法。从第 57 行开始,到第 69 行结束。但如果示例第一次运行,请忽略它。

于 2012-11-01T17:53:59.253 回答