楽天商品ランキングAPIを使ったperlサンプルソース
楽天ウェブサービスの楽天商品ランキングAPIを使ってランキング情報を取得するための簡単なサンプルです。
◇関連:楽天商品ランキングAPIを使った売れ筋ランキング表示プログラムと作ってみた。 – KUMA TYPE
下が実際に実行したところです。
【楽天市場】ランキング市場 【総合】 – 楽天商品ランキングAPI perlサンプル
http://tools.kumacchi.com/sample/raku_ranking/raku_ranking.cgi
ここからがperlで書いたサンプルソースになります。
#!/usr/local/bin/perl
#
# 2009.04.25
#
# 楽天商品ランキング取得サンプル
# 楽天商品ランキングAPI (version:2009-04-15)
#
#———————————————————————————-
use strict;
use warnings;
use LWP::Simple;
use XML::Simple;
use Encode qw/from_to/;
use Encode::Guess qw/ascii utf8 euc-jp shiftjis 7bit-jis/;
use SOAP::Lite;
use DBI;
use CGI;
my $cginame = ‘raku_ranking.cgi’;
my $TITLE = ‘楽天商品ランキングAPI perlサンプル’;
# 楽天ウェブサービス
my $base_url = ‘http://api.rakuten.co.jp/rws/2.0/rest’;
my $developerId = ‘あなたのデベロッパーID’;
my $operation = ‘ItemRanking’;
my $version = ‘2009-04-15’;
my $affiliateId = ‘あなたの楽天アフィリエイトID(あれば)’;
my $shoplink = "http://hb.afl.rakuten.co.jp/hgc/$affiliateId/?pc=";
my $req_url = "$base_url?developerId=$developerId&operation=$operation&affiliateId=$affiliateId&version=$version";
#webサービスコピーライト
my $webservice=<<"EOF";
<!– Rakuten Web Services Attribution Snippet FROM HERE –>
<a href="http://webservice.rakuten.co.jp/" target="_blank"><img src="http://webservice.rakuten.co.jp/img/credit/200709/credit_22121.gif" border="0" alt="楽天ウェブサービスセンター" title="楽天ウェブサービスセンター" width="221" height="21"/></a>
<!– Rakuten Web Services Attribution Snippet TO HERE –>
EOF
#———————————————————————————-
#パラメータ作成 開始
#———————————————————————————-
my $q = new CGI;
$q->param(‘query’);
#●ジャンルID
if($q->param(‘genreId’) ne ”){
if($q->param(‘genreId’) !~ /^[0-9]+$/){
&error("genreId error");
}
$req_url .= "&genreId=".$q->param(‘genreId’);
}
#●年齢
if($q->param(‘age’) ne ”){
if($q->param(‘age’) !~ /^[0-9]{2}$/){
&error("age error");
}
$req_url .= "&age=".$q->param(‘age’);
}
#●性別
if($q->param(‘sex’) ne ”){
if($q->param(‘sex’) !~ /^(?:0|1)$/){
&error(‘sex error’);
}
$req_url .= "&sex=".$q->param(‘sex’);
}
#———————————————————————————-
#パラメータ作成 終了
#———————————————————————————-
my $data = get($req_url);
my $xmlsimple = XML::Simple->new();
my $xml = $xmlsimple->XMLin($data,ForceArray=>[‘Item’]);
#エラーチェック
if($xml->{‘header:Header’}->{‘Status’} =~ /(ServerError|ClientError|Maintenance)/i){
#エラーの場合はキャッシュ削除
&deleteCache($req_url);
my $msg = $xml->{‘header:Header’}->{‘StatusMsg’};
if(utf8::is_utf8($msg)){
utf8::encode($msg);
}
&error("$msg:$xml->{‘header:Header’}->{‘Status’}");
}
my $ary = \$xml->{Body}{‘itemRanking:ItemRanking’}{‘Item’};
my $title = $xml->{Body}{‘itemRanking:ItemRanking’}{‘title’};
my $lastBuildDate = $xml->{Body}{‘itemRanking:ItemRanking’}{‘lastBuildDate’};
if(utf8::is_utf8($title)) {utf8::encode($title);}
if(utf8::is_utf8($lastBuildDate)) {utf8::encode($lastBuildDate);}
my $out=”;
$out .=<<"EOF";
<table width="100%" border="1" cellspacing="0" cellpadding="1">
<tr bgcolor="#FFF2D7">
<th>ランキング</th><th>画像</th><th nowrap>商品名</th><th nowrap>価格</th><th nowrap>ショップ名</th>
</tr>
EOF
#ループ
foreach my $r (@{$$ary}) {
if(utf8::is_utf8($r->{‘rank’})) {utf8::encode($r->{‘rank’});}
if(utf8::is_utf8($r->{‘carrier’})) {utf8::encode($r->{‘carrier’});}
if(utf8::is_utf8($r->{‘itemName’})) {utf8::encode($r->{‘itemName’});}
if(utf8::is_utf8($r->{‘itemCode’})) {utf8::encode($r->{‘itemCode’});}
if(utf8::is_utf8($r->{‘itemPrice’})) {utf8::encode($r->{‘itemPrice’});}
if(utf8::is_utf8($r->{‘itemCaption’})) {utf8::encode($r->{‘itemCaption’});}
if(utf8::is_utf8($r->{‘itemUrl’})) {utf8::encode($r->{‘itemUrl’});}
if(utf8::is_utf8($r->{‘affiliateUrl’})) {utf8::encode($r->{‘affiliateUrl’});}
if(utf8::is_utf8($r->{‘imageFlag’})) {utf8::encode($r->{‘imageFlag’});}
if(utf8::is_utf8($r->{‘smallImageUrl’})) {utf8::encode($r->{‘smallImageUrl’});}
if(utf8::is_utf8($r->{‘mediumImageUrl’})) {utf8::encode($r->{‘mediumImageUrl’});}
if(utf8::is_utf8($r->{‘availability’})) {utf8::encode($r->{‘availability’});}
if(utf8::is_utf8($r->{‘taxFlag’})) {utf8::encode($r->{‘taxFlag’});}
if(utf8::is_utf8($r->{‘postageFlag’})) {utf8::encode($r->{‘postageFlag’});}
if(utf8::is_utf8($r->{‘creditCardFlag’})) {utf8::encode($r->{‘creditCardFlag’});}
if(utf8::is_utf8($r->{‘shopOfTheYearFlag’})){utf8::encode($r->{‘shopOfTheYearFlag’});}
if(utf8::is_utf8($r->{‘affiliateRate’})) {utf8::encode($r->{‘affiliateRate’});}
if(utf8::is_utf8($r->{‘startTime’})) {utf8::encode($r->{‘startTime’});}
if(utf8::is_utf8($r->{‘endTime’})) {utf8::encode($r->{‘endTime’});}
if(utf8::is_utf8($r->{‘reviewCount’})) {utf8::encode($r->{‘reviewCount’});}
if(utf8::is_utf8($r->{‘reviewAverage’})) {utf8::encode($r->{‘reviewAverage’});}
if(utf8::is_utf8($r->{‘shopName’})) {utf8::encode($r->{‘shopName’});}
if(utf8::is_utf8($r->{‘shopCode’})) {utf8::encode($r->{‘shopCode’});}
if(utf8::is_utf8($r->{‘shopUrl’})) {utf8::encode($r->{‘shopUrl’});}
if(utf8::is_utf8($r->{‘genreId’})) {utf8::encode($r->{‘genreId’});}
#画像
my $img=’ ’;
if($r->{‘imageFlag’}==1){
$img = "<img src=\"$r->{‘mediumImageUrl’}\" alt=\"$r->{‘itemName’}\">";
}
my $encshopUrl = &url_encode($r->{‘shopUrl’});
$out.=<<"EOF";
<tr>
<td>
$r->{‘rank’}位
</td>
<td>
<a href="$r->{‘affiliateUrl’}" target="_blank">$img</a>
</td>
<td>
<div><a href="$r->{‘affiliateUrl’}" target="_blank" title="$r->{‘itemName’}">$r->{‘itemName’}</a></div>
</td>
<td>
<div>$r->{‘itemPrice’}</div>
</td>
<td>
<div><a href="$shoplink$encshopUrl" target="_blank">$r->{‘shopName’}</a></div>
</td>
</tr>
EOF
}
$out .= "</table>\n";
#ページ表示
print "Content-Type: text/html\n\n";
print <<"EOF";
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Language" content="ja" />
<title>$title – $TITLE</title>
</head>
<body>
<div id="bd">
<div id="header">
$TITLE
</div>
<div id="link">| <a href="$cginame?sex=1">女性総合</a> | <a href="$cginame?age=20&sex=0">20代男性</a> |</div>
<div id="info">$title</div>
<div id="result">
$out
</div>
<div id="lastBuildDate">
$lastBuildDate
</div>
<div class="both"></div>
<div id="footer">
<div>
$webservice
</div>
</div>
</div>
</body>
</html>
EOF
exit(0);
#———————————————————-
# エラー処理
#———————————————————-
sub error{
print "Content-type: text/html\n\n";
print << "EOF";
<HTML lang="ja"><HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Language" content="ja">
<TITLE>エラー</TITLE>
</HEAD>
<BODY bgcolor="#FFFFFF" text="#666666" link="#0066FF" vlink="#000099" alink="#66FFFF" leftmargin="10" topmargin="10">
<CENTER><BR>
<HR size="1">
error:$_[0]<BR>
</CENTER>
</BODY>
</HTML>
EOF
exit(-1);
}
#———————————————————-
# urlエンコード (new)
#———————————————————-
sub url_encode{
my $tmp = shift;
$tmp =~ s/([^\w ])/’%’.unpack(‘H2’, $1)/eg;
$tmp =~ tr/ /+/;
$tmp;
}