楽天商品ランキング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=’&nbsp;’;
    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">|&nbsp;<a href="$cginame?sex=1">女性総合</a>&nbsp;|&nbsp;<a href="$cginame?age=20&sex=0">20代男性</a>&nbsp;|</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;
}

 

新版Perl言語プログラミングレッスン入門編

(Visited 124 times, 1 visits today)

タグ : , ,