2013年8月30日金曜日

Amazon API より CSV 出力サンプル

require 'csv'
require 'amazon/ecs'

IMPORT_FILE_NAME = 'isbns.csv'
EXPORT_FILE_NAME = 'foo.csv'

Amazon::Ecs.configure do |options|
  options[:AWS_access_key_id] = "****************"
  options[:AWS_secret_key] = "****************"
  options[:associate_tag] = "****************"
  options[:country] = 'jp'
end

isbns = CSV.read(IMPORT_FILE_NAME).inject([]) {|arr, x| arr << x[0]}
res = Amazon::Ecs.item_lookup(isbns.join(','), response_group: 'Small, ItemAttributes, Images', id_type: 'ISBN', search_index: 'Books')

# puts res.marshal_dump
cols = {
  title: lambda {|x| x.get_unescaped("Title")},
  author: lambda {|x| x.get_unescaped("Author")},
  manufacturer: lambda {|x| x.get_unescaped("Manufacturer")},
  publication_date: lambda {|x| x.get_unescaped("PublicationDate")},
  page_url: lambda {|x| "http://www.amazon.co.jp/dp/#{x.get_unescaped('ASIN')}"},
  isbn: lambda {|x| x.get_unescaped("ISBN")},
  image_url: lambda {|x| h = x.get_hash("SmallImage"); return h["URL"] if h.kind_of?(Hash)}
}

CSV.open(EXPORT_FILE_NAME, 'w') do |csv|
  csv << cols.keys
  res.items.each do |item|
    elem = item.get_element('ItemAttributes')
    csv << cols.each_value.inject([]) {|arr, pr| arr << pr.call(elem)}
  end
end

0 件のコメント:

コメントを投稿