楽天トラベル施設検索API エリア検索サンプルコード
楽天トラベル施設検索API エリア検索のサンプルコードです。
当ホームページでは、PHP5を使用しています。PHP5が使用できない環境の方は、こちらのエックスサーバーをご検討下さい。当ホームページでも使用しているおすすめのサーバーです。
エリア検索サンプルコード
長野県 白樺湖・車山・蓼科・霧ヶ峰エリアの宿を表示するサンプルコードです。
サンプルコードの実行結果
検索条件を変えるには、各パラメータを指定して下さい。→ リクエストの作成へ
★★にはデベロッパーIDを、◆◆には、アフィリエイトIDを入れて下さい。
詳しくは、デベロッパーID、アフィリエイトIDを参照下さい。
一部スタイルシートを使用しています。スタイルシートの本
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Style-Type" content="text/css">
<title>楽天トラベル施設検索API エリア検索サンプル</title>
<style type="text/css">
<!--
img {
border: none;
}
table {
margin: 10px;
border-top: 1px solid gray;
border-left: 1px solid gray;
}
table td {
padding: 5px;
border-right: 1px solid gray;
border-bottom: 1px solid gray;
}
.image {
width: 160px;
text-align: center;
}
//-->
</style>
</head>
<body>
<?php
$base = 'http://api.rakuten.co.jp/rws/1.12/rest?developerId=★★';
$affiliateId = '&affiliateId=◆◆';
$operation = '&operation=SimpleHotelSearch&version=2008-11-13';
$largeClassCode = '&largeClassCode=japan';
$middleClassCode = '&middleClassCode=nagano';
$smallClassCode = '&smallClassCode=kirigamine';
$ClassCode = $largeClassCode .$middleClassCode .$smallClassCode;
$datumType = '&datumType=1';
$file = $base .$affiliateId .$operation .$ClassCode .$datumType;
$data = file_get_contents($file);
$data = str_replace('simpleHotelSearch:SimpleHotelSearch',
'simpleHotelSearch', $data);
$xml = simplexml_load_string($data);
foreach($xml->Body->simpleHotelSearch->hotel as $hotel){
$hotelName = $hotel->hotelName;
$hotelSpecial = $hotel->hotelSpecial;
$address1 = $hotel->address1;
$address2 = $hotel->address2;
$access = $hotel->access;
$hotelImageUrl = $hotel->hotelImageUrl;
$hotelAffiliateUrl = $hotel->hotelAffiliateUrl;
print <<< page
<table width="80%" cellspacing="0" cellpadding="0">
<tr>
<td class="image" rowspan="2">
<a href="{$hotelAffiliateUrl}" target="_blank">
<img src="{$hotelImageUrl}" width="150"></a>
</td>
<td>
<a href="{$hotelAffiliateUrl}" target="_blank"><strong>{$hotelName}</strong></a>
</td>
</tr>
<tr>
<td>
{$hotelSpecial}<br><br>住所:{$address1}{$address2}<br>アクセス:{$access}
</td>
</tr>
</table>
page;
}
?>
<!-- Rakuten Web Services Attribution Snippet FROM HERE -->
<a href="http://webservice.rakuten.co.jp/" target="_blank">
Supported by 楽天ウェブサービス</a>
<!-- Rakuten Web Services Attribution Snippet TO HERE -->
</body>
</html>
サンプルコードの説明(PHP部分のみ)
プログラム | 説明 |
---|---|
$base = 'http://api.rakuten.co.jp/rws/1.12/rest?developerId=★★'; | 基本URL+デベロッパーID |
$affiliateId = '&affiliateId=◆◆'; | ◆◆にアフィリエイトidを入れて、アフィリエイトidを指定する |
$operation = "&operation=SimpleHotelSearch&version=2008-11-13"; | API名とバージョンの指定 |
$largeClassCode = "&largeClassCode=japan"; $middleClassCode = "&middleClassCode=nagano"; $smallClassCode = "&smallClassCode=kirigamine"; $ClassCode = $largeClassCode .$middleClassCode .$smallClassCode; |
エリア区分の指定。最後で変数$ClassCodeにまとめている。 |
$datumType = "&datumType=1"; | 施設の緯度と経度を世界測地系で得るために指定。緯度と経度を使用しなければ特に関係ない。datumType=2にすると日本測地系が得られる。 |
$file = $base .$affiliateId .$operation .$keyword .$hits .$page .$sort; | クエリをつなげて、リクエストURLを作成する |
$data = file_get_contents($file); $data = str_replace ('simpleHotelSearch:SimpleHotelSearch', 'simpleHotelSearch', $data); |
フィールド名に「:」があるとパースできない。したがって、「simpleHotelSearch:SimpleHotelSearch」を「simpleHotelSearch」に変換している。 |
$xml = simplexml_load_string($data); | XMLを$xmlに代入する。 |
foreach($xml->Body->simpleHotelSearch ->hotel as $hotel){ |
hotelを変数$hotelに代入する。hotel分繰り返す。 |
$hotelName = $hotel->hotelName;他 | hotelNameを$hotelNameに代入する。hotelSpecial以下同様 |
print <<< page ~ page; | XMLから抜き出したデータを表示する |
<!-- Rakuten Web Services Attribution Snippet FROM HERE ---->以下 | クレジット表示(必須) |
フィールド名に「:」があると、パースできません
楽天トラベル施設検索APIに限らず、フィールド名に「:」があるとパースすることができません。名前空間とか何とからしいですが・・・。
そこでfile_get_contents()でファイル内容を取得し、str_replace()で「:」のある部分「simpleHotelSearch:SimpleHotelSearch」を「simpleHotelSearch」に置換しています。simplexml_load_stringであるところに注意!
$data = file_get_contents($file); $data = str_replace('simpleHotelSearch:SimpleHotelSearch', 'simpleHotelSearch', $data); $xml = simplexml_load_string($data);