▼ 2008/08/06(水) asin記法をカスタマイズ
再編集・再構築時に外部接続のコストがかかることから、このカスタマイズは使用しなくなりました。
■detailオプションを指定したときは詳細を表示できるように
adiaryのasin記法でdetailオプションを指定したら詳細を表示したいなぁとおもってカスタマイズしてみました。(/path/to/adiary/lib/Satsuki/TextParser/TagPlugin/Tag_amazon.pm)[asin:4774135666:detail]と記述すれば以下のように展開されるようになりました。*1
*1 : 明日買おうと思っている本
■WebService::Simpleモジュールは結構使いやすい
このカスタマイズにはPerlのWebService::Simpleモジュールを使用しています。さすがにちょっと前に話題になっただけあって使いやすいなと思いました。PerlでAmazonWebServiceを扱うときにはNet::Amazonという有名なモジュールがあるんですが、これを使用するとadiaryの日記更新時のリフレッシュの問題か、Net::Amazonを使用したAsinSearchの処理時間の問題かわかりませんが、HTTP 410が返されうまくいきませんでした。
■カスタマイズの内容
--- Tag_amazon.pm.utf8 2008-02-07 01:50:00.000000000 +0900
+++ Tag_amazon.pm.new 2008-08-06 01:59:45.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,58 @@
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 => 'xxxxxxxxxxxxxxxxxxxx',
+ 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 = join(", ", @{$item->{ItemAttributes}->{Author}});
+ my $maker = $item->{ItemAttributes}->{Manufacturer};
+
+ my $detail = "
+ <div style=\"font-size:75%; margin: 0.5em 0 0.5em 0;\">
+ <div style=\"width:10%; float:left;\">
+ <a href=\"$url\" title=\"$title\"><img src=\"$img\" alt=\"$title\" /></a>
+ </div>
+ <div style=\"width:75%; float:left;\">
+ <ul style=\"margin:0 auto; list-style:none;\">
+ <li><a href=\"$url\" title=\"$title\"><strong>$title</strong></a></li>
+ <li>$media</li>
+ <li>$author</li>
+ <li>$maker</li>
+ <li>$price</li>
+ </ul>
+ </div>
+ <div style=\"clear:both;\"></div>
+ </div>
+ ";
+ $detail = Encode::encode('utf8',$detail);
+ return $detail;
+}
+
1;
▼ コメント(0件)
- TB-URL http://d.matu.biz/03/tb/