Возникли проблемы при настройке вызова API с использованием массива параметров - PullRequest
1 голос
/ 03 апреля 2010

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

$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 Ответ

1 голос
/ 03 апреля 2010

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

$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);
  }
}
...