0

我正在使用 Deezer API

$xml = simplexml_load_file('http://api.deezer.com/2.0//search/artist/?q=eminem&index=0&nb_items=1&output=xml');

var_dump($xml);

$xml = simplexml_load_file('http://api.deezer.com/2.0/artist/393/top/&output=xml');

var_dump($xml);

第一个调用在我的本地机器(Mac PHP 5.3.15)和在线梦想主机服务器(PHP 5.3.13)上的工作方式相同,第二个调用在我的本地机器上工作,报告所有 5 个轨道对象,但不是在线,我刚刚得到

object(SimpleXMLElement)#4 (2) { 
 ["data"]=> object(SimpleXMLElement)#1 (0) { } 
 ["total"]=> object(SimpleXMLElement)#3 (0) { } 
}

在我看来很奇怪,你有什么线索吗?

谢谢

4

3 回答 3

2

Deezer 为艺术家请求使用地理定位。

因此,例如,如果您的服务器位于美国,则第一个请求在本地和在线之间具有相同的结果,但第二个请求(http://api.deezer.com/2.0/artist/393/top/&output=xml)本地/在线没有相同的结果。

向 FR Ip 请求:

<?xml version="1.0" encoding="utf-8"?><root><data><track><id><![CDATA[2114267]]></id><readable><![CDATA[1]]></readable><title><![CDATA[My Life]]></title><link><![CDATA[http://www.deezer.com/track/2114267]]></link><duration><![CDATA[321]]></duration><rank><![CDATA[674751]]></rank><preview><![CDATA[http://cdn-preview-2.deezer.com/stream/2ecb4b24f51cdbfdaea89630f1978529-0.mp3]]></preview><artist><id><![CDATA[393]]></id><name><![CDATA[The Game]]></name></artist><type><![CDATA[track]]></type></track><track><id><![CDATA[2307182]]></id><readable><![CDATA[1]]></readable><title><![CDATA[Hate It Or Love It]]></title><link><![CDATA[http://www.deezer.com/track/2307182]]></link><duration><![CDATA[207]]></duration><rank><![CDATA[654207]]></rank><preview><![CDATA[http://cdn-preview-3.deezer.com/stream/393350005d03712abc9adfbe2bcfe2d3-0.mp3]]></preview><artist><id><![CDATA[393]]></id><name><![CDATA[The Game]]></name></artist><type><![CDATA[track]]></type></track><track><id><![CDATA[2294433]]></id><readable><![CDATA[1]]></readable><title><![CDATA[How We Do]]></title><link><![CDATA[http://www.deezer.com/track/2294433]]></link><duration><![CDATA[235]]></duration><rank><![CDATA[610398]]></rank><preview><![CDATA[http://cdn-preview-c.deezer.com/stream/c3683a1fc1899c9d1b128b222d0e080f-1.mp3]]></preview><artist><id><![CDATA[393]]></id><name><![CDATA[The Game]]></name></artist><type><![CDATA[track]]></type></track><track><id><![CDATA[62751648]]></id><readable><![CDATA[1]]></readable><title><![CDATA[Ali Bomaye]]></title><link><![CDATA[http://www.deezer.com/track/62751648]]></link><duration><![CDATA[373]]></duration><rank><![CDATA[571988]]></rank><preview><![CDATA[http://cdn-preview-1.deezer.com/stream/1bb2606c722235eeecb2b1caa039f5c1-0.mp3]]></preview><artist><id><![CDATA[393]]></id><name><![CDATA[The Game]]></name></artist><type><![CDATA[track]]></type></track><track><id><![CDATA[61571949]]></id><readable><![CDATA[1]]></readable><title><![CDATA[Celebration]]></title><link><![CDATA[http://www.deezer.com/track/61571949]]></link><duration><![CDATA[290]]></duration><rank><![CDATA[559639]]></rank><preview><![CDATA[http://cdn-preview-f.deezer.com/stream/f1f535359bd60ce3ec77d59fcfda4ebd-1.mp3]]></preview><artist><id><![CDATA[393]]></id><name><![CDATA[The Game]]></name></artist><type><![CDATA[track]]></type></track></data><total><![CDATA[5]]></total></root>

与美国位置相同的请求:

<?xml version="1.0" encoding="utf-8"?><root><data></data><total><![CDATA[0]]></total></root>

完成答案。您可以使用位于非受限国家/地区的用户的 access_token 更改请求的地理位置(并从美国服务器获得结果),因为当您使用 access_token 请求 deezer api 时,api 将使用用户国家而不是服务器国家。

从用户获取访问令牌:http: //developers.deezer.com/api/oauth

当您想使用用户地理位置添加此内容时,请不要忘记每个请求:

?access_token=XXXXX

编辑:我是 deezer 团队的一员。

于 2013-05-11T07:09:23.493 回答
1

如果你想通过 http 协议访问 xml,你需要在 php.ini 中设置 allow_url_fopen ON 或者

ini_set('allow_url_fopen ','ON');

在你的代码中。或者,如果您使用的是 php 版本 <5,您也可以这样做

$temp = file_get_contents($url);
 $XmlObj = simplexml_load_string($temp); 
于 2013-04-03T11:47:01.567 回答
0

尝试:

$xml = simplexml_load_file('http://api.deezer.com/2.0/artist/393/top/?output=xml');

(即把'&'改成'?')

这可能是也可能不是问题。

于 2013-04-03T11:47:26.900 回答