蟻地獄

Twitterに書ききれない長めの文とか書くよ

Amazonガチャシミュレータの作り方

Amazonガチャシミュレータできたよ!
5000円占い

作り方

Amazonガチャの説明によると、アルゴリズムは以下のようになっています。

a)現代用語を含む約85万語の辞書から任意に1用語を抽出
b)その用語をキーワードとしてAmazonで全カテゴリを対象に検索をかける
c)最もキーワードにマッチしている商品を抽出する
d)購入予定額(4600円)と比較し、商品価格が予定額に収まっている場合は注文実行、超えている場合はa)へ戻り再度実行
※購入予定額ははd)が終わり次第計算しなおし、4500円以上の買い物をするまで繰り返す

しかし、この方法はリアルタイムで検索を行うのには向いていません。なぜかというと、Product Advertising APIには1時間2000リクエストまでという制限があるからです。

上記のアルゴリズムの場合、1回ガチャるのにa)〜d)を平均5回繰り返すとして、1時間400ガチャ程度しか捌けません。また、こちらの方が試しているように、最後の1個がなかなか決まらずかなりの回数a)〜d)を繰り返してしまう可能性があります。

では、5000円占いではどうやっているかというと、事前にクローリングして商品データをDBにキャッシュしておき、占うボタンを押したときにはそのキャッシュの中から価格の上限/下限を指定してランダムで選んでいます。

ただし、事前にクローリングするにしても1時間2000回の制限があるので、Amazonの全商品をキャッシュすることはできません。なので、各カテゴリごとに人気順で商品を取ってくるとか、価格帯がいい感じにバラけるようにするなど、ある程度優先順位をつける必要があります。

ちなみに、Product Advertising APIの規約では、

  • 商品データを24時間以上キャッシュしてはいけない
  • キャッシュ更新頻度が1時間に1回以下の場合は価格情報の近くにキャッシュ日時を表示しなければならない
  • 価格情報が変更される可能性がある旨を明記しなければならない

など細かい決まりがあります。ちゃんと守らないとサイト審査で落とされるよ!

クローリングはnode.jsでやってるんだけど、そのあたりは需要があればまた書くかも。Amazon商品のランダム選択の実装はなにげに奥が深くて楽しいので、みんなもやってみるといいよ!