amazon-ecs 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +5 -0
- data/README +37 -36
- data/lib/amazon/ecs.rb +23 -5
- data/test/amazon/ecs_test.rb +28 -1
- metadata +4 -4
data/CHANGELOG
CHANGED
data/README
CHANGED
@@ -1,16 +1,15 @@
|
|
1
1
|
== amazon-ecs
|
2
2
|
|
3
|
-
Generic Product Advertising
|
4
|
-
|
5
|
-
Element wrapper classes for easy access to REST XML output.
|
3
|
+
Generic Product Advertising Ruby API using Hpricot. Uses Response and
|
4
|
+
Element wrapper classes for easy access to the REST API XML output.
|
6
5
|
|
7
6
|
It is generic, so you can easily extend <tt>Amazon::Ecs</tt> to support
|
8
7
|
other not implemented REST operations; and it is also generic because it just wraps around
|
9
8
|
Hpricot element object, instead of providing one-to-one object/attributes to XML elements map.
|
10
9
|
|
11
|
-
|
12
|
-
no
|
13
|
-
instead you just need to
|
10
|
+
The idea is as the API evolves, there is a change in REST XML output structure,
|
11
|
+
no updates will be required on <tt>amazon-ecs</tt> gem,
|
12
|
+
instead you just need to update the element path.
|
14
13
|
|
15
14
|
== INSTALLATION
|
16
15
|
|
@@ -18,22 +17,22 @@ instead you just need to change the element path.
|
|
18
17
|
|
19
18
|
== EXAMPLE
|
20
19
|
|
21
|
-
require
|
20
|
+
require "amazon/ecs"
|
22
21
|
|
23
22
|
# set the default options; options will be camelized and converted to REST request parameters.
|
24
|
-
Amazon::Ecs.options = {:aWS_access_key_id => [your access key]}
|
23
|
+
Amazon::Ecs.options = {:aWS_access_key_id => "[your access key]"}
|
25
24
|
|
26
25
|
# to generate signed requests include your secret key:
|
27
|
-
Amazon::Ecs.options = {:aWS_access_key_id => [your developer token], :aWS_secret_key => [your secret access key]}
|
26
|
+
Amazon::Ecs.options = {:aWS_access_key_id => "[your developer token]", :aWS_secret_key => "[your secret access key]"}
|
28
27
|
|
29
28
|
# alternatively,
|
30
29
|
Amazon::Ecs.configure do |options|
|
31
|
-
options[:aWS_access_key_id] = [your access key]
|
32
|
-
options[:aWS_secret_key] = [you secret key]
|
30
|
+
options[:aWS_access_key_id] = "[your access key]"
|
31
|
+
options[:aWS_secret_key] = "[you secret key]"
|
33
32
|
end
|
34
33
|
|
35
34
|
# options provided on method call will merge with the default options
|
36
|
-
res = Amazon::Ecs.item_search(
|
35
|
+
res = Amazon::Ecs.item_search("ruby", {:response_group => "Medium", :sort => "salesrank"})
|
37
36
|
|
38
37
|
# some common response object methods
|
39
38
|
res.is_valid_request? # return true if request is valid
|
@@ -46,22 +45,31 @@ instead you just need to change the element path.
|
|
46
45
|
# traverse through each item (Amazon::Element)
|
47
46
|
res.items.each do |item|
|
48
47
|
# retrieve string value using XML path
|
49
|
-
item.get(
|
50
|
-
item.get(
|
48
|
+
item.get("asin")
|
49
|
+
item.get("itemattributes/title")
|
51
50
|
|
52
|
-
#
|
53
|
-
|
54
|
-
|
51
|
+
# return Amazon::Element instance
|
52
|
+
item_attributes = item.get_element("itemattributes")
|
53
|
+
item_attributes.get("title")
|
55
54
|
|
56
55
|
# return first author or a string array of authors
|
57
|
-
|
58
|
-
|
56
|
+
item_attributes.get("author") # "Author 1"
|
57
|
+
item_attributes.get_array("author") # ["Author 1", "Author 2", ...]
|
59
58
|
|
60
59
|
# return an hash of children text values with the element names as the keys
|
61
|
-
item.get_hash(
|
60
|
+
item.get_hash("smallimage") # {:url => ..., :width => ..., :height => ...}
|
61
|
+
|
62
|
+
# return the first matching path as Amazon::Element
|
63
|
+
item_height = item.get_element("itemdimensions/height")
|
64
|
+
|
65
|
+
# retrieve attributes from Amazon::Element
|
66
|
+
item_height.attributes["units"] # "hundredths-inches"
|
67
|
+
|
68
|
+
# return an array of Amazon::Element
|
69
|
+
authors = item.get_elements("author")
|
62
70
|
|
63
|
-
#
|
64
|
-
reviews = item/
|
71
|
+
# return Hpricot::Elements object or nil if not found
|
72
|
+
reviews = item/"editorialreview"
|
65
73
|
|
66
74
|
# traverse through Hpricot elements
|
67
75
|
reviews.each do |review|
|
@@ -69,33 +77,26 @@ instead you just need to change the element path.
|
|
69
77
|
Amazon::Element.get_hash(review) # [:source => ..., :content ==> ...]
|
70
78
|
|
71
79
|
# Or to get unescaped HTML values
|
72
|
-
Amazon::Element.get_unescaped(review,
|
73
|
-
Amazon::Element.get_unescaped(review,
|
80
|
+
Amazon::Element.get_unescaped(review, "source")
|
81
|
+
Amazon::Element.get_unescaped(review, "content")
|
74
82
|
|
75
83
|
# Or this way
|
76
84
|
el = Amazon::Element.new(review)
|
77
|
-
el.get_unescaped(
|
78
|
-
el.get_unescaped(
|
85
|
+
el.get_unescaped("source")
|
86
|
+
el.get_unescaped("content")
|
79
87
|
end
|
80
|
-
|
81
|
-
# returns Amazon::Element instead of string
|
82
|
-
item.search_and_convert('itemattributes').
|
83
88
|
end
|
84
89
|
|
85
|
-
Refer to Amazon
|
86
|
-
|
90
|
+
Refer to Amazon Product Advertising API documentation for more information
|
91
|
+
on Amazon REST request parameters and XML output:
|
92
|
+
https://affiliate-program.amazon.com/gp/advertising/api/detail/main.html
|
87
93
|
|
88
94
|
To get a sample of Amazon REST response XML output, use AWSZone.com scratch pad:
|
89
95
|
http://www.awszone.com/scratchpads/aws/ecs.us/index.aws
|
90
96
|
|
91
97
|
== SOURCE CODES
|
92
98
|
|
93
|
-
* http://github.com/jugend/amazon-ecs/tree/master
|
94
|
-
|
95
|
-
== LINKS
|
96
|
-
|
97
99
|
* http://github.com/jugend/amazon-ecs
|
98
|
-
* http://www.pluitsolutions.com/amazon-ecs
|
99
100
|
|
100
101
|
== CREDITS
|
101
102
|
|
data/lib/amazon/ecs.rb
CHANGED
@@ -282,14 +282,27 @@ module Amazon
|
|
282
282
|
elements
|
283
283
|
end
|
284
284
|
|
285
|
-
#
|
286
|
-
#
|
285
|
+
# Return an array of Amazon::Element matching the given path, or Amazon::Element if there
|
286
|
+
# is only one element found.
|
287
|
+
#
|
288
|
+
# <b>DEPRECATED:</b> Please use <tt>get_elements</tt> and <tt>get_element</tt> instead.
|
287
289
|
def search_and_convert(path)
|
290
|
+
elements = self.get_elements(path)
|
291
|
+
return elements.first if elements and elements.size == 1
|
292
|
+
elements
|
293
|
+
end
|
294
|
+
|
295
|
+
# Return an array of Amazon::Element matching the given path
|
296
|
+
def get_elements(path)
|
288
297
|
elements = self./(path)
|
289
298
|
return unless elements
|
290
299
|
elements = elements.map{|element| Element.new(element)}
|
291
|
-
|
292
|
-
|
300
|
+
end
|
301
|
+
|
302
|
+
# Similar with search_and_convert but always return first element if more than one elements found
|
303
|
+
def get_element(path)
|
304
|
+
elements = get_elements(path)
|
305
|
+
elements[0] if elements
|
293
306
|
end
|
294
307
|
|
295
308
|
# Get the text value of the given path, leave empty to retrieve current element value.
|
@@ -311,7 +324,12 @@ module Amazon
|
|
311
324
|
def get_hash(path='')
|
312
325
|
Element.get_hash(@element, path)
|
313
326
|
end
|
314
|
-
|
327
|
+
|
328
|
+
def attributes
|
329
|
+
return unless self.elem
|
330
|
+
self.elem.attributes
|
331
|
+
end
|
332
|
+
|
315
333
|
# Similar to #get, except an element object must be passed-in.
|
316
334
|
def self.get(element, path='')
|
317
335
|
return unless element
|
data/test/amazon/ecs_test.rb
CHANGED
@@ -122,5 +122,32 @@ class Amazon::EcsTest < Test::Unit::TestCase
|
|
122
122
|
assert authors.is_a?(Array)
|
123
123
|
assert 3, authors.size
|
124
124
|
assert_equal "Dave Thomas", authors.first.get
|
125
|
-
end
|
125
|
+
end
|
126
|
+
|
127
|
+
def test_get_elements
|
128
|
+
resp = Amazon::Ecs.item_lookup('0974514055')
|
129
|
+
item = resp.first_item
|
130
|
+
|
131
|
+
authors = item.get_elements("author")
|
132
|
+
assert authors.is_a?(Array)
|
133
|
+
assert 3, authors.size
|
134
|
+
assert authors.first.is_a?(Amazon::Element)
|
135
|
+
assert_equal "Dave Thomas", authors.first.get
|
136
|
+
|
137
|
+
asin = item.get_elements("asin")
|
138
|
+
assert asin.is_a?(Array)
|
139
|
+
assert 1, authors.size
|
140
|
+
end
|
141
|
+
|
142
|
+
def test_get_element_and_attributes
|
143
|
+
resp = Amazon::Ecs.item_lookup('0974514055')
|
144
|
+
item = resp.first_item
|
145
|
+
|
146
|
+
first_author = item.get_element("author")
|
147
|
+
assert_equal "Dave Thomas", first_author.get
|
148
|
+
assert_equal nil, first_author.attributes['unknown']
|
149
|
+
|
150
|
+
item_height = item.get_element("itemdimensions/height")
|
151
|
+
assert_equal "hundredths-inches", item_height.attributes['units']
|
152
|
+
end
|
126
153
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: amazon-ecs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 19
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 1
|
8
|
+
- 1
|
8
9
|
- 0
|
9
|
-
|
10
|
-
version: 1.0.0
|
10
|
+
version: 1.1.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Herryanto Siatono
|
@@ -15,7 +15,7 @@ autorequire: name
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-11-
|
18
|
+
date: 2010-11-11 00:00:00 +08:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|