2004.06.06 (日)

Amazonのウィッシュリストをblogに表示する

今日はAmazonのウィッシュリストをトップページに表示してみることにする。Amazonのウィッシュリストは気になる本リストとしてとても便利だ。Amazonで気になる書籍を見つけたらすかさずウィッシュリストに入れればよい。クリックひとつの操作だけだ。これをblogのトップページに画像付きで並べられれば、時折眺めては思い出すことができる。ボタンひとつでblogに表示できるので、なかなか悪くない方法だと思う。

ウィッシュリストを取り出すにはAmazon Web Services(AWS)でWishlistSearchという検索を行えばよい。前回作成したスクリプトを拡張すれば簡単に作ることができる。しかし、今回は既存のpluginを使ってみることにした。pluginの組み込み方や、作り方の勉強もしたいからだ。

今回は平田さんのaws.plを使うことにした。平田さんは下記の書籍の著者であり、今では MovableType 開発元のSix Apartの偉い人になっている。

Movable Typeで今すぐできるウェブログ入門
平田 大治


インプレス (2003/08/01)
¥ 1,890
ISBN: 4844318128

さて、aws.plを使う手順は次の通り。デベロッパトークンやアフィリエイトIDの取得は予め行っているものとする。

  1. simple amazon log aws.pl - MT plugin for Amazon webservices からダウンロード、インストール。

    インストール方法は、展開して出てくる aws.pl を mt.cfg を置いたディレクトリの plugins ディレクトリの下に置けばよい。 既に修正版が配布されてるかもしれないが、上記リンクのものはそのままでは動かなかった。aws.pl に以下の修正を加える必要がある。

  2. 「amazon.com」を「amazon.co.jp」に修正。
  3. 「WishListSearch」を「WishlistSearch」に修正。
  4. さらに、perl 5.8の人は次の修正も必要らしい。

  5. のまのしわざ MT plug-in開発の勉強(aws.plの修正)の修正を加える。
  6. ウィッシュリストを表示するには下記のように書けばよい。ウィッシュリストの場合には、ウィッシュリストIDを指定しなければならない。Amazonで自分のウィッシュリストを開いて、作成者の情報の編集ボタンを押してみよう。そのページのURLの一部にウィッシュリストIDは含まれている。私の場合は「2J09IUCQB4QI」となっている。「⇒」のところは折り返さずに1行で書く。

    <MTAws dev_token="デベロッパトークン" associate_id="アソシエイトID"
        search="WishlistSearch" query="ウィッシュリストID">
        <a href="http://www.amazon.co.jp/exec/obidos/ASIN/⇒
        <$MTAwsAsin$>/ref=nosim/アソシエイトID">
        <img alt="<$MTAwsProductName$>" src="<$MTAwsImageUrlMedium$>"
             border=0 />
        <br />
        </a>
    </MTAws>
    

    表示させてみると、ウィッシュリストが10件分表示される。これだけでは寂しいのでもっと表示させよう。AWSでは1回につき10件の検索結果を1ページ分の情報として取得できる。そして、ページ番号を指定することで10件ごとに順次取得することができる。ところが、ウィッシュリスト検索ではパラメータにページ指定が含まれていない。awl.plでもページ指定を渡さないようになっている。これは困った。

    でも実はやってみればできるんである。ページ番号指定はウィッシュリスト検索のドキュメントにはないパラメータだが、指定してみるとちゃんとページごとに検索結果を取得できる。そこで、aws.plを次のように修正する。赤字のところを追加した。もちろん、今回はたまたま動いただけで、今後動かなくなってしまう可能性もあるので注意が必要だ。

  7. 10件を超えるウィッシュリストを表示させる修正を加える。
  8.     'WishlistSearch' => [ "dev-t", "t", "type", "f", "locale", "page" ],
    

    テンプレートに埋め込むタグに下記のようにpage指定を追加する。さらにページ番号のところを2、3と変えて3つほど並べると、ウィッシュリストを30件表示できるわけだ。

    <MTAws dev_token="デベロッパトークン" associate_id="アソシエイトID"
        search="WishlistSearch" query="ウィッシュリストID" page="1">
        <a href="http://www.amazon.co.jp/exec/obidos/ASIN/<⇒
        $MTAwsAsin$>/ref=nosim/アソシエイトID">
        <img alt="<$MTAwsProductName$>" src="<$MTAwsImageUrlMedium$>"
             border=0 />
        <br />
        </a>
    </MTAws>
    

    これで喜んでいたら、30件表示されるはずが数えてみるとどうも数が少々少ないことに気づく。調べて見ると画像が提供されていない書籍やDVDがあることがわかった。画像がない場合には、サイズ1×1の画像ファイルのURLが返ってくるのだ。画像はなくてもリンクだけは表示しておきたいのだが、これではクリックもできない。そこで、少々強引だが、次のような修正を加えてみた。ちょっと無理のあるやり方だが、最小限の変更で済ますためにこうしてみた。追加したのは赤字のところ。

  9. 画像のないアイテムに仮の画像を表示する修正を加える。
  10. sub aws_detail {
        my ($ctx, $e) = @_;
        defined (my $detail = $ctx->stash("Detail")) or return '';
        if (ref $detail->{$e} eq 'ARRAY') {
            #return Jcode->new(join ", ", @{$detail->{$e}}, 'utf8')->utf8;
            return join ", ", @{$detail->{$e}};
        } else {
            if ($e =~ /(ImageUrlSmall|ImageUrlMedium|ImageUrlLarge)/) {
                use LWP::Simple;
                my $data = get($detail->{$e});
                use Image::Magick;
                my $image = Image::Magick->new;
                $image->BlobToImage($data);
                if ($image->Get('width', 'height') == (1, 1)) {
                    return "http://images-jp.amazon.com/images/G/09/".
                           "x-locale/detail/thumb-no-image.gif";
                }
            }
            # return $detail->{$e} . Jcode->new($detail->{$e},'utf8')->utf8 || '';
            return $detail->{$e} || '';
        }
    }
    
    

    これで画像のないアイテムのところには「No image」という画像が表示されるようになった。なお、Amazon側の負荷などの影響か、時折検索結果をうまく得られないことがある。そういう時は、少し時間をおいてから再度リビルドしよう。

やろうとしてたことはひとまず実現できた。平田さんのaws.plは非常に簡潔に書かれていながら、とても汎用にできている。たくさんのことができるのにやたらと行数が短いのだ。しかも今回のようにパラメータを追加するような変更がとても簡単にできる。今後Amazon側でAPIに拡張が加えられても容易に対応できそうだ。このようなスクリプトを提供してくださっていることに感謝します。

   

トラックバック(1)

トラックバックURL: http://blog.bibinko.com/mt-bin/mt-tb.cgi/121

黄金花月の別名は「金のなる木」 6日の日曜日に【9479】インプレスにビッグ材料発表がありました。 [6月7日/日本経済新聞 朝刊] ヤフーとインプレス、動画解説入りのネッ 続きを読む

コメントする

アーカイブ

Photo Calendar

最近のコメント

最近のトラックバック