じゃらん Web サービス 都道府県
大エリア
小エリア
 50音順で 件目から
じゃらんAPIの詳細
非常にシンプルなつくりですが、じゃらんAPIを利用して、じゃらんの宿をGoogle上に表示するサンプルです。 GoogleMapに表示するために、じゃらんから提供される、緯度経度を変換する必要がありますが、その変換部分をサーバーサイドでおこなっています。また、JSONで出力することで、Ajaxとして使いやすくしてみました。
以下のソースを参考にしてください。
http://jalan.tatamilab.jp/map/hotel_search.cgiのソース
#!/usr/bin/perl -w


#じゃらん宿表示API活用サンプル
#XMLをJSONに変換
#じゃらんの緯度経度をGoogleでそのままつかえる緯度経度に変換
#
#フナミタカオ@たたみラボ
#2006/06/16 初版リリース
#2006/06/22 Kmlへのコンバージョン追加

#このソースは、コピー改変していただいてかまいません。どうぞ、じゃらん宿表示APIをご活用ください。
#じゃらん宿表示APIの詳細は http://jws.jalan.net/ws/viw/U01001

use strict;
use utf8;
use LWP::Simple;
use XML::Simple;
$XML::Simple::PREFERRED_PARSER = 'XML::Parser';
use JSON;
use CGI::Carp qw(fatalsToBrowser);
use Location::GeoTool;	#ココギコさんのGeoToolを使わせていただいています。
#http://www.annocpan.org/~KOKOGIKO/Location-GeoTool-1.98/lib/Location/GeoTool/Japanese.pod


my $xs = XML::Simple->new();

#QUERY_STRINGを取得
my $query_string = $ENV{'QUERY_STRING'};
if (!$query_string ){
	$query_string = "key=guest&pref=010000&l_area=012900&s_area=012911&start=1&count=1";
	$query_string = "key=guest&pref=&l_area=&s_area=&start=1&count=1";

}

#じゃらんからデータを取得
my $url = "http://jws.jalan.net/APILite/HotelSearch/V1/?pict_size=1&$query_string";
my $res = get($url);
my $resRef;
if($res){
	$resRef = $xs->XMLin($res,ForceArray => ['Hotel']);
	$resRef->{request_url} = $url;
	
	#必要な情報を用いて、再構築、座標系の変換もここで行う。
	#じゃらんは、測地系:日本、単位:ミリ秒(非常に目面しいですねえ...)
	#Googleは  測地系:世界、単位:度
	foreach my $hotel (@{$resRef->{Hotel}}){
		if ($hotel->{Y} == 999999999 || $hotel->{X} == 999999999){
			($hotel->{lat},$hotel->{lng}) = (-1,-1);
		}else{
			my $obj = Location::GeoTool->create_coord($hotel->{Y}/1000,$hotel->{X}/1000,'tokyo','second');
			 ($hotel->{lat},$hotel->{lng}) = $obj->datum_wgs84->format_degree->array;
		}
	}
}else{
	$resRef->{request_url} = $url;
	
}
	
#JSONで戻す
if($query_string =~ /JSON=/){
	my $resJs = objToJson($resRef);
	utf8::encode($resJs);
	print "Content-Type: text/javascript; charset=utf-8\n\n";
	print $resJs."\n";
}elsif($query_string =~ /KML=/){
	#KMLへコンバージョン
	my $kmlRef = {Folder=>{Placemark => []}};
	my $folder = $kmlRef->{Folder};
	$folder->{name} = "jalan API -> KML Sample";
	$folder->{description} = "jalan API to KML";
	foreach my $hotel (@{$resRef->{Hotel}}){
		next if ($hotel->{lat} == -1);
		my $imgtag = ''.$hotel->{PictureCaption}.'' if ($hotel->{PictureURL});
		my $Placemark = 
			{
				description => ''.$hotel->{HotelCatchCopy}.'
'.$hotel->{HotelCaption}.'
'.$hotel->{HotelAddress}.'
じゃらんで詳細を見る
]]>', name => $hotel->{HotelName}, LookAt => { longitude => $hotel->{lng}, latitude => $hotel->{lat}, range => 0, tilt => 0, }, Point => { coordinates => $hotel->{lng}.','.$hotel->{lat}, } }; push(@{$folder->{Placemark}},$Placemark); } my $xml = $xs->XMLout($kmlRef,NoAttr=>1,RootName=>'kml'); print "Content-Type: text/kml; charset=utf-8\n"; print "Content-Disposition: attachment; filename=\"yado.kml\"\n\n"; my $head = qq(\n); $xml = $head . $xml; print qq(\x{ef}\x{bb}\x{bf}); #一応BOMを書いてみる print $xml; }else{ my $xml = $xs->XMLout($resRef,NoAttr=>1,RootName=>'Results'); print "Content-Type: text/xml; charset=utf-8\n\n"; my $head = qq(\n); $xml = $head . $xml; print $xml; }

フナミタカオ@たたみラボ