
前回は、楽天WEBサービスを使ったサイトを作ってみましたが、第2弾として、カーセンサーラボのウェブサービスを使ってサイトを作ろうと思います。
まだ、WEBサービスを使ったサイト作りに挑戦して1ヶ月も経ってないし、それほど数を作ったわけでもないけど、現段階の感想としては、どんなWEBサービスでも、ほとんどやり方は同じだという感じがします。
リクエストURLを作って、それにアクセスし、返ってくるXMLデータを加工してページを作ればいいだけです。
これからは、自分の実力アップのためと、同じようなことを考えている人のために、コードを公開していこうと思います。
とりあえず、テストとして、本当にカーセンサーラボのウェブサービスが使えるのかを試すために、簡単なものを作ってみました。車種のカタログデータを取得することができるみたいなので、ベンツのカタログリストを5件取得して、画像を表示させるプログラムです。
#! /usr/bin/perl -w
use strict;
use LWP::Simple;
use XML::Simple;
use Data::Dumper;
# リクエストURLとキーワードの設定
my $request_url = 'http://www.carsensorlab.net/webapi/V2/catalogSearch/?brand=';
my $brand_name = 'ベンツ';
my $count = '5'; # 1ページに表示する件数
my $count_url = "&count=$count"; # リクエストURLに追加する変数
# キーワードをunicodeに変換
$brand_name =~ s/([^\w ])/'%' . unpack('H2', $1)/eg;
$brand_name =~ tr/ /+/;
# リクエストURLの完成形
my $url = $request_url . $brand_name . $count_url; # 完成形リクエストURL
# レスポンスの取得
my $response = LWP::Simple::get($url) or die ("Can't get data from $url: $!");
my $parser = XML::Simple->new;
my $data = $parser->XMLin ($response);
# サーバー出力
print "Content-type: text/html; charset=utf-8\n\n";
print Dumper ($data);
print Dumper ($data->{'CatalogCar'}->[0]->{'ImageFrontUrl'});
print "ヒット数:$data->{'TotalCount'}件\n";
for (0..$count) {
if (!$data->{'CatalogCar'}->[$_]->{'ImageFrontUrl'}) {
next;
}
else {
print "<img src=\"$data->{'CatalogCar'}->[$_]->{'ImageFrontUrl'}\" />\n";
}
}
実際にCGIとして使う時には、削除するかコメントで無効化するのですが、データ構造を確認するために、最後の方にあるにある「print Dumper ($data);」で取得したXMLデータをパースしたものを表示させます。
Data::Dumperモジュールを使うと簡単に、データ構造を確認することができます。
見てみると、以下のようなデータ構造になっていることがわかります。
$VAR1 = {
'CatalogCar' => [
{
'BodyType' => "\x{30bb}\x{30c0}\x{30f3}",
'ImageFrontUrl' => 'http://img.carsensorlab.net/CSphoto/catalog/ME/S003/ME_S003_F001_M001_1.jpg',
'EngineCapacity' => "1995\x{ff5e}2597",
'Comment' => {},
'BodySize' => [
"4450\x{d7}1690\x{d7}1375",
"4430\x{d7}1705\x{d7}1360",
"4450\x{d7}1690\x{d7}1355"
],
'CatalogUrl' => 'http://catalog.carsensorlab.net/mercedes-benz/190_class/f001/m001/',
'Model' => "190\x{30af}\x{30e9}\x{30b9}",
'ImageInpaneUrl' => 'http://img.carsensorlab.net/CSphoto/catalog/ME/S003/ME_S003_F001_M001_2.jpg',
'CatalogMobUrl' => 'http://csmob.jp/catalog/selectGrade.php?br=ME&md=S003&fm=F001&mc=M001',
'McKey' => 'TDAWMZAWMTAWMU1F1015',
'No' => '1',
'Brand' => "\x{30e1}\x{30eb}\x{30bb}\x{30c7}\x{30b9}\x{30fb}\x{30d9}\x{30f3}\x{30c4}",
'ProductionPeriod' => "1989\x{5e74}09\x{6708} \x{ff5e} 1990\x{5e74}07\x{6708}"
},
{
'BodyType' => "\x{30bb}\x{30c0}\x{30f3}",
'ImageFrontUrl' => 'http://img.carsensorlab.net/CSphoto/catalog/ME/S003/ME_S003_F001_M002_1.jpg',
'EngineCapacity' => "1995\x{ff5e}2597",
'Comment' => {},
'BodySize' => [
"4450\x{d7}1690\x{d7}1375",
"4430\x{d7}1705\x{d7}1360",
"4450\x{d7}1690\x{d7}1355"
],
'CatalogUrl' => 'http://catalog.carsensorlab.net/mercedes-benz/190_class/f001/m002/',
'Model' => "190\x{30af}\x{30e9}\x{30b9}",
'ImageInpaneUrl' => 'http://img.carsensorlab.net/CSphoto/catalog/ME/S003/ME_S003_F001_M002_2.jpg',
'CatalogMobUrl' => 'http://csmob.jp/catalog/selectGrade.php?br=ME&md=S003&fm=F001&mc=M002',
'McKey' => 'TDAWMZAWMTAWMK1F1415',
'No' => '2',
'Brand' => "\x{30e1}\x{30eb}\x{30bb}\x{30c7}\x{30b9}\x{30fb}\x{30d9}\x{30f3}\x{30c4}",
'ProductionPeriod' => "1990\x{5e74}08\x{6708} \x{ff5e} 1991\x{5e74}07\x{6708}"
},
{
'BodyType' => "\x{30bb}\x{30c0}\x{30f3}",
'ImageFrontUrl' => 'http://img.carsensorlab.net/CSphoto/catalog/ME/S003/ME_S003_F001_M003_1.jpg',
'EngineCapacity' => "1995\x{ff5e}2597",
'Comment' => {},
'ImageRearUrl' => 'http://img.carsensorlab.net/CSphoto/catalog/ME/S003/ME_S003_F001_M003_2.jpg',
'BodySize' => [
"4450\x{d7}1690\x{d7}1375",
"4430\x{d7}1705\x{d7}1360",
"4450\x{d7}1690\x{d7}1355"
],
'CatalogUrl' => 'http://catalog.carsensorlab.net/mercedes-benz/190_class/f001/m003/',
'Model' => "190\x{30af}\x{30e9}\x{30b9}",
'ImageInpaneUrl' => 'http://img.carsensorlab.net/CSphoto/catalog/ME/S003/ME_S003_F001_M003_3.jpg',
'CatalogMobUrl' => 'http://csmob.jp/catalog/selectGrade.php?br=ME&md=S003&fm=F001&mc=M003',
'McKey' => 'TDAWMZAWMTAWM01F1015',
'No' => '3',
'Brand' => "\x{30e1}\x{30eb}\x{30bb}\x{30c7}\x{30b9}\x{30fb}\x{30d9}\x{30f3}\x{30c4}",
'ProductionPeriod' => "1991\x{5e74}08\x{6708} \x{ff5e} 1992\x{5e74}09\x{6708}"
},
{
'BodyType' => "\x{30bb}\x{30c0}\x{30f3}",
'ImageFrontUrl' => 'http://img.carsensorlab.net/CSphoto/catalog/ME/S003/ME_S003_F001_M004_1.jpg',
'EngineCapacity' => "1995\x{ff5e}2597",
'Comment' => {},
'ImageRearUrl' => 'http://img.carsensorlab.net/CSphoto/catalog/ME/S003/ME_S003_F001_M004_2.jpg',
'BodySize' => [
"4450\x{d7}1690\x{d7}1375",
"4430\x{d7}1705\x{d7}1360",
"4450\x{d7}1690\x{d7}1355"
],
'CatalogUrl' => 'http://catalog.carsensorlab.net/mercedes-benz/190_class/f001/m004/',
'Model' => "190\x{30af}\x{30e9}\x{30b9}",
'ImageInpaneUrl' => 'http://img.carsensorlab.net/CSphoto/catalog/ME/S003/ME_S003_F001_M004_3.jpg',
'CatalogMobUrl' => 'http://csmob.jp/catalog/selectGrade.php?br=ME&md=S003&fm=F001&mc=M004',
'McKey' => 'TDAWMZAWMTAWNE1F1015',
'No' => '4',
'Brand' => "\x{30e1}\x{30eb}\x{30bb}\x{30c7}\x{30b9}\x{30fb}\x{30d9}\x{30f3}\x{30c4}",
'ProductionPeriod' => "1992\x{5e74}10\x{6708} \x{ff5e} 1993\x{5e74}09\x{6708}"
},
{
'BodyType' => "\x{30cf}\x{30c3}\x{30c1}\x{30d0}\x{30c3}\x{30af}",
'ImageFrontUrl' => 'http://img.carsensorlab.net/CSphoto/catalog/ME/S030/ME_S030_F001_M001_1.jpg',
'EngineCapacity' => '1598',
'Comment' => {},
'ImageRearUrl' => 'http://img.carsensorlab.net/CSphoto/catalog/ME/S030/ME_S030_F001_M001_2.jpg',
'BodySize' => "3605\x{d7}1720\x{d7}1575",
'CatalogUrl' => 'http://catalog.carsensorlab.net/mercedes-benz/a_class/f001/m001/',
'Model' => "A\x{30af}\x{30e9}\x{30b9}",
'Color' => [
"\x{30a8}\x{30f3}\x{30d0}\x{30fc}\x{30ec}\x{30c3}\x{30c9}",
"\x{8d64}\x{8272}",
"\x{30b9}\x{30ce}\x{30fc}\x{30db}\x{30ef}\x{30a4}\x{30c8}",
"\x{767d}",
"\x{30aa}\x{30fc}\x{30b7}\x{30e3}\x{30f3}\x{30d6}\x{30eb}\x{30fc}",
"\x{9752}\x{8272}",
"\x{30b8}\x{30e3}\x{30f3}\x{30b0}\x{30eb}\x{30b0}\x{30ea}\x{30fc}\x{30f3}",
"\x{7dd1}\x{8272}",
"\x{30e1}\x{30c6}\x{30aa}\x{30b0}\x{30ec}\x{30fc}",
"\x{30b0}\x{30ec}\x{30fc}",
"\x{30e0}\x{30fc}\x{30f3}\x{30e9}\x{30a4}\x{30c8}\x{30a2}\x{30b7}\x{30eb}\x{30d0}\x{30fc}",
"\x{30b7}\x{30eb}\x{30d0}\x{30fc}"
],
'ImageInpaneUrl' => 'http://img.carsensorlab.net/CSphoto/catalog/ME/S030/ME_S030_F001_M001_3.jpg',
'CatalogMobUrl' => 'http://csmob.jp/catalog/selectGrade.php?br=ME&md=S030&fm=F001&mc=M001',
'McKey' => 'TDAZMDAWMTAWMU1F1011',
'No' => '5',
'Brand' => "\x{30e1}\x{30eb}\x{30bb}\x{30c7}\x{30b9}\x{30fb}\x{30d9}\x{30f3}\x{30c4}",
'ProductionPeriod' => "1998\x{5e74}09\x{6708} \x{ff5e} 1999\x{5e74}07\x{6708}"
}
],
'FirstPosition' => '1',
'Status' => '200',
'ResponseCount' => '5',
'TotalCount' => '251'
};
一見すると、リファレンスだらけなので、何のことかよくわからないのですが、画像を取り出すだけなら簡単にできます。画像のURLは「ImageFrontUrl」の部分の値に入っていますので、その部分まで1つずつ丁寧に矢印でデリファレンスしていけばいいわけです。
まず、$VAR1を$dataに置き換えて考えます。すぐ後にブレースがありますので、ハッシュです。
$data->{'CatalogCar'}
次に、ブラケットがありますので、配列です。この配列の部分に、車のリストが入っています。0にすれば1台目、1にすれば2台目、2にすれば3台目のデータになります。例えば、1台目のデータが欲しければ以下のようになります。
$data->{'CatalogCar'}->[0]
さらに、ブレースがありますので、またハッシュです。
$data->{'CatalogCar'}->[0]->{'ImageFrontUrl'}
これで、1台目の画像URLが取り出せます。
あとは、HTMLで書き出せば終わりです。ここまでくれば、HTMLさえ分かっていればページを作ることができると思います。
最後のループの部分で、ifを使っているのは、なぜかわかりませんが、何個か画像がないものがあったので、それをスキップするためです。
カーセンサーラボWEBサービスの使い方は、これで大体わかったので、ガリバーやグーなどのアフィリエイトをうまく取り込めば、おもしろいアフィリサイトが作れそうです。
トラックバックURL: http://www.sigmadesign.co.jp/ja/mt-tb.cgi/64
コメントする