今日のテーマは、管理人が長年悩んできたこと。たぶん、管理人より初心者の方は、絶対に悩むことだと思いますので記事にしておきます。
google広告
バリューコマース、じゃらんapiの画像urlが取得できない
以前、ご紹介した楽天トラベルさんのようにapiデータを提供してくださるのは大変ありがたいです。その一つに、バリューコマースさんがあります。管理人は自分の運営しているサイトで、じゃらんさんのデータをバリューコマースさん経由で取得しているものがあります。
ところが、この方法でホテルデータを取得した時、管理人の力量ではホテルの画像urlデータを取得することができませんでした。というのも、xmlの構造が以下のようになっていたから。
<item> <vchotel> <vcimages> <vcimage class="small" width="" height=""> <vcimage class="free" width="210" height="157"> http://www.jalan.net/jalan/images/pictM/9/00229/00229908.jpg </vcimage> <vcimage class="large" width="" height=""> </vcimage></vcimage></vcimages> </vchotel> </item>
具体的には上記のとおり。:(コロンはリプレイスしますので割愛)item->vchotel->vcimages->vcimage
とやって画像のurlを表示させたいんですが、この中には、classという言葉にsmall,large,freeとラベルをつけて3つのデータがあります。普通に上記のように
echo (item-&gt;vchotel-&gt;vcimages-&gt;vcimage)
としても何も表示されません。。。ほかのデータも出してみると、どうもclassというところに、freeという言葉が書いてあるvcimageのみに、urlデータがあるようです。
覚えておきたいxmlのキーワード「属性」
<vc:image class="large" width="" height="">
いろいろ調べてみると、xmlの中上記のような変な形? <>の中にあるデータを「属性」と呼ぶそうです。(参考:XML用語事典 [属性])
・・・となると、この問題はこう言いかえることができそうです。
属性で指定されたxmlデータをphpでどう取り出すか?
っで、いろいろ検索してみて。。。
PHP: 基本的な SimpleXML の使用法 – Manual
このページのおかげでとりあえず解決することができました。(「例5 属性を使用する」の部分)
画像を表示するサンプル
簡単なサンプルを作ってみました。
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <!--?php $url="http://ws.valuecommerce.ne.jp/travel/search?token=(あなたのapiキー)&serve_type=1&lat=35.681382&lng=139.766084&radius=800&results_per_page=10&page=1&sort_by=$sortby"; $hoteldata = file_get_contents($url); $hoteldata = str_replace('vc:','vc',$hoteldata); $xml = simplexml_load_string ($hoteldata); $hits=$xml--->channel-&gt;item; ?&gt; <!--?php foreach ($hits as $hit) : ?--> <img src="&lt;?php&#10; foreach ($hit-&gt;vchotel-&gt;vcimages-&gt;vcimageSet-&gt;vcimage as $vcimage) :&lt;br /&gt;&#10; switch((string) $vcimage['class']) { // classの中の要素freeの値を取り出す&lt;br /&gt;&#10; case 'free':&lt;br /&gt;&#10; echo $vcimage;&lt;br /&gt;&#10; break;&lt;br /&gt;&#10; }&lt;br /&gt;&#10; endforeach;&lt;br /&gt;&#10; ;&lt;br /&gt;&#10;?&gt;">:<span class="b"><!--?php echo ($hit--->title); ?&gt;</span> <!--?php endforeach; ?-->
表示は以下のようになります。apiキーさえ入力すれば使えるので、良かったら試してみてください
バリューコマースapiと言えば、もう一つの難問
バリューコマースのapiは、ちょっと他と仕様が変わっている気がします。「じゃらん」もそうですが、yahooショッピングの画像を取り出すのも大変です。次回の記事では、これを取り出す方法についてご紹介します。