asin記法をカスタマイズ2
再編集・再構築時に外部接続のコストがかかることから、このカスタマイズは使用しなくなりました。
asin記法をカスタマイズ - matuダイアリーでasin記法で詳細オプションを指定したときのカスタマイズを行いましたが、あまりにbuggyだったのと、スタイルをベタ書きしすぎていたのが気になったので修正しました。
asin記法をカスタマイズ - matuダイアリーでasin記法で詳細オプションを指定したときのカスタマイズを行いましたが、あまりにbuggyだったのと、スタイルをベタ書きしすぎていたのが気になったので修正しました。
■出力例
試しに、いままで紹介させていただいた商品をasin記法の詳細オプション付きで表示すると、以下のようになります。
フォーカス・リーディング 「1冊10分」のスピードで、10倍の効果を出す いいとこどり読書術
- 作者: 寺田昌嗣
- 出版社/メーカー: PHP研究所
- 発売日: 2008/08/01
- メディア: 単行本(ソフトカバー)
- 購入: 23人 クリック: 182回
- この商品を含むブログ (88件) を見る
- 出版社/メーカー: ジャストシステム
- 発売日: 2008/02/08
- メディア: CD-ROM
- 購入: 4人 クリック: 82回
- この商品を含むブログ (78件) を見る
Firefox 3 Hacks ―Mozillaテクノロジ徹底活用テクニック
- 作者: 江村秀之,池田譲治,下田洋志,松澤太郎,dynamis
- 出版社/メーカー: オライリージャパン
- 発売日: 2008/08/27
- メディア: 単行本(ソフトカバー)
- 購入: 4人 クリック: 489回
- この商品を含むブログ (54件) を見る
といった具合に、メディアによって表示する情報数がまちまちなので、たとえばDVDだったら出演者や監督名などを表示するかといったところが今後の検討課題です。
■今回の修正内容
--- Tag_amazon.pm.orig 2008-02-07 01:50:00.000000000 +0900 +++ Tag_amazon.pm 2008-09-16 08:53:28.000000000 +0900 @@ -1,4 +1,7 @@ use strict; +use WebService::Simple; +use Encode; + #------------------------------------------------------------------------------ # Amazon記法プラグイン # (C)2006 nabe / nabe@abk.nu @@ -82,6 +85,12 @@ $asin .= $sum; } + + # Asin Detail + if ( $ary->[0] eq 'detail') { + return &amazon_asin_detail($asin, $asid); + } + # 画像モード? if ($ary->[0] eq 'img' || $ary->[0] eq 'image' || $ary->[0] eq 'detail') { shift(@$ary); @@ -124,5 +133,61 @@ return "<a href=\"http://www.amazon.co.jp/exec/obidos/ASIN/$asin/$asid\"$attri><img src=\"http://images-jp.amazon.com/images/P/$asin$size\" alt=\"$name\" class=\"asin\"$size_tag></a>"; } +sub amazon_asin_detail { + my ($asin, $asid) = @_; + + my $amazon = WebService::Simple->new( + base_url => "http://webservices.amazon.co.jp/onca/xml", + param => { + AssociateTag => $asid, + SubscriptionId => '0EFZW5XNGVAC9H12ER82', + Service => 'AWSECommerceService', + locale => 'jp', + ContentType => 'text/xml', + Version => '2007-10-29', + } + ); + + my $resp = $amazon->get({ + Operation => 'ItemLookup', + ItemId => $asin, + ResponseGroup => 'Medium', + }); + + my $item = $resp->parse_response->{Items}->{Item}; + my $url = $item->{DetailPageURL}; + my $img = $item->{MediumImage}->{URL}; + #my $img = $item->{SmallImage}->{URL}; + my $title = $item->{ItemAttributes}->{Title}; + my $price = $item->{ItemAttributes}->{ListPrice}->{FormattedPrice}; + my $media = $item->{ItemAttributes}->{Binding}; + my $author; + if ( ref($item->{ItemAttributes}->{Author}) eq 'ARRAY' ) { + $author = join(", ", @{$item->{ItemAttributes}->{Author}}); + } else { + $author = $item->{ItemAttributes}->{Author}; + } + my $maker = $item->{ItemAttributes}->{Manufacturer}; + my @html = (); + + push(@html, "<div class=\"hatena-asin-detail\">\n"); + # image + push(@html, "<a href=\"$url\"><img src=\"$img\" class=\"hatena-asin-detail-image\" alt=\"$title\" title=\"$title\"></a>\n"); + # info + push(@html, "<div class=\"hatena-asin-detail-info\">\n"); + push(@html, "<p class=\"hatena-asin-detail-title\"><a href=\"$url\">$title</a></p>\n"); + push(@html, "<ul>\n"); + push(@html, "<li>$media</li>\n") if ($media); + push(@html, "<li>$author</li>\n") if ($author); + push(@html, "<li>$maker</li>\n") if ($maker); + push(@html, "<li>$price</li>\n") if ($price); + push(@html, "</ul>\n"); + push(@html, "</div>\n"); + push(@html, "<div class=\"hatena-asin-detail-foot\"></div>\n"); + push(@html, "</div>\n"); + + @html = Encode::encode('utf8',"@html"); + return "@html"; +} 1;