Net::Amazonでキーワード関連順の検索をする方法

Perlプラグイン Net::Amazon を使って、キーワード関連順のソートをする方法。
以前の記事で書いたけど、ゲームソフトの関連度順の検索が、そのままだとできなかった。他のいくつかのジャンルについても、同様のはず。
その原因と、対応方法がわかったので書く。


(以下、Amazonのフォーラムに投稿したものの転載)
「キーワードに関連する商品」順でソートできないのは、APIの問題ではなく、Net::Amazonの仕様でした。
参考までに、解決方法を記載します。


手を加えるのは、Net::Amazon::Requestです。
http://search.cpan.org/~boumenot/Net-Amazon-0.59/lib/Net/Amazon/Request.pm


ソートのデフォルト値は、54行目以降に指定されています。
ここに、Keywordで検索した際のデフォルト値として''を指定します。

use constant DEFAULT_SORT_CRITERIA_MAP => {
    Wishlist     => 'DateAdded',
    All          => '',
    Blended      => '',
    Seller       => '',
    Exchange     => '',
    Keyword      => '', # 追記
};

94行目から、sort値の設定をしています。呼び出し元に指定がなく、DEFAULT_SORT_CRITERIA_MAPにも指定がない場合は、'salesrank'が設定されています。
今回は、Keyword => '' を追記しているため、Sortオプションは指定なしとなります。

    if (! exists $self->{sort}) {
        my $sort = (defined DEFAULT_SORT_CRITERIA_MAP->{$operation}) 
            ? DEFAULT_SORT_CRITERIA_MAP->{$operation} : 'salesrank';
        $self->{sort} = $sort if length($sort);
    }

このように、Sortオプションを指定なしにすると、APIの仕様どおり、relevancerankでSortされた結果が得られます。