Class: AmazonRuby::Client

Inherits:
Object
  • Object
show all
Includes:
Cart, Product
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

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_paramsObject

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_tagObject



30
31
32
# File 'lib/amazon-ruby/client.rb', line 30

def amazon_associate_tag
	@amazon_associate_tag
end

#amazon_keyObject



22
23
24
# File 'lib/amazon-ruby/client.rb', line 22

def amazon_key
	@amazon_key
end

#amazon_secretObject



26
27
28
# File 'lib/amazon-ruby/client.rb', line 26

def amazon_secret
	@amazon_secret
end

#base_paramsObject



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

Raises:



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

#localeObject



34
35
36
# File 'lib/amazon-ruby/client.rb', line 34

def locale
	@locale
end

#query_stringObject

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_paramsObject



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

#urlObject

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