2011-01-05 8 views
1

無料のユーザーとして "ダウンロード"サブルーチンを使用して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とファイル名を区切って任意の提案を事前に

感謝を取ります。

+0

'$ curl_options'配列の'、 'はあまりにも外に見えます。 – SuperSaiyan

答えて

0

あなたは無料のユーザーだので、あなたは$countdown秒間遅らせ、その後、ダウンロードを実行するために?sub=download&fileid=X&filename=Y&dlauth=Zを呼び出す必要があります..あなたは?sub=download&fileid=X&filename=Yを要求することから始め、それが$hostname,$dlauth,$countdown,$md5hexを返します。

Python hereには、他の質問にお答えする実装があります。

関連する問題