Class: AmazonRuby::Client
- Inherits:
-
Object
- Object
- AmazonRuby::Client
- Defined in:
- lib/amazon-ruby/client.rb
Constant Summary collapse
- API_VERSION =
'2011-08-01'- API_SERVICE =
'AWSECommerceService'
Constants included from Product
Product::ID_TYPE_EAN, Product::ID_TYPE_ISBN, Product::ID_TYPE_SKU, Product::ID_TYPE_UPC, Product::OPERATION_ITEM_LOOKUP, Product::RESPONSE_GROUP_ITEM_ATTRIBUTES, Product::SEARCH_INDEX_ALL
Instance Method Summary collapse
-
#all_params ⇒ Object
Get all parameters.
- #amazon_associate_tag ⇒ Object
- #amazon_key ⇒ Object
- #amazon_secret ⇒ Object
- #base_params ⇒ Object
-
#escape(value) ⇒ Object
Escape value.
-
#get(sent_params) ⇒ Object
Do the request.
-
#initialize(country, amazon_key, amazon_secret, amazon_associate_tag) ⇒ Client
constructor
A new instance of Client.
- #locale ⇒ Object
-
#query_string ⇒ Object
Build query string from parameter hash.
- #request_params ⇒ Object
-
#sign(unsigned_query) ⇒ Object
Adds a signature to a query.
-
#url ⇒ Object
The Amazon URL.
Methods included from Product
#browse_node_lookup, #itemSearch, #item_lookup, #similar_lookup
Methods included from Cart
#add_to_cart, #clear_cart, #create_cart, #get_cart, #modify_cart
Constructor Details
#initialize(country, amazon_key, amazon_secret, amazon_associate_tag) ⇒ Client
Returns a new instance of Client.
15 16 17 18 19 20 |
# File 'lib/amazon-ruby/client.rb', line 15 def initialize(country, amazon_key, amazon_secret, amazon_associate_tag) @locale = Locale.new(country); @amazon_key = amazon_key @amazon_secret = amazon_secret @amazon_associate_tag = amazon_associate_tag end |
Instance Method Details
#all_params ⇒ Object
Get all parameters
53 54 55 |
# File 'lib/amazon-ruby/client.rb', line 53 def all_params base_params.merge(@request_params) end |
#amazon_associate_tag ⇒ Object
30 31 32 |
# File 'lib/amazon-ruby/client.rb', line 30 def amazon_associate_tag @amazon_associate_tag end |
#amazon_key ⇒ Object
22 23 24 |
# File 'lib/amazon-ruby/client.rb', line 22 def amazon_key @amazon_key end |
#amazon_secret ⇒ Object
26 27 28 |
# File 'lib/amazon-ruby/client.rb', line 26 def amazon_secret @amazon_secret end |
#base_params ⇒ Object
42 43 44 45 46 47 48 49 50 |
# File 'lib/amazon-ruby/client.rb', line 42 def base_params { 'AWSAccessKeyId' => @amazon_key, 'AssociateTag' => @amazon_associate_tag, 'Service' => API_SERVICE, 'Timestamp' => Time.now.utc.strftime('%Y-%m-%dT%H:%M:%SZ'), 'Version' => API_VERSION } end |
#escape(value) ⇒ Object
Escape value
95 96 97 98 99 |
# File 'lib/amazon-ruby/client.rb', line 95 def escape(value) value.gsub(/([^a-zA-Z0-9_.~-]+)/) do '%' + $1.unpack('H2' * $1.bytesize).join('%').upcase end end |
#get(sent_params) ⇒ Object
Do the request
58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/amazon-ruby/client.rb', line 58 def get(sent_params) raise KeyNotFound unless @amazon_key raise TagNotFound unless @amazon_associate_tag raise SecretNotFound unless @amazon_secret #Reset parameters to new parameters for new request @request_params = sent_params #Do request resp = Net::HTTP.get_response(url) Response.new(resp.body, resp.code) end |
#locale ⇒ Object
34 35 36 |
# File 'lib/amazon-ruby/client.rb', line 34 def locale @locale end |
#query_string ⇒ Object
Build query string from parameter hash
72 73 74 |
# File 'lib/amazon-ruby/client.rb', line 72 def query_string all_params.sort.map { |k, v| "#{k}=" + escape(v) }.join('&') end |
#request_params ⇒ Object
38 39 40 |
# File 'lib/amazon-ruby/client.rb', line 38 def request_params @request_params end |
#sign(unsigned_query) ⇒ Object
Adds a signature to a query
77 78 79 80 81 82 83 84 |
# File 'lib/amazon-ruby/client.rb', line 77 def sign(unsigned_query) digest = OpenSSL::Digest::Digest.new('sha256') url_string = ['GET', @locale.host, '/onca/xml', unsigned_query].join("\n") hmac = OpenSSL::HMAC.digest(digest, @amazon_secret, url_string) signature = escape([hmac].pack('m').chomp) "#{unsigned_query}&Signature=#{signature}" end |
#url ⇒ Object
The Amazon URL.
87 88 89 90 91 92 |
# File 'lib/amazon-ruby/client.rb', line 87 def url URI::HTTP.build( :host => @locale.host, :path => '/onca/xml', :query => sign(query_string)) end |