サーバのphpが5になったってことはxmlが扱いやすくなったんだっけ?というわけで楽天の商品検索APIをさわってみました。
php5なんだから simplexml_load_file を使ってみようと調べてみたら、それってずるいんじゃね?ってぐらい簡単。呼び出すだけ。
でも、なぜかちゃんと読み込まれません。中身を吐き出させてみると、空。いろいろググってみたら、名前空間がどうのこうので、つまりタグ(?)の中に:(コロン)があるとうまく動かないとのこと。というわけでメモ。見つけた解決策はこう。
$addr = '目的のアドレス';
$tmpData = file_get_contents($addr);
$tmpData = str_replace('header:Header', 'Header', $tmpData);
$tmpData = str_replace('itemSearch:ItemSearch', 'ItemSearch', $tmpData);
$xml = simplexml_load_string($tmpData);
とりあえず持ってきて、引っかかる部分を置き換えて、読み込ませる、ということらしいです。商品検索API以外の場合は2つめの置換、ItemSearch のところが変わります。たぶん。
あと引っかかったのが、直接xmlを読む場合は simplexml_load_file ですが、この場合は simplexml_load_string になってます。これ見落として30分ぐらい…。:oops:
調べてる途中でわかったんですが、どうやら途中の仕様変更でこうなったそうです。どおりで解説ページとかでもスルーされてるはずです。試してみると2007-02-14までのバージョンでAPIから取り出すと大丈夫でした。ちなみにxmlとしては問題なくてsimpleXMLの変な動きが原因なのだとか。
というわけでそのうちなんか公開するかも。そのまえに以前作ったAmazon用のを改造してもっと使いやすくするのが先?
追記
simpleXML でもちゃんと名前空間付きの xml (って表現でいいのか分からんけど)を扱う方法は用意されているらしいです。
.☆★ ステレオタイプラボ ★☆. [php]simplexml_load_fileでうまくパース出来ない、なんて事はない。& 正解とお手軽方法
SimpleXMLで名前空間付きタグの一覧を取得する – 肉とご飯と甘いもの @ sotarok
Children なんてのを使うらしいですが…ワタシにはよく分かりません。:oops:
物事はなんでもキッチリ処理しないと気持ちが悪い、落ち着かない、イライラするッ!という方は是非お試し下さい。
“楽天 API と simplexml_load_file” への12件のフィードバック
うわー ありがとうございます!
どうしてもうまくいかなくて色々方法を変えてトライ&エラーでやってました。
半日悩んで、このブログにたどり着きました。
今、この方法で無事に動作しました!
本当に助かりましたm(_ _)m
コメントありがとうございます。
お役に立てたようで何よりです。 😀
自分も同じところでつまっておりました。。
1週間くらいハマりそうな予感がしていたのですが、
この記事を読んですぐに解決することができました。
本当にありがとうございます!
コメントありがとうございます。
解決の手がかりになれたのなら良かったです。 😀
😛 悩んで先に進めなかった部分が解決しました。
ありがとうございました。
私は、楽天BooksAPIだったので、文字列置換が異なっていました。
変更したら、読み込めましたが、ネスト(?)の部分で、また躓きましたが、やっと自己解決しました
コメントありがとうございます。
お役に立てたようでうれしい限りです。:grin:
ありがとございます!
参考になりました
どういたしまして!
コメントを残していただきありがとうございます。
同じ部分で躓いてハマってました。
解決しとても参考になりました!
ありがとうございます!
参考になってよかったです。
コメントありがとうございます!
[…] ここのサイトを見て、解決しました。 ⇒楽天 API と simplexml_load_file […]
[…] 以下のページが参考になりました。 楽天 API と simplexml_load_file : やおよろグッ! […]