YouTubeビデオをダウンロードするためにphpチューブクラスを使用しています。YouTube ビデオの URL を送信すると、ビデオがフォルダに自動的にダウンロードされます。
ローカル (XAMPP) ではすべて正常に動作していますが、これをサーバー (オンライン) にアップロードすると、0 バイトの flv ファイルのみが保存されます。
また、両方の側 (ローカルとグローバル) でコードをデバッグします。
このようなURLを取得します(ローカルで)
http://www.youtube.com/get_video?video_id=1jNWCFwqPvM&=vjVQa1PpcFMyYCECyfmYENWklpwXGyhVgJpSFPgNAEc%3D
一方、サーバーではこのようなリンクを取得しました
http://www.youtube.com/
get_video?video_id=1jNWCFwqPvM&t=vjVQa1PpcFNS3SPxIXi8hy-NF4qZFFrScDXCjGLLrLc%3D
ローカルから取得したリンクをコピーしてブラウザーに貼り付けると、ダウンロード ボックスがブラウザーに表示されますが、サーバーから取得したリンクをコピーしてブラウザーに貼り付けると、空白のページのみが表示されます。
- 私の問題を解決してください、エラーはどこにありますか?
- pearがサーバーにインストールされているかどうかを知る方法は?
サーバー側で時々次のようなリンクを取得します
http://www.youtube.com/get_video?video_id=1jNWCFwqPvM&t=vjVQa1PpcFNS3SPxIXi8hy-NF4qZFFrScDXCjGLLrLc%3D
しかし、時々私は
http://www.youtube.com/get_video?video_id=&t=
これらを解決するには?
アップデート:
すべてのコードをデバッグしたところ、file_get_contents()
サーバーでは string(0) が返されるのに対し、ローカルでは整数値が返されることがわかりました。allow_url_fopen
は私のサーバー上にあります
これはindex.php
include_once('functions.php');
$url = $_POST['url']; // here is url of youtube video
$pattern = getPatternFromUrl($url);
$flv_path = GrabFlvFromYoutube($pattern );
echo "File Successfully Downloaded at:".$flv_path."<br/>";
これらの機能はfunctions.php
function getPatternFromUrl($url)
{
$url = $url.'&';
$pattern = '/v=(.+?)&+/';
preg_match($pattern, $url, $matches);
//echo $matches[1]; die;
return ($matches[1]);
}
と
function GrabFlvFromYoutube( $pattern )
{
require_once ("phptube.php");
$tube = new PHPTube ();
$flv_http_path = $tube->download($pattern) ;
echo "<br/>Complete URL:".$flv_http_path;
set_time_limit(0);
$data = file_get_contents($flv_http_path);
//var_dump(file_get_contents($flv_http_path));
$new_flv_path = dirname(_FILE_).'/flvs/'.$pattern.'-'.time().'.flv' ;
echo "<br />File uploaed:";
file_put_contents($new_flv_path, $data);
return $new_flv_path ;
}
以下の関数phptube.php
class PHPTube {
var $cookies;
var $mgr;
var $req;
var $debug = true;
var $auth = false;
function PHPTube () {}
function download ($video_id) {
$url = "http://www.youtube.com/watch?v=".$video_id;
$this->req =& new HTTP_Request($url);
$response = $this->req->sendRequest();
if (PEAR::isError($response)) {
$response->getMessage()."\n";
} else {
$page = $this->req->getResponseBody();
$vpattern = '/v=(.*?)&/';
//$vpattern ='/video_id:(.*?)/';
preg_match($vpattern,$page,$mv);
//preg_match('&"video_id": "(.*?)"&', $page, $mv);
echo "<br />Video ID:".$v_id = $mv[1];
//$tpattern='/"t": "(.*?)"/';
$tpattern = '/&t=(.*?)&/';
preg_match($tpattern,$page,$tickets);
echo "<br />Token ID:".$token = $tickets[1];
$curl = "video_id=";
$curl .= $v_id;
$curl .= "&t=";
$curl.= $token;
//echo "<br />Query String:".$curl; die;
$url = "http://www.youtube.com/get_video?".$curl;
if ($this->debug)
return $url;
}
}
}