Class: Amazon::Ecs

Inherits:
Object
  • Object
show all
Defined in:
lib/amazon/ecs.rb

Defined Under Namespace

Classes: Response

Constant Summary collapse

VERSION =
'2.2.12'
SERVICE_URLS =
{
    :us => 'http://ecs.amazonaws.com/onca/xml',
    :uk => 'http://ecs.amazonaws.co.uk/onca/xml',
    :ca => 'http://ecs.amazonaws.ca/onca/xml',
    :de => 'http://ecs.amazonaws.de/onca/xml',
    :jp => 'http://ecs.amazonaws.jp/onca/xml',
    :fr => 'http://ecs.amazonaws.fr/onca/xml',
    :it => 'http://webservices.amazon.it/onca/xml',
    :cn => 'http://webservices.amazon.cn/onca/xml',
    :es => 'http://webservices.amazon.es/onca/xml'
}
OPENSSL_DIGEST_SUPPORT =
OpenSSL::Digest.constants.include?( 'SHA256' ) ||
OpenSSL::Digest.constants.include?( :SHA256 )
OPENSSL_DIGEST =
OpenSSL::Digest.new( 'sha256' )
@@options =
{
  :version => "2011-08-01",
  :service => "AWSECommerceService"
}
@@debug =
false

Class Method Summary collapse

Class Method Details

.browse_node_lookup(browse_node_id, opts = {}) ⇒ Object

Search a browse node by BrowseNodeId



112
113
114
115
116
117
# File 'lib/amazon/ecs.rb', line 112

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| ... } ⇒ Object

Yields:

Raises:

  • (ArgumentError)


82
83
84
85
# File 'lib/amazon/ecs.rb', line 82

def self.configure(&proc)
  raise ArgumentError, "Block is required." unless block_given?
  yield @@options
end

.debugObject

Get debug flag.



73
74
75
# File 'lib/amazon/ecs.rb', line 73

def self.debug
  @@debug
end

.debug=(dbg) ⇒ Object

Set debug flag to true or false.



78
79
80
# File 'lib/amazon/ecs.rb', line 78

def self.debug=(dbg)
  @@debug = dbg
end

.item_lookup(item_id, opts = {}) ⇒ Object

Search an item by ASIN no.



104
105
106
107
108
109
# File 'lib/amazon/ecs.rb', line 104

def self.item_lookup(item_id, opts = {})
  opts[:operation] = 'ItemLookup'
  opts[:item_id] = item_id
  
  self.send_request(opts)
end

.item_search(terms, opts = {}) ⇒ Object

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].



89
90
91
92
93
94
95
96
97
98
99
100
101
# File 'lib/amazon/ecs.rb', line 89

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

.optionsObject

Default search options



63
64
65
# File 'lib/amazon/ecs.rb', line 63

def self.options
  @@options
end

.options=(opts) ⇒ Object

Set default search options



68
69
70
# File 'lib/amazon/ecs.rb', line 68

def self.options=(opts)
  @@options = opts
end

.send_request(opts) ⇒ Object

Generic send request to ECS REST service. You have to specify the :operation parameter.



120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
# File 'lib/amazon/ecs.rb', line 120

def self.send_request(opts)

	  # setting up backoff options for errorless and overloadless requesting
  # numbers taken from amazon API guidelines
   backoff = ExponentialBackoff.new(0.2, 30)
   backoff.multiplier = 2
   backoff.randomize_factor = 0.25

      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}"
     
	
   
   backoff.until_success do |interval, retry_count|
     # quit requests after a few failed attempts
     Response.new(res.error) if retry_count > 6
     res = Net::HTTP.get_response(URI::parse(request_url))

       unless res.kind_of? Net::HTTPSuccess
         # raise Amazon::RequestError, "HTTP Response: #{res.code} #{res.message}"
	     print "Failed with: #{res.code} #{res.message}"
          end
     return Response.new(res.body)
      end
end

.validate_request(opts) ⇒ Object



151
152
153
# File 'lib/amazon/ecs.rb', line 151

def self.validate_request(opts) 
  raise Amazon::RequestError, "" if opts[:associate_tag]
end