【问题标题】:Having trouble setting up API call using array of parameters使用参数数组设置 API 调用时遇到问题
【发布时间】:2011-02-03 22:10:10
【问题描述】:

我正在构建一个类来向 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 这可能是一个我没有找到的愚蠢错误或一个逻辑错误。

提前致谢。

【问题讨论】:

    标签: php api get call rapidshare


    【解决方案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);
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-11
      • 1970-01-01
      • 2018-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-09
      • 2011-10-15
      相关资源
      最近更新 更多