0

对于我想要做的事情,我在 CLI 中使用 PHP5 和 cURL 扩展。我正在尝试从 youtube 的服务器下载文件,它适用于任何导航器,链接是这样的;

`http://youtube.com/get_video_info?video_id=VIDEO_ID

示例:http://youtube.com/get_video_info ?video_id= 9pQxmD6Bhd

当我通过导航器访问此文件时,它会提示我提供文件“get_video_info”的下载框,下载文件内容时会显示一些数据,..

问题是使用 cURL 获取此文件,我不断收到此错误消息;

status=fail&errorcode=2&reason=无效+参数。

这是代码(我试图更改一些选项,但我不熟悉 cURL,所以我被卡住了。

$c = curl_init();
curl_setopt($c, CURLOPT_URL, "http://youtube.com/get_video_info?video_id=9pQxmD6Bhd");
curl_setopt($c, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1");
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
curl_setopt($c, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($c, CURLOPT_HEADER, false);
$output = curl_exec($c);
if($output === false)
{
    trigger_error('Erreur curl : '.curl_error($c),E_USER_WARNING);
}
else
{
    var_dump($output);
}
curl_close($c);

我尝试使用一些 curl_setopt 选项,例如 CURLOPT_TRANSFERTEXT ,但没有成功。我绝对需要帮助!

感谢您的回答,如果我做了不尊重这里规则的事情,我很抱歉,这是我的第一篇文章。

编辑 这是在 cli 中使用 php 下载 youtube 视频 ( .ogg ) 的代码。

<?php 

/*Youtube URL and ID*/
$youtube_video = "http://www.youtube.com/watch?v=Ftud51NhY2I";
$yt_id = explode("=", $youtube_video);
$id = $yt_id[1];

/*
    Functions
*/
function get_link($raw){
    $url = rawurldecode(rawurldecode($raw));
    $url = explode("&qual", $url);      
    return $url[0];
}



/*
    Here we go

    Query video token
*/
$c = curl_init();
curl_setopt($c, CURLOPT_URL, $youtube_video);
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
curl_setopt($c, CURLOPT_HEADER, false);
$output = curl_exec($c);
if($output === false)
{
    trigger_error('Erreur curl : '.curl_error($c),E_USER_WARNING);
}
else{}
curl_close($c);

/*
    Get Video infos
*/
$c = curl_init();
curl_setopt($c, CURLOPT_URL, "http://youtube.com/get_video_info?video_id=".$id);
curl_setopt($c, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1");
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
curl_setopt($c, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($c, CURLOPT_HEADER, false);
$output = curl_exec($c);
if($output === false){trigger_error('Erreur curl : '.curl_error($c),E_USER_WARNING);}
else{}
curl_close($c);
/*Get RAW link*/
$temp = explode("url_encoded_fmt_stream_map=url%3D", $output);
$url = explode("=", $temp[1]);
$url = get_link($url[0]);
/*Get Video name*/
$temp = "";
$temp = explode("title=", $output);
$title = explode("&", $temp[1]);
$title = rawurldecode(rawurldecode($title[0]));
$replace = array(':', '+', '\\', '/', '"', '<', '>', '|', '(', ')', '\'');
$title = str_replace($replace, ' ',$title);
//echo $title;
/*
    Download Video
*/
$url  = $url;
$path = $title.'.ogg';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
curl_close($ch);
file_put_contents($path, $data);

echo "Done... \r\n";

?>

4

2 回答 2

3

您收到错误消息,因为video_id参数无效。

尝试更改它ID,它应该可以正常工作。

http://www.youtube.com/watch?v=9pQxmD6Bhd- 不存在

于 2012-09-10T09:05:52.583 回答
0

youtube 改变了他们的系统。现在它只适用于使用 get_video_info 系统的真实 IP。当您尝试使用 cURL 时,它会将服务器 IP 发送到 Youtube,然后您必须使用服务器 IP 下载视频,因为 youtube 系统会创建具有给定 IP 的直接视频下载 url。

于 2013-09-13T17:39:59.747 回答