【问题标题】:Download rapidshare file using rapidshare api in php在 php 中使用 rapidshare api 下载 rapidshare 文件
【发布时间】:2011-01-05 21:43:07
【问题描述】:

我正在尝试以免费用户的身份使用它的“下载”子程序下载一个 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_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

我将文件 ID(440817141) 和文件名(AutoRun__live-down.com_Champ.rar) 传递给 rs_download(...),我得到了响应,正如 rapidshare 的 api 文档所说。

rapidshare api 文档(请参阅“sub=download”)说使用下载身份验证字符串调用服务器主机名,但我无法弄清楚 url 应该采用什么形式。

有什么建议吗?我试过了

$download_url = "http://$the-hostname/$the-dlauth-string/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 代码似乎不起作用,没有下载任何内容。可能它的下载网址不正确。

下载地址也试过这种格式:

“http://rs$serverid$shorthost.rapidshare.com/files/$fileid/$filename”

使用此 curl 写入文件条目,但仅此而已(写入 0/1 kb 文件)。

这是我用来从 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 和文件名(如果调用单个文件,则没有逗号)

提前感谢您的任何建议。

【问题讨论】:

  • $curl_options 数组中的 , 看起来很不合适。

标签: php api curl rapidshare


【解决方案1】:

您首先请求?sub=download&fileid=X&filename=Y,然后它返回$hostname,$dlauth,$countdown,$md5hex.. 由于您是免费用户,您必须延迟$countdown 秒,然后调用?sub=download&fileid=X&filename=Y&dlauth=Z 执行下载。

在 python here 中有一个有效的实现可能会回答您的任何其他问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多