ItemSearchする時に、powerで条件を加える

ニートせいかつ

ニートになって収入0に今更怯えていたり、Webエンジニアとして3年やってきたのにHTML/CSSを書く機会が3回ぐらいしかなくて全く書けないので1から勉強したり、ビュー周りをゴリゴリ書いていた。

そのあたりの話題は書いてもしょうがないので更新が途絶えていたが、アプリの裏側にやっと手がまわせるようになったので、ネタができた。ので書く。

特定の月のデータに絞る

これまでの成果により、書籍情報は取れるようになった。次は、詳細に条件を絞っていくことにしよう。

ある月のデータを取得する方法について考える。

ItemSearchでは、検索する時にpowerというパラメータを付与できる。powerでは色々できるのだが、今回はその中で出版日の指定を行う。

options = {
    country: 'jp',
    sort: 'daterank',
    browse_node: '2410280051',
    response_group: 'Medium',
    power: 'pubdate:during 05-2014' # 2014年5月に出版されたものを検索
}
res = Amazon::Ecs.item_search("", options)

pubdateが出版日の指定で、値をduring 05-2014とすることで、2014年5月に出版されたものを取得している。

特定の出版社も合わせて絞る

出版社でも絞りたいが、これまたpowerでpublisherを指定すれば取れる。powerを2つ以上指定する時は、andでつなげておけば良いらしい。

options = {
    country: 'jp',
    sort: 'daterank',
    browse_node: '2410280051',
    response_group: 'Medium',
    power: 'publisher:KADOKAWA and pubdate:during 03-2014' # 2014年5月に出版されたKADOKAWAが出版しているものを検索
}
res = Amazon::Ecs.item_search("", options)

試した感じだと、publisherでは指定した文字列が含まれていれば良いようだ。例えば、正式には「KADOKAWA / 富士見書房」のようなpublisherの場合、「富士見書房」で検索すれば、ちゃんと取れる。

ページと得られる結果の数

1回のリクエストで得られる商品の数は、10個と決まっている。もちろんページがあって上限10ページまでで、それ以上はエラーが返ってくるようになっている。つまり、1つの同じパラメータで得られるデータは100個が限界。

ページの指定は下記のようにする。上のコードにさらに付け足してみた。

options = {
    country: 'jp',
    sort: 'daterank',
    browse_node: '2410280051',
    response_group: 'Medium',
    power: 'publisher:KADOKAWA and pubdate:during 03-2014',
    item_page: 2 # 2ページ目を検索
}
res = Amazon::Ecs.item_search("", options)

ページの始まりは1から。10ページ以上のデータは、MoreSearchResultsURLという項目を活用して、Amazonへの誘導URLを貼ることができる。

ユーザが直接APIを叩くのでなければ、アイテムがなるべく100以下になるように調節することも可能だろう。browse_nodeのIDやpowerのpubdate、publisherなどの指定で細分化させて、それぞれ取ってくる形にすれば良いと思う(反則かはよくわからない)。browse_nodeなんかはnodeの値がAPIを叩けばすぐ分かるから、おそらく自動的に掘り下げるプログラムも書けないわけじゃないと思う。