出版社毎に書籍データを取得する。
日経BP社の書籍データを取得してみる
出版社一覧ファイルを読み込みAmazonから書籍データを取得するプログラム
require 'rubygems' require 'amazon/ecs' class AmazonPublisherBatch def initialize(accessKeyId,associateId,country,debug) @debug = debug @accessKeyId = accessKeyId @associateId = associateId @country = country Amazon::Ecs.options = { :aWS_access_key_id => [@accessKeyId], :associate_tag => @associateId, :country => @country } Amazon::Ecs.debug = debug end # def searchAll() publishers = getPublisherArray i=0 while i < publishers.length publisherCode,publisherName = publishers[i] page = 1 res = Amazon::Ecs.item_search('',{:item_page => page, :response_group => 'Medium', :publisher => publisherName}) print "res.is_valid_request? : #{res.is_valid_request?}\n" print "res.has_error? : #{res.has_error?}\n" print "res.error :" #{res.error}\n" print "res.total_pages : #{res.total_pages}\n" print "res.total_results : #{res.total_results}\n" print "res.item_page : #{res.item_page}\n" print "res.items.size : #{res.items.size}\n" print "#{publisherName},#{res.total_results}\n" # 1秒間に1リクエストの制限があるので、取りあえず1秒待つ sleep(1) i+=1 end end def getPublisherArray array = Array.new File::open("isbn_publisher_code_test.csv") {|f1| f1.each {|line| line.chomp! array.push(line.split(",")) } } return array end end bat = AmazonPublisherBatch.new("ここにはアクセスキーIDを設定","ここにはアソシエイトIDを設定","jp",true) bat.searchAll
上記プログラムで使用するisbn_publisher_code_test.csvの内容
8222,日経BP社
プログラムの実行結果
$ ruby amazon_publisher_batch.rb Request URL: http://webservices.amazon.co.jp/onca/xml?Service=AWSECommerceService&Operation=ItemSearch&ItemPage=1&SearchIndex=Books&AWSAccessKeyId=XXXXXXXXXX&ResponseGroup=Medium&Keywords=&AssociateTag=ZZZZZZZZZZ&Publisher=%E6%97%A5%E7%B5%8C%EF%BC%A2%EF%BC%B0%E7%A4%BE res.is_valid_request? : true res.has_error? : false res.error :res.total_pages : 273 res.total_results : 2728 res.item_page : 1 res.items.size : 10 日経BP社,2728
Amazon::Ecs.debugをtrueに設定したのでRequest URLが出力される。
XXXXXXXXXXにはアクセスキーIDが出力される
ZZZZZZZZZZにはアソシエイトIDが出力される
これがAmazonへのリクエストとして送られている。
検索結果は2728件、ページ数が273ページあるので、日経BP社の書籍データを全て取得するには273回のリクエストが必要になる。
1回のリクエストで10件の書籍データを取得しているが、これがデフォルトの設定だと思う。
リクエスト数を減らすには1度に取得する件数を増やせば良いので、1度のリクエストで取得する件数を設定できるか調べてみる。