Amazlet Tool for はてなダイアリー (1)
id:Akkiesoft にインスパイアされて、改造版 amazlet ツール を作ってみました。はてなダイアリー市民向けに最適化してあります。検索後にテキストエリアに表示される文字列をコピペすると、asin:XXXX:detail で作ったのとそっくりなリンクが作れます。
アマゾンデベロッパートークン と アマゾンアフィリエイトコード を持っていて、サーバーに SOAP::Lite がインストールされている方用の CGI を置いておきます。ちなみにロリポップでは正常動作することを確認しました。
amazlet.cgi
#!/usr/bin/perl -w
use strict;
use Jcode;
use CGI;
use SOAP::Lite;
&main();
sub main() {
# アマゾンデベロッパートークン
my $dev_token = 'hogehoge';
# アマゾンアフィリエイトコード
my $af_tag = 'fugafuga';
# アマゾンWSDLファイル
#my $amazon_wdsl = "http://soap.amazon.com/schemas3/AmazonWebServices.wsdl";
my $amazon_wdsl = "http://soap.amazon.co.jp/schemas3/AmazonWebServices.wsdl";
# パラメータ取得
my $query = CGI->new();
my $keyword = '';
my $mode = '';
if ( $query->param('keyword') ) {
$keyword = jcode( $query->param('keyword') )->utf8;
}
if ( $query->param('mode') ) {
$mode = $query->param('mode');
}
my @code_list = qw(books-jp dvd-jp classical-jp music-jp software-jp videogames-jp);
my @value_list = qw(和書 DVD クラシック CD ソフトウェア ビデオゲーム);
# 検索フォーム
printf(qq!Content-Type: text/html; charset=x-euc-jp\n\n!);
printf(qq!<html><head><title>Amazlet for Hatena</title></head><body>\n!);
printf(qq!<form method="post" action="amazlet.cgi">\n!);
printf(qq!<input type="text" size="40" name="keyword">\n!);
printf(qq!<select name="mode">\n!);
for ( my $i = 0 ; $i < 6 ; $i++ ) {
if ( $code_list[$i] eq $mode ) {
printf( qq!<option value="%s" selected>%s</option>\n!, $code_list[$i], $value_list[$i] );
}
else {
printf( qq!<option value="%s">%s</option>\n!, $code_list[$i], $value_list[$i] );
}
}
printf(qq!</select>\n!);
printf(qq!<input type="submit" value="検索">\n!);
printf(qq!<input type="reset" value="クリア">\n!);
printf(qq!</form>\n!);
# 検索開始
if ( $keyword && $mode ) {
# アマゾンWSDLファイルを読んでSOAPを初期化
my $amazon_search = SOAP::Lite->service($amazon_wdsl);
# クエリーを生成
my $results = $amazon_search->KeywordSearchRequest(
SOAP::Data->name('KeywordSearchRequest')->type('KeywordRequest')->value(
\SOAP::Data->value(
SOAP::Data->name( 'keyword' => $keyword ),
SOAP::Data->name( 'page' => '1' ),
SOAP::Data->name( 'mode' => $mode ),
SOAP::Data->name( 'tag' => $af_tag ),
SOAP::Data->name( 'type' => 'lite' ),
SOAP::Data->name( 'devtag' => $dev_token ),
SOAP::Data->name( 'locale' => 'jp' )
)
)
);
# 検索結果を出力する
foreach my $result ( @{ $results->{Details} } ) {
# 検索結果をハッシュに詰める
my $hash;
$hash->{ListPrice} = jcode( $result->{ListPrice}, 'utf8' )->euc || "未定";
$hash->{OurPrice} = jcode( $result->{OurPrice}, 'utf8' )->euc || "未定";
$hash->{UsedPrice} = jcode( $result->{UsedPrice}, 'utf8' )->euc || "未定";
$hash->{ImageUrlSmall} = $result->{ImageUrlSmall};
$hash->{ImageUrlMedium} = $result->{ImageUrlMedium} || $result->{ImageUrlSmall};
$hash->{ImageUrlLarge} = $result->{ImageUrlLarge};
$hash->{Availability} = jcode( $result->{Availability}, 'utf8' )->euc || "不明";
$hash->{Catalog} = $result->{Catalog};
$hash->{Asin} = $result->{Asin};
$hash->{Url} = $result->{Url};
$hash->{Manufacturer} = jcode( $result->{Manufacturer}, 'utf8' )->euc || "不明";
$hash->{ProductName} = jcode( $result->{ProductName}, 'utf8' )->euc || "不明";
# プレビュー用
my $body = qq!<div class="hatena-asin-detail">!;
$body .= sprintf(
qq!<a href="http://www.amazlet.com/browse/ASIN/%s/%s"><img src="%s" class="hatena-asin-detail-image" alt="%s" title="%s"></a>!,
$hash->{Asin}, $af_tag, $hash->{ImageUrlMedium},
$hash->{ProductName}, $hash->{ProductName}
);
$body .= qq!<div class="hatena-asin-detail-info">!;
$body .= sprintf( qq!<p class="hatena-asin-detail-title"><a href="http://www.amazlet.com/browse/ASIN/%s/%s">%s</a></p>!, $hash->{Asin}, $af_tag, $hash->{ProductName} );
$body .= qq!<ul>!;
$body .= sprintf( qq!<li><span class="hatena-asin-detail-label">出版社/メーカー:</span> %s</li>!, $hash->{Manufacturer} );
$body .= sprintf( qq!<li><span class="hatena-asin-detail-label">価格:</span> %s</li>!, $hash->{ListPrice} );
$body .= sprintf( qq!<li><span class="hatena-asin-detail-label">メディア:</span> %s</li>!, $hash->{Catalog} );
$body .= qq!</ul>!;
$body .= qq!</div>!;
$body .= qq!<div class="hatena-asin-detail-foot"></div>!;
$body .= qq!</div>!;
printf( "%s\n", $body );
# はてなダイアリー用
$body =~ s/</</g;
$body =~ s/>/>/g;
printf(qq!<form><textarea rows="10" cols="80">\n!);
printf( "%s\n", $body );
printf(qq!</textarea></form>\n!);
}
}
printf(qq!</body></html>\n!);
}