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);

CURLOPT_TRANSFERTEXT のようないくつかの curl_setopt オプションを使用しようとしましたが、成功しませんでした。私は間違いなく助けが必要です!

回答ありがとうございます。ここでルールを尊重しないことをした場合は申し訳ありません。これが私の最初の投稿です。

編集 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

0

YouTube がシステムを変更しました。現在は、get_video_info システムを使用する実際の IP でのみ機能しています。cURL を試してみると、サーバー IP が Youtube に送信されます。サーバー IP を使用して動画をダウンロードする必要があります。これは、YouTube システムが特定の IP を使用して動画を直接ダウンロードする URL を作成するためです。

于 2013-09-13T17:39:59.747 に答える