今日のテーマは、管理人が長年悩んできたこと。たぶん、管理人より初心者の方は、絶対に悩むことだと思いますので記事にしておきます。


google広告

バリューコマース、じゃらんapiの画像urlが取得できない

以前、ご紹介した楽天トラベルさんのようにapiデータを提供してくださるのは大変ありがたいです。その一つに、バリューコマースさんがあります。管理人は自分の運営しているサイトで、じゃらんさんのデータをバリューコマースさん経由で取得しているものがあります。

ところが、この方法でホテルデータを取得した時、管理人の力量ではホテルの画像urlデータを取得することができませんでした。というのも、xmlの構造が以下のようになっていたから。
バリューコマースapi、じゃらんの画像を取得

<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->vchotel->vcimages->vcimage)

としても何も表示されません。。。ほかのデータも出してみると、どうもclassというところに、freeという言葉が書いてあるvcimageのみに、urlデータがあるようです。

覚えておきたいxmlのキーワード「属性」

<vc:image class="large" width="" height="">

いろいろ調べてみると、xmlの中上記のような変な形? <>の中にあるデータを「属性」と呼ぶそうです。(参考:XML用語事典 [属性]

・・・となると、この問題はこう言いかえることができそうです。

属性で指定されたxmlデータをphpでどう取り出すか?

っで、いろいろ検索してみて。。。

PHP: 基本的な SimpleXML の使用法 – Manual

このページのおかげでとりあえず解決することができました。(「例5 属性を使用する」の部分)

画像を表示するサンプル

簡単なサンプルを作ってみました。



&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot;&gt;
&lt;!--?php
$url=&quot;http://ws.valuecommerce.ne.jp/travel/search?token=(あなたのapiキー)&amp;serve_type=1&amp;lat=35.681382&amp;lng=139.766084&amp;radius=800&amp;results_per_page=10&amp;page=1&amp;sort_by=$sortby&quot;;
$hoteldata = file_get_contents($url);
$hoteldata = str_replace('vc:','vc',$hoteldata);
$xml = simplexml_load_string ($hoteldata);
$hits=$xml---&gt;channel-&amp;gt;item;
?&amp;gt;


&lt;!--?php foreach ($hits as $hit) : ?--&gt;
&lt;img src=&quot;&amp;lt;?php&amp;#10; foreach ($hit-&amp;gt;vchotel-&amp;gt;vcimages-&amp;gt;vcimageSet-&amp;gt;vcimage as $vcimage) :&amp;lt;br /&amp;gt;&amp;#10;    switch((string) $vcimage['class']) { // classの中の要素freeの値を取り出す&amp;lt;br /&amp;gt;&amp;#10;    case 'free':&amp;lt;br /&amp;gt;&amp;#10;        echo $vcimage;&amp;lt;br /&amp;gt;&amp;#10;        break;&amp;lt;br /&amp;gt;&amp;#10;    }&amp;lt;br /&amp;gt;&amp;#10; endforeach;&amp;lt;br /&amp;gt;&amp;#10; ;&amp;lt;br /&amp;gt;&amp;#10;?&amp;gt;&quot;&gt;:&lt;span class=&quot;b&quot;&gt;&lt;!--?php echo ($hit---&gt;title); ?&amp;gt;&lt;/span&gt;
&lt;!--?php  endforeach; ?--&gt;


表示は以下のようになります。apiキーさえ入力すれば使えるので、良かったら試してみてください
バリューコマースapi、じゃらんの画像を取得

バリューコマースapiと言えば、もう一つの難問

バリューコマースのapiは、ちょっと他と仕様が変わっている気がします。「じゃらん」もそうですが、yahooショッピングの画像を取り出すのも大変です。次回の記事では、これを取り出す方法についてご紹介します。

広告