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された結果が得られます。