気になる言葉ショップ

気になる言葉ショップでは、管理人のわがままで選ばれた気になる言葉ごとのオンラインショッピングコーナーを設けています。
Amazon ECS 4.0

Amazon ECS 4.0

Amazonのアフィリエイトは、本だけで1万円稼がないとお金をてにできないので遠慮していたのですが、この前見たら、本以外にもいろいろあるし、最低支払金額も5千円になっているので、挑戦してみることにしました。

Amazon E-Commerce Service(ECS) 4.0は、Amazon Web サービス(AWS)3.0から、2004年にメジャーバージョンアップしたものです。
ECSには、RESTとSOAPの2種類が用意されています。RESTとはREpresentational State Transferの略で、WWWの実装にあたってリソースを特定するURIと、リソースにアクセス、操作するためのプロトコルとして、シンプルなHTTP(POST,GET,PUT,DELETE)を使用するアーキテクチャ。
簡単に言えば、ホームページを見るのと同じ要領で、URLにパラメータを含めてリクエストを出すと、ホームぺージのHTMLでなく、XMLでデータがかえってくる方法。
SOAPより取っつきやすいので、RESTを使っている人が多いようです。従って、情報もRESTの方が多いので、RESTで作って見ました。

use Encode;
use XML::Simple;
use LWP::Simple;
use XML::Parser;
my $query = '[検索したい語]';
Encode::from_to($query,'sjis','utf8'); #UTF8に変換
&encode($query); #URLエンコード(別に用意)
utf8::decode($query);
my $affID = "[アソシエイトID]";
my $accessKey = "[アクセスキー]";
my $searchIdx = "Blended"; #全ての商品
my $verDate = "2006-05-17";
my $url = "http://webservices.amazon.co.jp/onca/xml";
$url .= "?Service=AWSECommerceService&Version=$verDate";
$url .= "&AWSAccessKeyId=$accessKey&AssociateTag=$affID";
$url .= "&Operation=ItemSearch&SearchIndex=$searchIdx";
$url .= "&ItemPage=1&ResponseGroup=Medium&Keywords=$query";
my $content = get $url;
if($content eq ""){ return; };
my @ltime=localtime(time); #情報取得時間表示用
my $stamp = sprintf("[\'%02d年%d月%d日 %02d時%02d分(日本時間)時点]",
$ltime[5]-100,$ltime[4]+1,$ltime[3],$ltime[2],$ltime[1]);
$XML::Simple::PREFERRED_PARSER = 'XML::Parser';
my $xmlsimple = new XML::Simple(ForceArray => ['Item','Artist','Creator'
,'EditorialReview']);
my $responce = $xmlsimple->XMLin($content);
foreach my $result(@{$responce->{Items}->{Item}}){
if($result->{ItemAttributes}->{IsAdultProduct}) {next;} #アダルト除外
if($result->{OfferSummary}->{TotalNew} == 0){next;} #品切れ
# 検索結果をシフトJIS変換。
my $title = $result->{ItemAttributes}->{Title};
$title = Encode::encode("utf8",$title);
Encode::from_to($title,'utf8','sjis');
my $comment = ""; #制作者等の情報
if($result->{ItemAttributes}->{Binding} eq 'CD'){
$comment = "アーティスト:";
foreach my $author(@{$result->{ItemAttributes}->{Artist}}){
$author = Encode::encode("utf8",$author);
Encode::from_to($author,'utf8','sjis');
$comment .= "$author ";
}
} else {
my $pre = "";
foreach my $creator(@{$result->{ItemAttributes}->{Creator}}){
my $role = "<br>$creator->{Role}:";
if($pre eq $role){
$role =",";
} else {
$pre = $role;
}
my $author = $role . $creator->{content};
$author = Encode::encode("utf8",$author);
Encode::from_to($author,'utf8','sjis');
$comment .= "$author ";
}
}
foreach my $review(@{$result->{EditorialReviews}->{EditorialReview}}){
my $content = $review->{Content};
$content = Encode::encode("utf8",$content);
Encode::from_to($content,'utf8','sjis');
$comment .= "<br>$content";
}
my $opt = 'target="_blank" rel="nofollow"';
my $linkurl = "<a href=\"$result->{DetailPageURL}\" $opt>";
my $imgurl = $result->{MediumImage}->{URL};
if(index($imgurl,'http:')<0){ #画像が無い場合の代替画像
$imgurl=$EST{img_path_url} . "noimage.gif";
}
ここでいろいろ処理
}

アダルトチェックの{IsAdultProduct}は、バージョン"2006-05-17"からですので、バージョンの指定を忘れずに。

Comments are closed.