ようこそゲストさん

matuダイアリー

2008/08/06(水) asin記法をカスタマイズ

はてブ情報 はてブに登録 はてブ数 adiary matu
再編集・再構築時に外部接続のコストがかかることから、このカスタマイズは使用しなくなりました。

detailオプションを指定したときは詳細を表示できるように

adiaryのasin記法でdetailオプションを指定したら詳細を表示したいなぁとおもってカスタマイズしてみました。(/path/to/adiary/lib/Satsuki/TextParser/TagPlugin/Tag_amazon.pm)
[asin:4774135666:detail]
と記述すれば以下のように展開されるようになりました。*1
200808asin-detail.jpg

*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;


名前:  非公開コメント   

URL(任意):
  • TB-URL  http://d.matu.biz/03/tb/
Related Posts with Thumbnails