在php中使用rapidshare api下载rapidshare文件
我正试图以自由用户的身份使用rapidshare的“下载”子例程下载该文件。下面是我用来从子例程获取响应的代码在php中使用rapidshare api下载rapidshare文件,php,api,curl,rapidshare,Php,Api,Curl,Rapidshare,我正试图以自由用户的身份使用rapidshare的“下载”子例程下载该文件。下面是我用来从子例程获取响应的代码 function rs_download($params) { $url = "http://api.rapidshare.com/cgi-bin/rsapi.cgi?sub=download&fileid=".$params['fileid']."&filename=".$params['filename']; $reply = @file_get_
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;
}
比如,;正在尝试下载此。。。
我将文件ID(440817141)和文件名(AutoRun_uulive-down.com_Champ.rar)传递给rs_download(…),然后得到响应,正如rapidshare的api文档所说的那样
RapidShareAPI文档(请参阅“sub=download”)说,使用下载身份验证字符串调用服务器主机名,但我无法确定url应该采用什么形式
有什么建议吗?我试过了
$download\u url=“http://$hostname/$dlauth字符串/files/$fileid/$filename”
还有一些其他的变化,没有任何效果
我使用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);
上面的curl代码似乎不起作用,无法下载任何内容。可能是下载url不正确
还尝试将此格式用于下载url:
"http://rs$serverid$shorthost.rapidshare.com/files/$fileid/$filename”
使用此curl写入一个文件条目,但仅此而已(写入一个0/1KB的文件)
下面是我用来从rapidshare获取serverid、shorthost和其他一些值的代码
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(…)采用逗号分隔的文件ID和文件名(如果调用单个文件,则不使用逗号)
提前感谢您的建议。您首先请求
?sub=download&fileid=X&filename=Y
,它返回$hostname、$dlauth、$countdown、$md5hex
。。由于您是自由用户,您必须延迟$countdown
秒,然后调用?sub=download&fileid=X&filename=Y&dlauth=Z
执行下载
python中有一个可行的实现,它可能会回答您的任何其他问题。在
$curl\u选项中的,
数组看起来太不合适了。