スマートフォンやhtml5+CSS3など新技術に四苦八苦。jQuery、AjaxなどJavaScriptも難しいですね。そんなWebに悩む人のネタ帳です。

楽天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も同様に、一度生のレスポンスを確認してみて、コロン「:」が含まれる部分を文字列置換してあげることで問題を回避できます。

このエントリーをはてなブックマークに追加

Comment

Comment Form

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Monthly Archives

Search