バリューコマースapi、じゃらんの画像を取得する

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


google広告

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

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

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

jarangazoushutoku001

<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=""/>
  </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 属性を使用する」の部分)

画像を表示するサンプル

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

<html>
<head>
<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->item;
?>
</head>
<body>
<?php foreach ($hits as $hit) : ?>
<img src="<?php
 foreach ($hit->vchotel->vcimages->vcimageSet->vcimage as $vcimage) :
    switch((string) $vcimage['class']) { // classの中の要素freeの値を取り出す
    case 'free':
        echo $vcimage;
        break;
    }
 endforeach;
 ; 
?>" />:<span class="b"><?php echo ($hit->title); ?></span><br />
<?php  endforeach; ?>
</body>
</html>

表示は以下のようになります。apiキーさえ入力すれば使えるので、良かったら試してみてください

sample001

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

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

google広告

コメントを残す

*

このページの先頭へ