amazon-ecs 0.5.0 → 0.5.1

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.
Files changed (5) hide show
  1. data/CHANGELOG +10 -0
  2. data/README +16 -9
  3. data/lib/amazon/ecs.rb +48 -10
  4. data/test/amazon/ecs_test.rb +23 -4
  5. metadata +2 -2
data/CHANGELOG CHANGED
@@ -1,3 +1,13 @@
1
+ 0.5.1 2006-02-08
2
+ ----------------
3
+ * Fixed Amazon Japan and France URL error
4
+ * Removed opts.delete(:search_index) from item_lookup, SearchIndex param is allowed
5
+ when looking for a book with IdType other than the ASIN.
6
+ * Check for defined? RAILS_DEFAULT_LOGGER to avoid exception for non-rails ruby app
7
+ * Added check for LOGGER constant if RAILS_DEFAULT_LOGGER is not defined
8
+ * Added Ecs.configure(&proc) method for easier configuration of default options
9
+ * Added Element#search_and_convert method
10
+
1
11
  0.5.0 2006-09-12
2
12
  ----------------
3
13
  Initial Release
data/README CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Generic Amazon E-commerce REST API using Hpricot with configurable
4
4
  default options and method call options. Uses Response and
5
- Element classes for easy access access to REST XML output. Supports ECS 4.0.
5
+ Element wrapper classes for easy access to REST XML output. It supports ECS 4.0.
6
6
 
7
7
  It is generic, so you can easily extend <tt>Amazon::Ecs</tt> to support
8
8
  other not implemented REST operations; and it is also generic because it just wraps around
@@ -12,7 +12,7 @@ If in the future, there is a change in REST XML output structure,
12
12
  no changes will be required on <tt>amazon-ecs</tt> library,
13
13
  instead you just need to change the element path.
14
14
 
15
- Version: 0.5.0
15
+ Version: 0.5.1
16
16
 
17
17
  Links:
18
18
  * http://amazon-ecs.rubyforge.org
@@ -24,18 +24,20 @@ Links:
24
24
 
25
25
  == EXAMPLE
26
26
 
27
- # set the default options; options will be camelized and converted to REST request parameters.
27
+ require 'amazon/ecs'
28
+
29
+ # set the default options; options will be camelized and converted to REST request parameters.
28
30
  Amazon::Ecs.options = {:aWS_access_key_id => [your developer token]}
29
31
 
30
32
  # options provided on method call will merge with the default options
31
33
  res = Amazon::Ecs.item_search('ruby', {:response_group => 'Medium', :sort => 'salesrank'})
32
34
 
33
35
  # some common response object methods
34
- res.is_valid_request? # return true request is valid
36
+ res.is_valid_request? # return true if request is valid
35
37
  res.has_error? # return true if there is an error
36
38
  res.error # return error message if there is any
37
39
  res.total_pages # return total pages
38
- res.total_results # return total pages
40
+ res.total_results # return total results
39
41
  res.item_page # return current page no if :item_page option is provided
40
42
 
41
43
  # traverse through each item (Amazon::Element)
@@ -63,14 +65,19 @@ Links:
63
65
  # Getting hash value out of Hpricot element
64
66
  Amazon::Element.get_hash(review) # [:source => ..., :content ==> ...]
65
67
 
66
- # Or can retrieve them seperately
67
- Amazon::Element.get(review, 'source')
68
- Amazon::Element.get(review, 'content')
68
+ # Or to get unescaped HTML values
69
+ Amazon::Element.get_unescaped(review, 'source')
70
+ Amazon::Element.get_unescaped(review, 'content')
71
+
72
+ # Or this way
73
+ el = Amazon::Element.new(review)
74
+ el.get_unescaped('source')
75
+ el.get_unescaped('content')
69
76
  end
70
77
  end
71
78
 
72
79
  Refer to Amazon ECS documentation for more information on Amazon REST request parameters and XML output:
73
- http://docs.amazonwebservices.com/AWSEcommerceService/2005-10-05/index.html
80
+ http://docs.amazonwebservices.com/AWSEcommerceService/2006-09-13/
74
81
 
75
82
  To get a sample of Amazon REST response XML output, use AWSZone.com scratch pad:
76
83
  http://www.awszone.com/scratchpads/aws/ecs.us/index.aws
data/lib/amazon/ecs.rb CHANGED
@@ -1,3 +1,26 @@
1
+ #--
2
+ # Copyright (c) 2006 Herryanto Siatono, Pluit Solutions
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining
5
+ # a copy of this software and associated documentation files (the
6
+ # "Software"), to deal in the Software without restriction, including
7
+ # without limitation the rights to use, copy, modify, merge, publish,
8
+ # distribute, sublicense, and/or sell copies of the Software, and to
9
+ # permit persons to whom the Software is furnished to do so, subject to
10
+ # the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be
13
+ # included in all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
18
+ # IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
19
+ # CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
20
+ # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
21
+ # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+ #++
23
+
1
24
  require 'net/http'
2
25
  require 'hpricot'
3
26
  require 'cgi'
@@ -11,11 +34,12 @@ module Amazon
11
34
  :uk => 'http://webservices.amazon.co.uk/onca/xml?Service=AWSECommerceService',
12
35
  :ca => 'http://webservices.amazon.ca/onca/xml?Service=AWSECommerceService',
13
36
  :de => 'http://webservices.amazon.de/onca/xml?Service=AWSECommerceService',
