class Middleman::AmazonLink::EcsLookupWrapper

Public Class Methods

new(ecs_opt, opt={}) click to toggle source
# File lib/middleman-amazon-link/ecs_wrapper.rb, line 6
def initialize(ecs_opt, opt={})
  ecs_opt[:country] ||= 'jp'
  ecs_opt[:response_group] = 'Images,ItemAttributes'

  Amazon::Ecs.options= ecs_opt
  # required
  #   :AWS_access_key_id
  #   :AWS_secret_key
  # optional
  #   :associate_tag
  #   :country

  @use_cache = opt[:use_cache]
  @cache_dir = opt[:cache_dir] || "./caches/amazon"

  @result_cache = {}
end

Public Instance Methods

cache_filename(asin) click to toggle source

caching

# File lib/middleman-amazon-link/ecs_wrapper.rb, line 63
def cache_filename(asin)
  File.join(@cache_dir, asin)
end
item_lookup(asin) click to toggle source
# File lib/middleman-amazon-link/ecs_wrapper.rb, line 23
def item_lookup(asin)
  return @result_cache[asin] if @result_cache.has_key?(asin)
  return @result_cache[asin] = load_cache(asin) if @use_cache && File.exist?(cache_filename(asin))

  cnt = 0
  begin
    res = Amazon::Ecs.item_lookup(asin)
  rescue Amazon::RequestError => err
    if /503/ =~ err.message && cnt < 3
      sleep 3
      cnt += 1
      $stderr.puts "  retrying...#{asin}/#{cnt}"
      $stderr.puts "    options: #{Amazon::Ecs.options.inspect}"
      retry
    else
      raise err
    end
  end

  res.items.each do |item|
    hash = {
      asin:        asin,
      title:       item.get('ItemAttributes/Title').to_s,
      author:      item.get('ItemAttributes/Author').to_s,
      publisher:   item.get('ItemAttributes/Manufacturer').to_s,
      date:        item.get('ItemAttributes/PublicationDate').to_s || 
                   item.get('ItemAttributes/ReleaseDate').to_s,
      detail_url:  item.get('DetailPageURL').to_s,

      image_small: item.get('SmallImage/URL').to_s,
      image_medium: item.get('MediumImage/URL').to_s,
      image_large: item.get('LargeImage/URL').to_s,
    }
    @result_cache[asin] = hash
    save_cache(asin, hash) if @use_cache
  end
  return @result_cache[asin]
end
load_cache(asin) click to toggle source
# File lib/middleman-amazon-link/ecs_wrapper.rb, line 66
def load_cache(asin)
  Marshal.load(File.read(cache_filename(asin)))
end
save_cache(asin, hash) click to toggle source
# File lib/middleman-amazon-link/ecs_wrapper.rb, line 69
def save_cache(asin, hash)
  dir = File.dirname(cache_filename(asin))
  require 'fileutils'
  FileUtils.mkdir_p(dir) unless File.exists?(dir)
  File.open(cache_filename(asin), 'wb'){|f| f.write(Marshal.dump(hash))}
end