楽天トラベル施設検索API 位置範囲検索サンプルコード

楽天トラベル施設検索API 位置範囲検索のサンプルコードです。
当ホームページでは、PHP5を使用しています。PHP5が使用できない環境の方は、こちらのエックスサーバーをご検討下さい。当ホームページでも使用しているおすすめのサーバーです。

位置範囲検索サンプルコード

長野県 上諏訪駅から半径3km以内の宿を表示するサンプルコードです。
サンプルコードの実行結果
検索条件を変えるには、各パラメータを指定して下さい。→ リクエストの作成へ

★★にはデベロッパー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
$lat = 36.046757;
$lng = 138.116461;
$radius = 3;
$base = 'http://api.rakuten.co.jp/rws/1.12/rest?developerId=★★';
$affiliateId = '&affiliateId=◆◆';
$operation = '&operation=SimpleHotelSearch&version=2008-11-13';
$latitude = '&latitude=' .$lat;
$longitude = '&longitude=' .$lng;
$searchRadius = '&searchRadius=' .$radius;
$datumType = '&datumType=1';
$file = $base .$affiliateId .$operation .$latitude .$longitude
 .$searchRadius .$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部分のみ)

プログラム 説明
$lat = 36.046757;
$lng = 138.116461;
検索する位置(緯度、経度)を変数に指定
今回は、世界測地系で単位は度
(日本測地系の場合は、以降の&datumTypeを2に指定する。単位は秒)
$radius = 3; 検索する位置からの範囲(半径)kmを変数に指定(値は0.1~3.0)
$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名とバージョンの指定
$latitude = '&latitude=' .$lat;
$longitude = '&longitude=' .$lng;
$searchRadius = '&searchRadius=' .$radius;
緯度、経度、半径のクエリ部分の作成
$datumType = "&datumType=1"; 世界測地系を指定。日本測地系の場合は、datumType=2にする。
$file = $base .$affiliateId .$operation .$latitude .$longitude .$searchRadius .$datumType; クエリをつなげて、リクエスト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);
ホームページ WEBサービス API PHP プログラミング