2017/12/02

amazon-ecs を使って Kindle マンガの情報を取得する #okinawarb

この記事は Okinawa.rb Advent Calendar 2017 2日目の記事です。
1日目は @hanachin さんの「Rubyで国民健康保険料を計算する」でした。

Amazon は Product Advertising API というものを提供していて、商品を検索したりできます。
利用するためには affiliate.amazon.co.jp への登録が必要です。
加えて、 Advertising API を使うサイトなども申請する必要があります。
ちなみに登録に関してはにはこちらの記事が有用です。

Product Advertising API の token を取得したので、いざ商品検索。
具体的にはこちらを参考にしつつ書き始めましたが、この記事では商品検索リクエスト(item_search)を使っています。
私は検索ではなく「特定の値段以下のKindle本」が欲しいので、send_request で直接リクエストを作ることにしました。

とは言え実行するアクションは「ItemSearch」なので検索に相当します。
なお、 Advertising API は「特定のノード以下の情報を検索」ができます。
browse_node: 2293143051 というマジックナンバーがそれです。
2293143051 は Kindle book store のノードのようです。
Amazon本家のサイトの「Kindle ストア」にカーソルを合わせたりすると URL に含まれていて、他にも大量にあります

さて、リクエストの目星が付いたので実行してみましょう。
require 'amazon/ecs'
Amazon::Ecs.configure do |options|
options[:subscription_id] = options[:AWS_access_key_id] = 'hoge'
options[:AWS_secret_key] = 'fuga'
options[:associate_tag] = 'piyo'
end
result = Amazon::Ecs.send_request({response_group: 'Images,ItemAttributes,Large',
operation: 'ItemSearch',
browse_node: '2293143051',
minimum_price: 0,
maximum_price: 0,
search_index: 'Books'})
view raw request.rb hosted with ❤ by GitHub
あれ。取れていませんね。何故だろう。

デバッグのために request を inspect したりして request の URI を取得。
その上参考記事の URI と比較すると、どうやら amazon.com に request を送っているようです。
(ここはエラーの詳細を書きたかったのですが、BANされたので割愛)
ということで marketplace: 'ja' を追加すると amazon.co.jp にリクエストを送るようになりました。
result = Amazon::Ecs.send_request({response_group: 'Images,ItemAttributes,Large',
operation: 'ItemSearch',
browse_node: '2293143051',
minimum_price: 0,
maximum_price: 0,
search_index: 'Books'
marketplace: 'jp'})
# return items
view raw fix_request.rb hosted with ❤ by GitHub
これで無料の Kindle 本を取得できました。


まとめ

amazon-ecs を使って無料の Kindle 本を集めることができました。
私はやってないのですが、これを購入する部分まで書くと素敵なことになりそうですね。

ということで Okinawa.rb Advent Calendar 2日目の記事でした。
なお、クリスマスプレゼントはこちらで募集しています。
明日の担当は @_atton さんです。というか私です。そして3日目の記事はこちら


環境

  • OS: Ubuntu 16.04.3 LTS 
  • ruby: 2.4.2p198 (2017-09-14 revision 59899) [x86_64-darwin16]
  • rubygems: 2.6.13
  • amazon-ecs: 2.5.0


参考

0 件のコメント:

コメントを投稿