0

我正在尝试使用 Codeigniter 从 last.fm 获取一些信息。

$this->load->library("xmlrpc");
$this->xmlrpc->server("http://ws.audioscrobbler.com/2.0/", 80);
$this->xmlrpc->method("user.getrecenttracks");
$request = array("rj", "b25b959554ed76058ac220b7b2e0a026");
$this->xmlrpc->request($request);
if(!$this->xmlrpc->send_request())
{
    echo $this->xmlrpc->display_error();
}

我总是得到的唯一响应是:无效参数 - 您的请求缺少必需的参数

它尝试了请求数组的一些变化,但它根本不像我处理它的方式工作......

4

1 回答 1

2

你很近。$request实际上应该这样写:

$request = array(
                 array(
                       array(
                             'user'=>'rj', 
                             'api_key'=>'b25b959554ed76058ac220b7b2e0a026'
                            ),
                       'struct'
                      )
                );

CodeIgniter 的 XML-RPC 类构造的实际请求将如下所示:

<?xml version="1.0"?>
<methodCall>
    <methodName>user.getrecenttracks</methodName>
    <params>
        <param>
            <value>
                <struct>
                    <member>
                        <name>user</name>
                        <value>
                            <string>rj</string>
                        </value>
                    </member>
                    <member>
                        <name>api_key</name>
                        <value>
                            <string>b25b959554ed76058ac220b7b2e0a026</string>
                        </value>
                    </member>
                </struct>
            </value>
        </param>
    </params>
</methodCall>

您可以在此处查看 Last.fm XML-RPC 请求示例。请注意,您应该“使用第一个参数节点中的结构将参数作为命名参数发送”。牢记这一点,CodeIgniter 文档指出:

如果您使用字符串以外的数据类型,或者如果您有几种不同的数据类型,您会将每个参数放入其自己的数组中,数据类型位于第二个位置。

希望有帮助。

于 2011-02-01T02:11:33.660 回答