14
- :jp => 'http://webservices.amazon.de/onca/xml?Service=AWSECommerceService',
15
- :fr => 'http://webservices.amazon.co.jp/onca/xml?Service=AWSECommerceService'
37
+ :jp => 'http://webservices.amazon.co.jp/onca/xml?Service=AWSECommerceService',
38
+ :fr => 'http://webservices.amazon.fr/onca/xml?Service=AWSECommerceService'
16
39
  }
17
40
 
18
- @@debug, @@options = nil
41
+ @@options = {}
42
+ @@debug = false
19
43
 
20
44
  # Default search options
21
45
  def self.options
@@ -35,7 +59,12 @@ module Amazon
35
59
  # Set debug flag to true or false.
36
60
  def self.debug=(dbg)
37
61
  @@debug = dbg
38
- end
62
+ end
63
+
64
+ def self.configure(&proc)
65
+ raise ArgumentError, "Block is required." unless block_given?
66
+ yield @@options
67
+ end
39
68
 
40
69
  # Search amazon items with search terms. Default search index option is 'Books'.
41
70
  # For other search type other than keywords, please specify :type => [search type param name].
@@ -60,12 +89,9 @@ module Amazon
60
89
  opts[:operation] = 'ItemLookup'
61
90
  opts[:item_id] = item_id
62
91
 
63
- # not allowed in item_lookup
64
- opts.delete(:search_index)
65
-
66
92
  self.send_request(opts)
67
- end
68
-
93
+ end
94
+
69
95
  # Generic send request to ECS REST service. You have to specify the :operation parameter.
70
96
  def self.send_request(opts)
71
97
  request_url = prepare_url(opts)
@@ -146,8 +172,10 @@ module Amazon
146
172
  protected
147
173
  def self.log(s)
148
174
  return unless self.debug
149
- if RAILS_DEFAULT_LOGGER
175
+ if defined? RAILS_DEFAULT_LOGGER
150
176
  RAILS_DEFAULT_LOGGER.error(s)
177
+ elsif defined? LOGGER
178
+ LOGGER.error(s)
151
179
  else
152
180
  puts s
153
181
  end
@@ -192,6 +220,16 @@ module Amazon
192
220
  return nil if elements.size == 0
193
221
  elements
194
222
  end
223
+
224
+ # Find Hpricot::Elements matching the given path, and convert to Amazon::Element.
225
+ # Returns an array Amazon::Elements if more than Hpricot::Elements size is greater than 1.
226
+ def search_and_convert(path)
227
+ elements = self./(path)
228
+ return unless elements
229
+ elements = elements.map{|element| Element.new(element)}
230
+ return elements.first if elements.size == 1
231
+ elements
232
+ end
195
233
 
196
234
  # Get the text value of the given path, leave empty to retrieve current element value.
197
235
  def get(path='')
@@ -2,7 +2,15 @@ require File.dirname(__FILE__) + '/../test_helper'
2
2
 
3
3
  class Amazon::EcsTest < Test::Unit::TestCase
4
4
 
5
- Amazon::Ecs.options = {:response_group => 'Large', :aWS_access_key_id => '0XQXXC6YV2C85DX1BF02'}
5
+ AWS_ACCESS_KEY_ID = ''
6
+ raise "Please specify set your AWS_ACCESS_KEY_ID" if AWS_ACCESS_KEY_ID.empty?
7
+
8
+ Amazon::Ecs.configure do |options|
9
+ options[:response_group] = 'Large'
10
+ options[:aWS_access_key_id] = AWS_ACCESS_KEY_ID
11
+ end
12
+
13
+ ## Test item_search
6
14
 
7
15
  def test_item_search
8
16
  resp = Amazon::Ecs.item_search('ruby')
@@ -56,8 +64,7 @@ class Amazon::EcsTest < Test::Unit::TestCase
56
64
  small_image = item.get_hash("smallimage")
57
65
 
58
66
  assert_equal 3, small_image.keys.size
59
- assert_match "images/P/0974514055.01._SCTHUMBZZZ_V1128790749_.jpg",
60
- small_image[:url]
67
+ assert_match "0974514055.01", small_image[:url]
61
68
  assert_equal "75", small_image[:height]
62
69
  assert_equal "59", small_image[:width]
63
70
 
@@ -70,6 +77,7 @@ class Amazon::EcsTest < Test::Unit::TestCase
70
77
  end
71
78
  end
72
79
 
80
+ ## Test item_lookup
73
81
  def test_item_lookup
74
82
  resp = Amazon::Ecs.item_lookup('0974514055')
75
83
  assert_equal "Programming Ruby: The Pragmatic Programmers' Guide, Second Edition",
@@ -88,4 +96,15 @@ class Amazon::EcsTest < Test::Unit::TestCase
88
96
  assert resp.is_valid_request?
89
97
  assert_match(/ABC is not a valid value for ItemId/, resp.error)
90
98
  end
91
- end
99
+
100
+ def test_search_and_convert
101
+ resp = Amazon::Ecs.item_lookup('0974514055')
102
+ title = resp.first_item.get("itemattributes/title")
103
+ authors = resp.first_item.search_and_convert("author")
104
+
105
+ assert_equal "Programming Ruby: The Pragmatic Programmers' Guide, Second Edition", title
106
+ assert authors.is_a?(Array)
107
+ assert 3, authors.size
108
+ assert_equal "Dave Thomas", authors.first.get
109
+ end
110
+ end
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.11
3
3
  specification_version: 1
4
4
  name: amazon-ecs
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.5.0
7
- date: 2006-12-07 00:00:00 +08:00
6
+ version: 0.5.1
7
+ date: 2007-02-09 00:00:00 +08:00
8
8
  summary: Generic Amazon E-commerce Service (ECS) REST API. Supports ECS 4.0.
9
9
  require_paths:
10
10
  - lib