class Amazon::Ecs
Constants
- OPENSSL_DIGEST
- OPENSSL_DIGEST_SUPPORT
- SERVICE_URLS
- VERSION
Public Class Methods
browse_node_lookup(browse_node_id, opts = {})
click to toggle source
Browse node lookup by node ID.
# File lib/amazon/ecs.rb, line 114 def self.browse_node_lookup(browse_node_id, opts = {}) opts[:operation] = 'BrowseNodeLookup' opts[:browse_node_id] = browse_node_id self.send_request(opts) end
configure() { |options| ... }
click to toggle source
# File lib/amazon/ecs.rb, line 84 def self.configure(&proc) raise ArgumentError, "Block is required." unless block_given? yield @@options end
debug()
click to toggle source
Get debug flag.
# File lib/amazon/ecs.rb, line 75 def self.debug @@debug end
debug=(dbg)
click to toggle source
Set debug flag to true or false.
# File lib/amazon/ecs.rb, line 80 def self.debug=(dbg) @@debug = dbg end
item_lookup(item_id, opts = {})
click to toggle source
Search an item by ASIN no.
# File lib/amazon/ecs.rb, line 106 def self.item_lookup(item_id, opts = {}) opts[:operation] = 'ItemLookup' opts[:item_id] = item_id self.send_request(opts) end
item_search(terms, opts = {})
click to toggle source
Search amazon items with search terms. Default search index option is 'Books'. For other search type other than keywords, please specify :type => [search type param name].
# File lib/amazon/ecs.rb, line 91 def self.item_search(terms, opts = {}) opts[:operation] = 'ItemSearch' opts[:search_index] = opts[:search_index] || 'Books' type = opts.delete(:type) if type opts[type.to_sym] = terms else opts[:keywords] = terms end self.send_request(opts) end
options()
click to toggle source
Default search options
# File lib/amazon/ecs.rb, line 65 def self.options @@options end
options=(opts)
click to toggle source
Set default search options
# File lib/amazon/ecs.rb, line 70 def self.options=(opts) @@options = opts end
send_request(opts)
click to toggle source
Generic send request to ECS REST service. You have to specify the :operation parameter.
# File lib/amazon/ecs.rb, line 130 def self.send_request(opts) opts = self.options.merge(opts) if self.options # Include other required options opts[:timestamp] = Time.now.utc.strftime("%Y-%m-%dT%H:%M:%SZ") request_url = prepare_url(opts) log "Request URL: #{request_url}" res = Net::HTTP.get_response(URI::parse(request_url)) unless res.kind_of? Net::HTTPSuccess raise Amazon::RequestError, "HTTP Response: #{res.code} #{res.message}" end Response.new(res.body) end
similarity_lookup(item_id, opts = {})
click to toggle source
Similarity lookup by item ID.
# File lib/amazon/ecs.rb, line 122 def self.similarity_lookup(item_id, opts = {}) opts[:operation] = 'SimilarityLookup' opts[:item_id] = item_id self.send_request(opts) end
validate_request(opts)
click to toggle source
# File lib/amazon/ecs.rb, line 146 def self.validate_request(opts) raise Amazon::RequestError, "" if opts[:associate_tag] end
Protected Class Methods
log(s)
click to toggle source
# File lib/amazon/ecs.rb, line 241 def self.log(s) return unless self.debug if defined? RAILS_DEFAULT_LOGGER RAILS_DEFAULT_LOGGER.error(s) elsif defined? LOGGER LOGGER.error(s) else puts s end end
Private Class Methods
camelize(s)
click to toggle source
# File lib/amazon/ecs.rb, line 297 def self.camelize(s) s.to_s.gsub(/\/(.?)/) { "::" + $1.upcase }.gsub(/(^|_)(.)/) { $2.upcase } end
prepare_url(opts)
click to toggle source
# File lib/amazon/ecs.rb, line 253 def self.prepare_url(opts) country = opts.delete(:country) country = (country.nil?) ? 'us' : country request_url = SERVICE_URLS[country.to_sym] raise Amazon::RequestError, "Invalid country '#{country}'" unless request_url secret_key = opts.delete(:AWS_secret_key) request_host = URI.parse(request_url).host qs = '' opts = opts.collect do |a,b| [camelize(a.to_s), b.to_s] end opts = opts.sort do |c,d| c[0].to_s <=> d[0].to_s end opts.each do |e| log "Adding #{e[0]}=#{e[1]}" next unless e[1] e[1] = e[1].join(',') if e[1].is_a? Array # v = URI.encode(e[1].to_s, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]")) v = self.url_encode(e[1].to_s) qs << "&" unless qs.length == 0 qs << "#{e[0]}=#{v}" end signature = '' unless secret_key.nil? request_to_sign="GET\n#{request_host}\n/onca/xml\n#{qs}" signature = "&Signature=#{sign_request(request_to_sign, secret_key)}" end "#{request_url}?#{qs}#{signature}" end
sign_request(url, key)
click to toggle source
# File lib/amazon/ecs.rb, line 301 def self.sign_request(url, key) return nil if key.nil? if OPENSSL_DIGEST_SUPPORT signature = OpenSSL::HMAC.digest(OPENSSL_DIGEST, key, url) signature = [signature].pack('m').chomp else signature = Base64.encode64(HMAC::SHA256.digest(key, url)).strip end signature = CGI.escape(signature) return signature end
url_encode(string)
click to toggle source
# File lib/amazon/ecs.rb, line 291 def self.url_encode(string) string.gsub( /([^a-zA-Z0-9_.~-]+)/ ) do '%' + $1.unpack( 'H2' * $1.bytesize ).join( '%' ).upcase end end