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!); }