2011-01-05 26 views
1

我想下載一個使用其「下載」子程序作爲免費用戶的rapidshare文件。以下是我用來從子例程獲取響應的代碼。使用rapidshare api在php下載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

我傳遞的fileid(440817141)和文件名(AutoRun__live-down.com_Champ.rar)到rs_download(...),我得到的只是作爲免費電子的API文檔說的響應。

rapidshare api文檔(請參閱「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); 

上面的捲曲代碼似乎沒有工作,沒有得到下載。可能它的下載網址不正確。

也試過這種格式的下載網址:

「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(...)採用逗號分隔fileids和文件名(沒有逗號,如果要求一個單一的文件)提前

感謝您的任何建議。

+0

'$ curl_options'數組中的'''看起來不合適。 – SuperSaiyan 2011-01-06 10:57:47

回答

0

您通過請求?sub=download&fileid=X&filename=Y啓動,並返回$hostname,$dlauth,$countdown,$md5hex ..因爲你是你不得不推遲了$countdown秒鐘,然後調用?sub=download&fileid=X&filename=Y&dlauth=Z執行下載一個免費的用戶。

python here中有一個工作實現,它可能會回答你的任何其他問題。