楽天APIの結果がsimplexml_load_fileで取得できない
楽天APIでは、以下のサイト仕様に従いリクエストを投げることで、xml形式で商品情報を取得することができます。
楽天 WEB SERVICE
このAPIを利用しようと、PHPでプログラムを組んだのですが、うまく情報を取得できません。
PHPでXML形式のデータを取得するとなると、関数simplexml_load_fileを使えばよいはずですが。
例えばこのように取得します。
$res = simplexml_load_file('http://api.rakuten.co.jp/rws/3.0/rest?[パラメータたち]');
しかし、取得した結果を出力してみてもデータは空です。
print_r($res);
SimpleXMLElement Object ( [Body] => SimpleXMLElement Object ( ) )
原因を調査したところ、楽天APIから帰ってくるXMLのレスポンスに、関数simplexml_load_fileが解析できない文字列が含まれているようです。
例えば、楽天商品ランキングAPIでは、その取得結果に含まれる文字列「itemRanking:ItemRanking」のコロン「:」が問題のようです。
そこで、一度、レスポンスのデータを生の状態で取得し、問題となる文字列を置換した後に関数simplexml_load_stringで解析すると正常に取得できます。
$res = file_get_contents('http://api.rakuten.co.jp/rws/3.0/rest?[パラメータたち]'); $res = str_replace('itemRanking:ItemRanking', 'itemRanking', $res); $res = simplexml_load_string($res);
他のAPIも同様に、一度生のレスポンスを確認してみて、コロン「:」が含まれる部分を文字列置換してあげることで問題を回避できます。
コメントする