2010-04-03 3 views
1

Я создаю класс для отправки вызовов API в Rapidshare и возврата результатов этого вызова. Вот как я хочу призыв сделать:Не удалось настроить вызов API с помощью массива параметров

$rs = new rs(); 

$params = array(
    'sub' => 'listfiles_v1', 
    'type' => 'prem', 
    'login' => '10347455', 
    'password' => 'not_real_pass', 
    'realfolder' => '0', 
    'fields' => 'filename,downloads,size', 
    ); 

print_r($rs->apiCall($params)); 

А вот класс до сих пор:

class RS 
{ 
    var $baseUrl = 'http://api.rapidshare.com/cgi-bin/rsapi.cgi?sub='; 

    function apiCall($params) 
    { 
     $newUrl = $baseUrl; 
     $keys = array_keys($params); 
     $count = count($params); 
     for($i = 0; $i < $count; $i++) 
     { 
      $newUrl .= $keys[$i]; 
      $newUrl .= '&'; 
      $newUrl .= $params[$keys[$i]]; 
     } 
     return $newUrl; 
    } 
} 

Очевидно, я возвращаюсь $newUrl и используя print_r() для проверки строки запроса, и это то, что она выходит как с кодом, показанного выше:

sub&listfiles_v1type&premlogin&10347455password&_not_real_passrealfolder&0fields&filename,downloads,size 

Когда это должно быть:

http://api.rapidshare.com/cgi-bin/rsapi.cgi?sub=listfiles_v1&type=prem&login=10347455&password=not_real_pass&realfolder=0&fields=filename,downloads,size 

Надеюсь, вы увидите, что я пытаюсь сделать здесь: P Это, вероятно, глупая ошибка, которую я не могу найти или логическую ошибку.

Заранее спасибо.

ответ

1

Вы должны иметь:

$newUrl = $this->baseUrl; 

Вы должны использовать $this, чтобы обратиться к членам этого класса внутри этого класса. Также не используйте var для объявления участников. Это PHP4 и (afaik) устарели. Вместо того, чтобы использовать private (и т.д.

Наконец, ваш цикл для создания параметров может быть значительно упрощена, и логика не является правильным для того, что вы хотите достичь Попробуйте:.

class RS { 
    private $baseUrl = 'http://api.rapidshare.com/cgi-bin/rsapi.cgi?'; 

    function apiCall($params) { 
    $newUrl = $this->baseUrl; 
    foreach ($params as $k => $v) { 
     $newUrl .= urlencode($k) . '=' . urlencode($v) . '&'; 
    } 
    return $newUrl; 
    } 
} 

Или, еще лучше, использование http_build_query():

class RS { 
    private $baseUrl = 'http://api.rapidshare.com/cgi-bin/rsapi.cgi?'; 

    function apiCall($params) { 
    return $this->baseUrl . http_build_query($params); 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^