amazon-ruby 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/amazon-ruby/client.rb +63 -28
- data/lib/amazon-ruby/client/countrycode.rb +15 -0
- data/lib/amazon-ruby/client/itemtype.rb +11 -0
- data/lib/amazon-ruby/client/operation.rb +25 -0
- data/lib/amazon-ruby/client/responsegroup.rb +7 -0
- data/lib/amazon-ruby/client/searchindex.rb +7 -0
- data/lib/amazon-ruby/exception.rb +4 -0
- data/lib/amazon-ruby/locale.rb +2 -0
- data/lib/amazon-ruby/response.rb +15 -57
- data/lib/amazon-ruby/version.rb +1 -1
- metadata +10 -7
- data/lib/amazon-ruby/cart.rb +0 -25
- data/lib/amazon-ruby/product.rb +0 -34
data/lib/amazon-ruby/client.rb
CHANGED
@@ -1,44 +1,89 @@
|
|
1
|
-
require "amazon-ruby/cart"
|
2
|
-
require "amazon-ruby/product"
|
3
1
|
require "amazon-ruby/response"
|
2
|
+
require "amazon-ruby/client/itemtype"
|
3
|
+
require "amazon-ruby/client/operation"
|
4
|
+
require "amazon-ruby/client/responsegroup"
|
5
|
+
require "amazon-ruby/client/searchindex"
|
6
|
+
require "amazon-ruby/client/countrycode"
|
4
7
|
|
5
8
|
module AmazonRuby
|
6
9
|
class Client
|
7
10
|
|
8
|
-
include Cart
|
9
|
-
|
10
|
-
include Product
|
11
|
-
|
12
11
|
API_VERSION = '2011-08-01'
|
13
12
|
API_SERVICE = 'AWSECommerceService'
|
14
13
|
|
15
|
-
|
14
|
+
def initialize(country, amazon_key, amazon_secret, amazon_associate_tag)
|
16
15
|
@locale = Locale.new(country);
|
17
16
|
@amazon_key = amazon_key
|
18
17
|
@amazon_secret = amazon_secret
|
19
18
|
@amazon_associate_tag = amazon_associate_tag
|
20
19
|
end
|
21
20
|
|
21
|
+
#Amazon access key id
|
22
22
|
def amazon_key
|
23
23
|
@amazon_key
|
24
24
|
end
|
25
25
|
|
26
|
+
#Amazon secret access key
|
26
27
|
def amazon_secret
|
27
28
|
@amazon_secret
|
28
29
|
end
|
29
30
|
|
31
|
+
#Amazon associate tag
|
30
32
|
def amazon_associate_tag
|
31
33
|
@amazon_associate_tag
|
32
34
|
end
|
33
35
|
|
36
|
+
#Locale
|
34
37
|
def locale
|
35
38
|
@locale
|
36
39
|
end
|
37
40
|
|
38
|
-
def
|
39
|
-
|
41
|
+
def add_to_cart()
|
42
|
+
raise UnsupportedFeature
|
43
|
+
end
|
44
|
+
|
45
|
+
def clear_cart()
|
46
|
+
raise UnsupportedFeature
|
47
|
+
end
|
48
|
+
|
49
|
+
def create_cart()
|
50
|
+
raise UnsupportedFeature
|
51
|
+
end
|
52
|
+
|
53
|
+
def get_cart()
|
54
|
+
raise UnsupportedFeature
|
55
|
+
end
|
56
|
+
|
57
|
+
def modify_cart()
|
58
|
+
raise UnsupportedFeature
|
59
|
+
end
|
60
|
+
|
61
|
+
def itemSearch()
|
62
|
+
raise UnsupportedFeature
|
63
|
+
end
|
64
|
+
|
65
|
+
def item_lookup(id, item_type)
|
66
|
+
request_params = {
|
67
|
+
'Operation' => AmazonRuby::Client::Operation::ITEM_LOOKUP,
|
68
|
+
'ItemId' => id,
|
69
|
+
'IdType' => AmazonRuby::Client::ItemType::UPC,
|
70
|
+
'SearchIndex' => AmazonRuby::Client::SearchIndex::ALL,
|
71
|
+
'ResponseGroup' => AmazonRuby::Client::ResponseGroup::ITEM_ATTRIBUTES
|
72
|
+
}
|
73
|
+
get(request_params)
|
74
|
+
end
|
75
|
+
|
76
|
+
def browse_node_lookup()
|
77
|
+
raise UnsupportedFeature
|
40
78
|
end
|
41
79
|
|
80
|
+
def similar_lookup()
|
81
|
+
raise UnsupportedFeature
|
82
|
+
end
|
83
|
+
|
84
|
+
private
|
85
|
+
|
86
|
+
#Base parameters that should be merged with request parameters
|
42
87
|
def base_params
|
43
88
|
{
|
44
89
|
'AWSAccessKeyId' => @amazon_key,
|
@@ -49,28 +94,15 @@ module AmazonRuby
|
|
49
94
|
}
|
50
95
|
end
|
51
96
|
|
52
|
-
#
|
53
|
-
def
|
54
|
-
base_params.merge(@request_params)
|
55
|
-
end
|
56
|
-
|
57
|
-
#Do the request
|
58
|
-
def get(sent_params)
|
97
|
+
#Perform request
|
98
|
+
def get(request_params)
|
59
99
|
raise KeyNotFound unless @amazon_key
|
60
100
|
raise TagNotFound unless @amazon_associate_tag
|
61
101
|
raise SecretNotFound unless @amazon_secret
|
62
102
|
|
63
|
-
#Reset parameters to new parameters for new request
|
64
|
-
@request_params = sent_params
|
65
|
-
|
66
103
|
#Do request
|
67
|
-
|
68
|
-
Response.new(
|
69
|
-
end
|
70
|
-
|
71
|
-
#Build query string from parameter hash
|
72
|
-
def query_string
|
73
|
-
all_params.sort.map { |k, v| "#{k}=" + escape(v) }.join('&')
|
104
|
+
response = Net::HTTP.get_response(url(request_params))
|
105
|
+
Response.new(response)
|
74
106
|
end
|
75
107
|
|
76
108
|
# Adds a signature to a query
|
@@ -83,8 +115,11 @@ module AmazonRuby
|
|
83
115
|
"#{unsigned_query}&Signature=#{signature}"
|
84
116
|
end
|
85
117
|
|
86
|
-
|
87
|
-
|
118
|
+
# The Amazon URL.
|
119
|
+
def url(request_params)
|
120
|
+
combined_params = base_params.merge(request_params)
|
121
|
+
query_string = combined_params.sort.map { |k, v| "#{k}=" + escape(v) }.join('&')
|
122
|
+
|
88
123
|
URI::HTTP.build(
|
89
124
|
:host => @locale.host,
|
90
125
|
:path => '/onca/xml',
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module AmazonRuby
|
2
|
+
class Client
|
3
|
+
module Operation
|
4
|
+
BROWSE_NODE_LOOKUP = 'BrowseNodeLookup'
|
5
|
+
ITEM_LOOKUP = 'ItemLookup'
|
6
|
+
ITEM_SEARCH = 'ItemSearch'
|
7
|
+
SIMILARITY_LOOKUP = 'SimilarityLookup'
|
8
|
+
|
9
|
+
#Not Yet Implemented
|
10
|
+
CUSTOMER_CONTENT_LOOKUP = 'CustomerContentLookup'
|
11
|
+
CUSTOMER_CONTENT_SEARCH = 'CustomerContentSearch'
|
12
|
+
HELP = 'Help'
|
13
|
+
LIST_LOOKUP = 'ListLookup'
|
14
|
+
LIST_SEARCH = 'ListSearch'
|
15
|
+
SELLER_LISTING_LOOKUP = 'SellerListingLookup'
|
16
|
+
SELLER_LISTING_SEARCH = 'SellerListingSearch'
|
17
|
+
SELLER_LOOKUP = 'SellerLookup'
|
18
|
+
TAG_LOOKUP = 'TagLookup'
|
19
|
+
TRANSACTION_LOOKUP = 'TransactionLookup'
|
20
|
+
VEHICLE_PART_LOOKUP = 'VehiclePartLookup'
|
21
|
+
VEHICLE_PART_SEARCH = 'VehiclePartSearch'
|
22
|
+
VEHICLE_SEARCH = 'VehicleSearch'
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/amazon-ruby/locale.rb
CHANGED
data/lib/amazon-ruby/response.rb
CHANGED
@@ -1,35 +1,32 @@
|
|
1
1
|
module AmazonRuby
|
2
2
|
class Response
|
3
3
|
|
4
|
+
def initialize(response)
|
5
|
+
@response_body = response.body
|
6
|
+
@response_code = response.code.to_i
|
7
|
+
end
|
8
|
+
|
9
|
+
#Body of response
|
4
10
|
def response_body
|
5
11
|
@response_body
|
6
12
|
end
|
7
13
|
|
14
|
+
#Response code
|
8
15
|
def response_code
|
9
16
|
@response_code
|
10
17
|
end
|
11
18
|
|
12
|
-
|
13
|
-
|
14
|
-
@response_code
|
15
|
-
@response_xml = nil
|
16
|
-
end
|
17
|
-
|
18
|
-
def errors
|
19
|
-
find('Error')
|
19
|
+
#Was the response valid?
|
20
|
+
def is_valid
|
21
|
+
@response_code == 200 ? true : false;
|
20
22
|
end
|
21
23
|
|
24
|
+
#Return array of values
|
25
|
+
#This is pretty generic. This should be a LOT more robust.
|
22
26
|
def find(attribute)
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
def error_count
|
28
|
-
errors.count
|
29
|
-
end
|
30
|
-
|
31
|
-
def valid_response
|
32
|
-
response_body == 200 ? true : false;
|
27
|
+
result = Array.new
|
28
|
+
xml.xpath("//xmlns:#{attribute}").map do |e| result << e.text end
|
29
|
+
result
|
33
30
|
end
|
34
31
|
|
35
32
|
# The XML document.
|
@@ -37,44 +34,5 @@ module AmazonRuby
|
|
37
34
|
Nokogiri::XML(@response_body)
|
38
35
|
end
|
39
36
|
|
40
|
-
#Such an ugly hacky mess...
|
41
|
-
def parse_xml(xml_input)
|
42
|
-
case xml_input
|
43
|
-
when Nokogiri::XML::Document
|
44
|
-
parse_xml(xml_input.root)
|
45
|
-
when Nokogiri::XML::Element
|
46
|
-
hsh = {}
|
47
|
-
|
48
|
-
xml_input.attributes.each_pair do |key, attr|
|
49
|
-
hsh[key] = attr.value
|
50
|
-
end
|
51
|
-
|
52
|
-
xml_input.children.each do |child|
|
53
|
-
result = parse_xml(child)
|
54
|
-
|
55
|
-
if child.name == 'text'
|
56
|
-
if hsh.empty?
|
57
|
-
return result
|
58
|
-
else
|
59
|
-
hsh['__content__'] = result
|
60
|
-
end
|
61
|
-
elsif hsh[child.name]
|
62
|
-
case hsh[child.name]
|
63
|
-
when Array
|
64
|
-
hsh[child.name] << result
|
65
|
-
else
|
66
|
-
hsh[child.name] = [hsh[child.name]] << result
|
67
|
-
end
|
68
|
-
else
|
69
|
-
hsh[child.name] = result
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
hsh
|
74
|
-
else
|
75
|
-
xml_input.content.to_s
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
37
|
end
|
80
38
|
end
|
data/lib/amazon-ruby/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: amazon-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-12-
|
12
|
+
date: 2011-12-14 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogiri
|
16
|
-
requirement: &
|
16
|
+
requirement: &70205913570620 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,7 +21,7 @@ dependencies:
|
|
21
21
|
version: '1.4'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70205913570620
|
25
25
|
description: A Ruby wrapper for the Amazon Advertising API
|
26
26
|
email:
|
27
27
|
- rhoppes@zappos.com
|
@@ -29,15 +29,18 @@ executables: []
|
|
29
29
|
extensions: []
|
30
30
|
extra_rdoc_files: []
|
31
31
|
files:
|
32
|
-
- lib/amazon-ruby/
|
32
|
+
- lib/amazon-ruby/client/countrycode.rb
|
33
|
+
- lib/amazon-ruby/client/itemtype.rb
|
34
|
+
- lib/amazon-ruby/client/operation.rb
|
35
|
+
- lib/amazon-ruby/client/responsegroup.rb
|
36
|
+
- lib/amazon-ruby/client/searchindex.rb
|
33
37
|
- lib/amazon-ruby/client.rb
|
34
38
|
- lib/amazon-ruby/exception.rb
|
35
39
|
- lib/amazon-ruby/locale.rb
|
36
|
-
- lib/amazon-ruby/product.rb
|
37
40
|
- lib/amazon-ruby/response.rb
|
38
41
|
- lib/amazon-ruby/version.rb
|
39
42
|
- lib/amazon-ruby.rb
|
40
|
-
homepage:
|
43
|
+
homepage: http://www.zappos.com
|
41
44
|
licenses: []
|
42
45
|
post_install_message:
|
43
46
|
rdoc_options: []
|
data/lib/amazon-ruby/cart.rb
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
module AmazonRuby
|
2
|
-
module Cart
|
3
|
-
|
4
|
-
def add_to_cart()
|
5
|
-
puts "ADD TO CART"
|
6
|
-
end
|
7
|
-
|
8
|
-
def clear_cart()
|
9
|
-
puts "CLEAR CART"
|
10
|
-
end
|
11
|
-
|
12
|
-
def create_cart()
|
13
|
-
puts "CREATE CART"
|
14
|
-
end
|
15
|
-
|
16
|
-
def get_cart()
|
17
|
-
puts "GET CART"
|
18
|
-
end
|
19
|
-
|
20
|
-
def modify_cart()
|
21
|
-
puts "MODIFY CART"
|
22
|
-
end
|
23
|
-
|
24
|
-
end
|
25
|
-
end
|
data/lib/amazon-ruby/product.rb
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
module AmazonRuby
|
2
|
-
module Product
|
3
|
-
|
4
|
-
#Hacky mess
|
5
|
-
OPERATION_ITEM_LOOKUP = 'ItemLookup'
|
6
|
-
|
7
|
-
ID_TYPE_UPC = 'UPC'
|
8
|
-
ID_TYPE_EAN = 'EAN'
|
9
|
-
ID_TYPE_ISBN = 'ISBN'
|
10
|
-
ID_TYPE_SKU = 'SKU'
|
11
|
-
|
12
|
-
SEARCH_INDEX_ALL = 'All'
|
13
|
-
|
14
|
-
RESPONSE_GROUP_ITEM_ATTRIBUTES = 'ItemAttributes'
|
15
|
-
|
16
|
-
def itemSearch()
|
17
|
-
puts "DO ITEM SEARCH"
|
18
|
-
end
|
19
|
-
|
20
|
-
def item_lookup(id,item_type)
|
21
|
-
request_params = {'Operation' => OPERATION_ITEM_LOOKUP,'ItemId' => id,'IdType' => ID_TYPE_UPC, 'SearchIndex' => SEARCH_INDEX_ALL, 'ResponseGroup' => RESPONSE_GROUP_ITEM_ATTRIBUTES }
|
22
|
-
get(request_params)
|
23
|
-
end
|
24
|
-
|
25
|
-
def browse_node_lookup()
|
26
|
-
puts "DO BROWSE NODE LOOKUP"
|
27
|
-
end
|
28
|
-
|
29
|
-
def similar_lookup()
|
30
|
-
puts "DO SIMILAR LOOKUP"
|
31
|
-
end
|
32
|
-
|
33
|
-
end
|
34
|
-
end
|