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) の両方で同じように機能し、2 番目の呼び出しはローカル マシンで機能し、5 つのトラック オブジェクトすべてを報告します。しかし、オンラインではありません。

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

とても奇妙に思えますが、手がかりはありますか?

ありがとう

4

3 に答える 3

2

Deezer は、アーティスト リクエストに地理位置情報を使用します。

たとえば、サーバーが米国にある場合、最初のリクエストはローカルとオンラインで同じ結果になりますが、2 番目のリクエストは同じ結果になります ( 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 を使用して deezer API をリクエストすると、API はサーバーの国ではなくユーザーの国を使用するため、制限されていない国にいるユーザーの access_token を使用して、リクエストの地理位置情報を変更できます (および米国サーバーからの結果が得られます)。

ユーザーからアクセス トークンを取得するには: 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 に答える