暖冬傾向で、ゴルフ場の予約が多い!
100万ポイント山分け!1日5回検索で1ポイントもらえる
>>
人気記事ランキング
ブログを作成
楽天市場
244624
HOME
|
DIARY
|
PROFILE
【フォローする】
【ログイン】
楽天ウェブサービスセンターブログ
商品検索APIサンプルソース(Perl)
■サンプルソースご利用の際の注意事項
・Perlが動作するWEBサーバのCGI実行領域におきます。ファイル属性に実行属性(モード:755)をつけてください。
・拡張子は.plとなっていますが適宜WEBサーバの仕様にあわせて変更してください。(.cgi等)
・サンプルコードのファイルは文字エンコーディングをUTF-8で保存するようにしてください。
[ item_search.pl ]
#!/usr/bin/perl
#---------------------------------------------------------------
# 楽天1商品検索API の利用サンプルコード (Perl)
#---------------------------------------------------------------
# 以下を変更してPerlの実行環境におくだけでOK
# 詳細な仕様は以下を参照
# - 楽天ウェブサービス- http://webservice.rakuten.co.jp/
#---------------- 以下、変更部分 ------------------------------#
# 自分のディベロッパーID
$DEVELOPER_ID = "自分のディベロッパーID";
# 自分のアフィリエイトID
$AFFILIATE_ID = "自分のアフィリエイトID";
#---------------- 以上、変更部分 ------------------------------#
use LWP::Simple;
#---------------------------------
# 定数
#---------------------------------
# API名
$API_NAME = "楽天商品検索API";
# APIのURL
$API_BASE_URL = "http://api.rakuten.co.jp/rws/1.3/rest";
# APIのタイプ
$OPERATION = "ItemSearch";
# APIのバージョン
$API_VERSION = "2007-02-14";
#---------------------------------
# メイン処理
#---------------------------------
# APIステータス
$status = "";
# APIからのメッセージ
$statusmsg = "";
# 取得件数
$count = 0;
# 商品リスト
@items = ();
# APIへのパラメタの連想配列
%api_params = (
"keyword" => "",
"version" => $API_VERSION,
"shopCode" => "",
"genreId" => "",
"catalogCode" => "",
"hits" => "",
"page" => "",
"sort" => "",
"minPrice" => "",
"maxPrice" => "",
"availability" => "",
"field" => "",
"carrier" => "",
"imageFlag" => ""
);
#---------------------------------
# フォーム値からのパラメタ取得
#---------------------------------
# リクエストURL生成
$api_url = sprintf("%s?developerId=%s&affiliateId=%s&operation=%s",$API_BASE_URL,$DEVELOPER_ID,$AFFILIATE_ID,$OPERATION);
# GETメソッドの場合
if( $ENV{'REQUEST_METHOD'} eq "GET" ) {
$buffer = $ENV{'QUERY_STRING'};
# POSTメソッドの場合
} else {
read( STDIN, $buffer, $ENV{'CONTENT_LENGTH'} );
}
# リクエストパラメタを連想配列に入れる
my %req_params = map { /([^=]+)=(.+)/ } split /&/, $buffer;
# APIのクエリ生成
while ( ( $key, $value ) = each ( %api_params ) ) {
if($req_params{$key} ne ""){
$api_url = sprintf("%s&%s=%s",$api_url, $key, $req_params{$key});
}elsif($api_params{$key} ne ""){
$api_url = sprintf("%s&%s=%s",$api_url, $key, $api_params{$key});
}
}
#---------------------------------
# ウェブサービスAPIに問合せ
#---------------------------------
if(urldecode($req_params{'submit'}) eq "商品検索"){
# レスポンスコンテンツ
my $data = get($api_url);
#---------------------------------
# ステータス判断
#---------------------------------
# 必要な情報だけ簡易な正規表現で取得
if($data){
$data =~s/\n//g;
# ステータス
if($data =~/<Status>(.+)<\/Status>/){
$status = $1;
}
# メッセージ
if($data =~/<StatusMsg>(.+)<\/StatusMsg>/){
$statusmsg = $1;
}
# 件数
if($data =~/<count>(.+)<\/count>/){
$count = $1;
}
# 商品のリスト
if($data =~/<Items>(.+)<\/Items>/){
@items = split(/<\/Item>/,$1); # ITEMの配列
}
}else{
$statusmsg = "$API_NAMEからのデータの取得に失敗しました";
}
}
# フォーム入力値の表示
$req_params{keyword} = htmlspecialchars((urldecode($req_params{keyword})));
$req_params{minPrice} = htmlspecialchars((urldecode($req_params{minPrice})));
$req_params{maxPrice} = htmlspecialchars((urldecode($req_params{maxPrice})));
#---------------------------------
# 関数
#---------------------------------
# 文字列にURLデコード処理をする
sub urldecode{
my $str=shift;
$str=~tr/+/ /;
$str=~s/%([a-fA-F0-9]{2})/pack("C",hex($1))/eg;
return $str;
}
# 文字列をHTMLエスケープ
sub htmlspecialchars{
my $str = shift;
$str =~ s/&/&\;/g;
$str =~ s/"/"\;/g;
$str =~ s/'/\&\#39\;/g;
$str =~ s/</\<\;/g;
$str =~ s/>/\>\;/g;
return $str;
}
#---------------------------------
# HTMLコンテンツ
#---------------------------------
print "Content-type: text/html; charset=UTF-8\n\n";
print <<"EOF";
<html lang="ja">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>$API_NAME/楽天ウェブサービス</title>
</head>
<body bgcolor="#ffffff" TEXT="#333333" LINK="#3333cc">
<!-- タイトル -->
<h1 style="font-size:16px;font-weight:bold;">楽天ウェブサービス</h1>
<hr size="1" noshade>$API_NAME<hr size="1" noshade>
<!--/タイトル -->
<!-- HTMLフォーム表示 -->
<form action="item_search.pl" method="get">
<table width="80%" border="0" cellspacing="0" cellpadding="0" style="margin: 5px 0pt 0pt 0px;">
<tr><td bgcolor="#afafaf">
<table width="100%" border=0 cellspacing=1 cellpadding=5 style="font-size:12px;">
<tr><td style="background-color: #eeeeee;">検索キーワード</td><td style="background-color: #ffffff;">
<!-- キーワード入力テキストボックス --><input type="text" name="keyword" value="$req_params{keyword}" size="30">
</td></tr>
<tr><td style="background-color: #eeeeee;">価格</td><td style="background-color: #ffffff;">
<!-- 最小価格入力テキストボックス -->
<input type="text" name="minPrice" value="$req_params{minPrice}" size="20"> 円
~
<!-- 最上価格入力テキストボックス -->
<input type="text" name="maxPrice" value="$req_params{maxPrice}" size="20"> 円
</td></tr>
</table>
</td></tr></table><br>
<input type="submit" name="submit" value="商品検索">
</form>
<!-- HTMLフォーム表示 -->
EOF
print <<"EOF";
<!-- API検索結果表示 -->
<font style="font-size:14px;">
EOF
if($status) { print "取得結果: $status<br>" };
if($statusmsg) { print "取得内容: $statusmsg<br>" };
if($count ) { print "取得件数: $count<br>" };
if($count > 0 ){
print <<"EOF";
<table width="80%" border="0" cellspacing="0" cellpadding="0" style="margin: 5px 0pt 0pt 0px;">
<tr><td bgcolor="#afafaf">
<table width="100%" border=0 cellspacing=1 cellpadding=5 style="font-size:12px;">
<tr align="center" style="background-color: #eeeeee;">
<td width="8%" >写真</td>
<td width="47%">商品名</td>
<td width="15%">価格</td>
<td width="30%">ショップ名</td>
</tr>
EOF
# ベタな正規表現
foreach my $item ( @items ){
if($item=~/<itemName>(.+)<\/itemName>/) {$itemname=$1;}
if($item=~/<itemPrice>(.+)<\/itemPrice>/) {$itemprice = $1;}
if($item=~/<itemUrl>(.+)<\/itemUrl>/) {$itemurl = $1;}
if($item=~/<affiliateUrl>(.+)<\/affiliateUrl>/) {$affiliateurl = $1;}
if($item=~/<smallImageUrl>(.+)<\/smallImageUrl>/){$smallimageurl = $1;}
if($item=~/<shopName>(.+)<\/shopName>/) {$shopname =$1;}
if($item=~/<shopUrl>(.+)<\/shopUrl>/) {$shopurl =$1;}
print <<"EOF";
<tr style="background-color: #ffffff;">
<td width="8%" align="center"><a href="$itemurl" target="_top"><img src="$smallimageurl" border=0></a></td>
<td width="47%" align="left"><a href="$affiliateurl" target="_top">$itemname</a></td>
<td width="15%" align="right" nowrap>$itemprice 円</td>
<td width="47%" align="left"><a href="$shopurl" target="_top"><font size="-1">$shopname</a></td>
</tr>
EOF
}
print <<"EOF";
</table>
</td></tr></table>
EOF
}
print <<"EOF";
</font>
<!-- /API検索結果表示 -->
EOF
exit 0;
ジャンル別一覧
出産・子育て
ファッション
美容・コスメ
健康・ダイエット
生活・インテリア
料理・食べ物
ドリンク・お酒
ペット
趣味・ゲーム
映画・TV
音楽
読書・コミック
旅行・海外情報
園芸
スポーツ
アウトドア・釣り
車・バイク
パソコン・家電
そのほか
すべてのジャンル
人気のクチコミテーマ
Amazonマケプレ
100円 【ダウンロード版】契約事務…
(2024-11-08 22:56:41)
花、風景の写真を撮るカメラとレンズ
望遠マクロ撮影(11/3)
(2024-11-11 14:52:31)
大好き!デジカメ!
LEICA DG ELMARIT 200mm/F2.8/POWER …
(2024-11-15 12:30:08)
© Rakuten Group, Inc.
X
共有
Facebook
Twitter
Google +
LinkedIn
Email
Mobilize
your Site
スマートフォン版を閲覧
|
PC版を閲覧
人気ブログランキングへ
無料自動相互リンク
にほんブログ村 女磨き
LOHAS風なアイテム・グッズ
みんなが注目のトレンド情報とは・・・?
So-netトレンドブログ
Livedoor Blog a
Livedoor Blog b
Livedoor Blog c
楽天ブログ
JUGEMブログ
Excitブログ
Seesaaブログ
Seesaaブログ
Googleブログ
なにこれオシャレ?トレンドアイテム情報
みんなの通販市場
無料のオファーでコツコツ稼ぐ方法
無料オファーのアフィリエイトで稼げるASP
ホーム
Hsc
人気ブログランキングへ
その他
Share by: