無料のユーザーとして "ダウンロード"サブルーチンを使用してrapidshareファイルをダウンロードしようとしています。以下はサブルーチンからの応答を得るために使用するコードです。rapidshareファイルをPHPでダウンロードする
function rs_download($params)
{
$url = "http://api.rapidshare.com/cgi-bin/rsapi.cgi?sub=download&fileid=".$params['fileid']."&filename=".$params['filename'];
$reply = @file_get_contents($url);
if(!$reply)
{
return false;
}
$result_arr = array();
$result_keys = array(0=> 'hostname', 1=>'dlauth', 2=>'countdown_time', 3=>'md5hex');
if(preg_match("/DL:(.*)/", $reply, $reply_matches))
{
$reply_altered = $reply_matches[1];
}
else
{
return false;
}
foreach(explode(',', $reply_altered) as $index => $value)
{
$result_arr[ $result_keys[$index] ] = $value;
}
return $result_arr;
}
たとえば、 http://rapidshare.com/files/440817141/AutoRun__live-down.com_Champ.rar
...これをダウンロードしようとしている私がrs_downloadするFILEID(440817141)およびファイル名(AutoRun__live-down.com_Champ.rar)(...)を渡すと、私は急流のAPIドキュメントが言う同じように応答を得ます。
rapidshare api doc(「sub = download」参照)は、ダウンロードの認証文字列でサーバーのホスト名を呼び出していますが、URLの形式を把握できませんでした。
任意の提案?私は
$ DOWNLOAD_URL =試してみました:
を "HTTP // $ホスト名/ $-dlauth文字列/ファイル/ $ FILEID/$ファイル名を"上記のいくつかの他のバリエーションは、何も働かなかった。
私はcurlを使ってファイルをダウンロードします。
$cr = curl_init();
$fp = fopen ("d:/downloaded_files/file1.rar", "w");
// set curl options
$curl_options = array(
CURLOPT_URL => $download_url
,CURLOPT_FILE => $fp
,CURLOPT_HEADER => false
,CURLOPT_CONNECTTIMEOUT => 0
,CURLOPT_FOLLOWLOCATION => true
);
curl_setopt_array($cr, $curl_options);
curl_exec($cr);
curl_close($cr);
fclose($fp);
上記のカールコードは動作していないようですが、何もダウンロードされません。おそらくそのダウンロードURLは間違っているでしょう。
は "http://rs$serverid$shorthost.rapidshare.com/files/$fileid/$filename"
これにより
もダウンロードURLこの形式を試してみましたcurlはファイルエントリを書き込みますが、それはすべてです(0/1 kbファイルを書き込みます)。
ここでは、rapidshareの他のいくつかの値のうち、短くても、serveridを取得するために使用するコードを示します。
function rs_checkfile($params)
{
$url = "http://api.rapidshare.com/cgi-bin/rsapi.cgi?sub=checkfiles_v1&files=".$params['fileids']."&filenames=".$params['filenames'];
// the response from rapishare would a string something like:
// 440817141,AutoRun__live-down.com_Champ.rar,47768,20,1,l3,0
$reply = @file_get_contents($url);
if(!$reply)
{
return false;
}
$result_arr = array();
$result_keys = array(0=> 'file_id', 1=>'file_name', 2=>'file_size', 3=>'server_id', 4=>'file_status', 5=>'short_host'
, 6=>'md5');
foreach(explode(',', $reply) as $index => $value)
{
$result_arr[ $result_keys[$index] ] = $value;
}
return $result_arr;
}
rs_checkfile(...)(単一のファイルを要求した場合なしカンマ)カンマがfileidsとファイル名を区切って任意の提案を事前に
感謝を取ります。
'$ curl_options'配列の'、 'はあまりにも外に見えます。 – SuperSaiyan