出版社毎に書籍データを取得する。

日経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度のリクエストで取得する件数を設定できるか調べてみる。