asin 0.8.0 → 1.0.0

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 (37) hide show
  1. data/.document +1 -2
  2. data/{CHANGELOG.rdoc → CHANGELOG.md} +12 -12
  3. data/Gemfile.lock +6 -0
  4. data/README.md +153 -0
  5. data/lib/asin/client.rb +6 -5
  6. data/lib/asin/configuration.rb +9 -20
  7. data/lib/asin/version.rb +1 -1
  8. data/spec/browse_node_spec.rb +2 -1
  9. data/spec/cart_spec.rb +2 -1
  10. data/spec/cassettes/asin/asin_cart_with_an_existing_cart_should_add_items_to_a_cart.yml +62 -46
  11. data/spec/cassettes/asin/asin_cart_with_an_existing_cart_should_clear_a_cart.yml +60 -45
  12. data/spec/cassettes/asin/asin_cart_with_an_existing_cart_should_get_a_cart.yml +61 -46
  13. data/spec/cassettes/asin/asin_cart_with_an_existing_cart_should_update_a_cart.yml +64 -49
  14. data/spec/cassettes/asin/browse_node_should_lookup_a_browse_node.yml +28 -22
  15. data/spec/cassettes/asin/cart_should_create_a_cart.yml +30 -23
  16. data/spec/cassettes/asin/lookup_and_search_should_have_metadata.yml +70 -61
  17. data/spec/cassettes/asin/lookup_and_search_should_lookup_a_book.yml +70 -61
  18. data/spec/cassettes/asin/lookup_and_search_should_lookup_multiple_books.yml +120 -111
  19. data/spec/cassettes/asin/lookup_and_search_should_lookup_multiple_response_groups.yml +37 -32
  20. data/spec/cassettes/asin/lookup_and_search_should_return_a_custom_item_class.yml +70 -61
  21. data/spec/cassettes/asin/lookup_and_search_should_return_a_mash_value.yml +70 -61
  22. data/spec/cassettes/asin/lookup_and_search_should_return_a_rash_value.yml +70 -61
  23. data/spec/cassettes/asin/lookup_and_search_should_return_a_raw_value.yml +70 -61
  24. data/spec/cassettes/asin/lookup_and_search_should_search_keywords_a_book_with_fulltext.yml +573 -524
  25. data/spec/cassettes/asin/lookup_and_search_should_search_keywords_and_handle_a_single_result.yml +45 -37
  26. data/spec/cassettes/asin/lookup_and_search_should_search_keywords_never_mind_music.yml +109 -104
  27. data/spec/cassettes/asin/lookup_and_search_should_search_music.yml +28 -26
  28. data/spec/cassettes/asin/lookup_and_search_should_search_never_mind_music.yml +112 -110
  29. data/spec/cassettes/asin/similarity_should_find_similar_items.yml +500 -488
  30. data/spec/cassettes/asin/similarity_should_find_similar_items_for_multiple_asins_and_different_config.yml +53 -26
  31. data/spec/config_spec.rb +1 -1
  32. data/spec/search_spec.rb +7 -9
  33. data/spec/similarity_spec.rb +5 -4
  34. data/spec/spec_helper.rb +3 -1
  35. metadata +89 -31
  36. data/README.rdoc +0 -169
  37. data/spec/cassettes/asin/similarity_should_lookup_for_similar_items.yml +0 -618
data/.document CHANGED
@@ -1,3 +1,2 @@
1
1
  lib/**/*.rb
2
- README.rdoc
3
- CHANGELOG.rdoc
2
+ *.md
@@ -1,53 +1,53 @@
1
- == 0.8.0
1
+ ## 0.8.0
2
2
 
3
3
  * use confiture for configuration
4
- * implement SimilarityLookup
4
+ * implement SimilarityLookup https://github.com/phoet/asin/issues/15
5
5
 
6
- == 0.7.0
6
+ ## 0.7.0
7
7
 
8
8
  * jruby compatible
9
9
  * loosen gem dependencies
10
10
 
11
- == 0.6.1
11
+ ## 0.6.1
12
12
 
13
13
  * fix error when passing nil to config values
14
14
 
15
- == 0.6.0
15
+ ## 0.6.0
16
16
 
17
17
  * change lookup method - pull request https://github.com/phoet/asin/pull/8
18
18
 
19
- == 0.5.1
19
+ ## 0.5.1
20
20
 
21
21
  * fix for https://github.com/phoet/asin/issues/7
22
22
 
23
- == 0.5.0
23
+ ## 0.5.0
24
24
 
25
25
  * move client to own file
26
26
  * use autoload
27
27
  * support for Hashie::Rash
28
28
  * new method browse_node
29
29
 
30
- == 0.4.0
30
+ ## 0.4.0
31
31
 
32
32
  * add configuration option for item/cart class
33
33
  * add more functionality to item class
34
34
 
35
- == 0.4.0.beta1
35
+ ## 0.4.0.beta1
36
36
 
37
37
  * added cart operations
38
38
  * added yml configuration
39
39
 
40
- == 0.3.0
40
+ ## 0.3.0
41
41
 
42
42
  * add search_keywords method
43
43
  * open up search method to be more flexible
44
44
 
45
- == 0.2.0
45
+ ## 0.2.0
46
46
 
47
47
  * rails initializer configuration
48
48
  * rpsec for tests
49
49
 
50
- == 0.1.0
50
+ ## 0.1.0
51
51
 
52
52
  * add logger
53
53
  * use HTTPI as HTTP-adapter
data/Gemfile.lock CHANGED
@@ -28,6 +28,11 @@ GEM
28
28
  coderay (~> 1.0.5)
29
29
  method_source (~> 0.7.1)
30
30
  slop (>= 2.4.4, < 3)
31
+ pry (0.9.9.6-java)
32
+ coderay (~> 1.0.5)
33
+ method_source (~> 0.7.1)
34
+ slop (>= 2.4.4, < 3)
35
+ spoon (~> 0.0)
31
36
  rack (1.4.1)
32
37
  rake (0.9.2.2)
33
38
  rash (0.3.1)
@@ -43,6 +48,7 @@ GEM
43
48
  rspec-mocks (2.7.0)
44
49
  ruby-progressbar (0.0.10)
45
50
  slop (2.4.4)
51
+ spoon (0.0.1)
46
52
  vcr (1.11.3)
47
53
  webmock (1.8.7)
48
54
  addressable (>= 2.2.7)
data/README.md ADDED
@@ -0,0 +1,153 @@
1
+ ## Infos
2
+
3
+ ![Build](https://travis-ci.org/phoet/asin.png)
4
+
5
+ ASIN is a simple, extensible wrapper for parts of the REST-API of Amazon Product Advertising API (aka Associates Web Service aka Amazon E-Commerce Service).
6
+
7
+ For more information on the REST calls, have a look at the whole [Amazon E-Commerce-API](http://docs.amazonwebservices.com/AWSECommerceService/latest/DG/index.html).
8
+
9
+ Have a look at the [RDOC](http://rdoc.info/projects/phoet/asin) for this project, if you like browsing some docs.
10
+
11
+ The gem runs smoothly with Rails 3 and is tested against multiple rubies. See *.travis.yml* for details.
12
+
13
+ ## Installation
14
+
15
+ gem install asin
16
+ gem install httpclient # optional, see HTTPI
17
+ gem install rash # optional, see Response Configuration
18
+
19
+ or in your Gemfile:
20
+
21
+ gem 'asin'
22
+ gem 'httpclient' # optional, see HTTPI
23
+ gem 'rash' # optional, see Response Configuration
24
+
25
+ ## Configuration
26
+
27
+ Rails style initializer (config/initializers/asin.rb):
28
+
29
+ ASIN::Configuration.configure do |config|
30
+ config.secret = 'your-secret'
31
+ config.key = 'your-key'
32
+ config.associate_tag = 'your-tag'
33
+ end
34
+
35
+ Have a look at ASIN::Configuration class for all the details.
36
+
37
+ ## Usage
38
+
39
+ ASIN is designed as a module, so you can include it into any object you like:
40
+
41
+ # require and include
42
+ require 'asin'
43
+ include ASIN::Client
44
+
45
+ # lookup an ASIN
46
+ lookup '1430218150'
47
+
48
+ But you can also use the *instance* method to get a proxy-object:
49
+
50
+ # just require
51
+ require 'asin'
52
+
53
+ # create an ASIN client
54
+ client = ASIN::Client.instance
55
+
56
+ # lookup an item with the amazon standard identification number (asin)
57
+ items = client.lookup '1430218150'
58
+
59
+ # have a look at the title of the item
60
+ items.first.title
61
+ => Learn Objective-C on the Mac (Learn Series)
62
+
63
+ # search for any kind of stuff on amazon with keywords
64
+ items = search_keywords 'Learn', 'Objective-C'
65
+ items.first.title
66
+ => "Learn Objective-C on the Mac (Learn Series)"
67
+
68
+ # search for any kind of stuff on amazon with custom parameters
69
+ search :Keywords => 'Learn Objective-C', :SearchIndex => :Books
70
+ items.first.title
71
+ => "Learn Objective-C on the Mac (Learn Series)"
72
+
73
+ # access the internal data representation (Hashie::Mash)
74
+ item.raw.ItemAttributes.ListPrice.FormattedPrice
75
+ => $39.99
76
+
77
+ # search for similar items like the one you already have
78
+ items = client.similar '1430218150'
79
+
80
+ There is an additional set of methods to support AWS cart operations:
81
+
82
+ client = ASIN::Client.instance
83
+
84
+ # create a cart with an item
85
+ cart = client.create_cart({:asin => '1430218150', :quantity => 1})
86
+ cart.items
87
+ => [<#Hashie::Mash ASIN="1430218150" CartItemId="U3G241HVLLB8N6" ... >]
88
+
89
+ # get an already existing cart from a CartId and HMAC
90
+ cart = client.get_cart('176-9182855-2326919', 'KgeVCA0YJTbuN/7Ibakrk/KnHWA=')
91
+ cart.empty?
92
+ => false
93
+
94
+ # clear everything from the cart
95
+ cart = client.clear_cart(cart)
96
+ cart.empty?
97
+ => true
98
+
99
+ # add items to the cart
100
+ cart = client.add_items(cart, {:asin => '1430216263', :quantity => 2})
101
+ cart.empty?
102
+ => false
103
+
104
+ # update items in the cart
105
+ cart = client.update_items(cart, {:cart_item_id => cart.items.first.CartItemId, :action => :SaveForLater}, {:cart_item_id => cart.items.first.CartItemId, :quantity => 7})
106
+ cart.saved_items
107
+ => [<#Hashie::Mash ASIN="1430218150" CartItemId="U3G241HVLLB8N6" ... >]
108
+
109
+ It's also possible to access browse nodes:
110
+
111
+ client = ASIN::Client.instance
112
+
113
+ # create a cart with an item
114
+ node = client.browse_node('163357', :ResponseGroup => :TopSellers)
115
+ node.node_id
116
+ => '163357'
117
+ node.name
118
+ => 'Comedy'
119
+
120
+ ## Response Configuration
121
+
122
+ ASIN is customizable in the way it returns Responses from Amazon.
123
+ By default it will return *SimpleItem*, *SimpleCart* or *SimpleNode* instances,
124
+ but you can override this behavior for using your custom Classes:
125
+
126
+ client.configure :item_type => YourItemClass
127
+ client.configure :cart_type => YourCartClass
128
+ client.configure :node_type => YourNodeClass
129
+
130
+ You can also use built-in *:raw*, *:mash* or *:rash* types.
131
+ Since *rash* is an additional library, you need to add it to your gemfile if you want to use it:
132
+
133
+ gem 'rash'
134
+
135
+ ## HTTPI
136
+
137
+ ASIN uses [HTTPI](https://github.com/rubiii/httpi) as a HTTP-Client adapter.
138
+ See the HTTPI documentation for how to configure different clients or the logger.
139
+ As a default HTTPI uses _httpclient_ so you should add that dependency to your project:
140
+
141
+ gem 'httpclient'
142
+
143
+ ## Confiture
144
+
145
+ ASIN uses [Confiture](https://github.com/phoet/confiture) as a Configuration gem.
146
+ See the Confiture documentation for different configuration styles.
147
+
148
+ ## License
149
+
150
+ "THE BEER-WARE LICENSE" (Revision 42):
151
+ [ps@nofail.de](mailto:ps@nofail.de) wrote this file. As long as you retain this notice you
152
+ can do whatever you want with this stuff. If we meet some day, and you think
153
+ this stuff is worth it, you can buy me a beer in return Peter Schröder
data/lib/asin/client.rb CHANGED
@@ -19,10 +19,11 @@ require 'base64'
19
19
  # In order to use the Amazon API properly, you need to be a registered user (http://aws.amazon.com).
20
20
  #
21
21
  # The registration process will give you a +secret-key+ and an +access-key+ (AWSAccessKeyId).
22
+ # Since the latest updates to the service you will need an +associate-tag+.
22
23
  #
23
24
  # Both are needed to use ASIN (see Configuration for more details):
24
25
  #
25
- # configure :secret => 'your-secret', :key => 'your-key'
26
+ # configure :secret => 'your-secret', :key => 'your-key', :associate_tag => 'your-associate_tag'
26
27
  #
27
28
  # == Search
28
29
  #
@@ -116,9 +117,9 @@ module ASIN
116
117
 
117
118
  # Configures the basic request parameters for ASIN.
118
119
  #
119
- # Expects at least +secret+ and +key+ for the API call:
120
+ # Expects at least +secret+, +key+ and +associate_tag+ for the API call:
120
121
  #
121
- # configure :secret => 'your-secret', :key => 'your-key'
122
+ # configure :secret => 'your-secret', :key => 'your-key', :associate_tag => 'your-associate_tag'
122
123
  #
123
124
  # See ASIN::Configuration for more infos.
124
125
  #
@@ -219,7 +220,7 @@ module ASIN
219
220
  #
220
221
  # Expects one ore more asins and returns a list of +SimpleNode+s:
221
222
  #
222
- # node = browse_node '163357'
223
+ # items = similar '1430218150'
223
224
  #
224
225
  # ==== Options:
225
226
  #
@@ -384,9 +385,9 @@ module ASIN
384
385
  # nice tutorial http://cloudcarpenters.com/blog/amazon_products_api_request_signing/
385
386
  params[:Service] = :AWSECommerceService
386
387
  params[:AWSAccessKeyId] = Configuration.key
388
+ params[:AssociateTag] = Configuration.associate_tag
387
389
 
388
390
  params[:Version] = Configuration.version unless Configuration.blank? :version
389
- params[:AssociateTag] = Configuration.associate_tag unless Configuration.blank? :associate_tag
390
391
 
391
392
  # utc timestamp needed for signing
392
393
  params[:Timestamp] = Time.now.utc.strftime('%Y-%m-%dT%H:%M:%SZ')
@@ -8,29 +8,18 @@ module ASIN
8
8
  # Expects at least +secret+ and +key+ for the API call:
9
9
  #
10
10
  # ASIN::Configuration.configure do |config|
11
- # config.secret = 'your-secret'
12
- # config.key = 'your-key'
11
+ # config.secret = 'your-secret'
12
+ # config.key = 'your-key'
13
+ # config.associate_tag = 'your-associate_tag'
13
14
  # end
14
15
  #
15
- # With the latest version of the Product Advertising API you need to include your associate_tag[https://affiliate-program.amazon.com/gp/advertising/api/detail/api-changes.html].
16
- #
17
- # You may pass options as a hash as well:
18
- #
19
- # ASIN::Configuration.configure :secret => 'your-secret', :key => 'your-key'
20
- #
21
- # Or configure everything using YAML:
22
- #
23
- # ASIN::Configuration.configure :yaml => 'config/asin.yml'
24
- #
25
- # ASIN::Configuration.configure :yaml => 'config/asin.yml' do |config, yml|
26
- # config.key = yml[Rails.env]['aws_access_key']
27
- # end
16
+ # Confiture is used as a basis for configuration. Have a look at the documentation[https://github.com/phoet/confiture] for more configuration styles.
28
17
  #
29
18
  # ==== Options:
30
19
  #
31
20
  # [secret] the API secret key (required)
32
21
  # [key] the API access key (required)
33
- # [associate_tag] your Amazon associate tag. Default is blank (required in latest API version)
22
+ # [associate_tag] your Amazon associate tag (required)
34
23
  # [host] the host, which defaults to 'webservices.amazon.com'
35
24
  # [logger] a different logger than logging to STDERR (nil for no logging)
36
25
  # [version] a custom version of the API calls. Default is 2010-11-01
@@ -40,14 +29,14 @@ module ASIN
40
29
  #
41
30
  class Configuration
42
31
  include Confiture::Configuration
43
- confiture_allowed_keys(:secret, :key, :host, :version, :associate_tag, :logger, :item_type, :cart_type, :node_type)
44
- confiture_mandatory_keys(:secret, :key)
32
+ confiture_allowed_keys(:secret, :key, :associate_tag, :host, :version, :logger, :item_type, :cart_type, :node_type)
33
+ confiture_mandatory_keys(:secret, :key, :associate_tag)
45
34
  confiture_defaults({
46
35
  :secret => '',
47
36
  :key => '',
48
- :host => 'webservices.amazon.com',
49
- :version => '2010-11-01',
50
37
  :associate_tag => '',
38
+ :host => 'webservices.amazon.com',
39
+ :version => '2011-08-01',
51
40
  :logger => Logger.new(STDERR),
52
41
  :item_type => SimpleItem,
53
42
  :cart_type => SimpleCart,
data/lib/asin/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module ASIN
2
- VERSION = "0.8.0"
2
+ VERSION = "1.0.0"
3
3
  end
@@ -4,7 +4,8 @@ module ASIN
4
4
  describe ASIN do
5
5
  context "browse_node" do
6
6
  before do
7
- @helper.configure :secret => @secret, :key => @key
7
+ options = {:secret => @secret, :key => @key, :associate_tag => @tag}
8
+ @helper.configure options
8
9
  end
9
10
 
10
11
  it "should lookup a browse_node", :vcr do
data/spec/cart_spec.rb CHANGED
@@ -3,7 +3,8 @@ require 'spec_helper'
3
3
  module ASIN
4
4
  describe ASIN do
5
5
  before do
6
- @helper.configure :secret => @secret, :key => @key
6
+ options = {:secret => @secret, :key => @key, :associate_tag => @tag}
7
+ @helper.configure options
7
8
  end
8
9
 
9
10
  context "cart" do
@@ -2,67 +2,83 @@
2
2
  - !ruby/struct:VCR::HTTPInteraction
3
3
  request: !ruby/struct:VCR::Request
4
4
  method: :get
5
- uri: http://webservices.amazon.com:80/onca/xml?AWSAccessKeyId=AKIAJFA5X7RTOKFNPVZQ&AssociateTag=&Item.0.ASIN=1430218150&Item.0.Quantity=1&Operation=CartCreate&Service=AWSECommerceService&Signature=5sWyeKMk9jtVYoITVfJMjolGlzvDJ0fIk7rP4il81Lo=&Timestamp=2011-11-17T12:26:34Z&Version=2010-11-01
5
+ uri: http://webservices.amazon.com:80/onca/xml?AWSAccessKeyId=AKIAIBNLWSCV5OXMPD6A&AssociateTag=phoet-20&Item.0.ASIN=1430218150&Item.0.Quantity=1&Operation=CartCreate&Service=AWSECommerceService&Signature=FG121ds4Lwf6j4p1xgwLt2pRjoTTGSvIwLImHLZ+gzs=&Timestamp=2012-09-22T13:41:49Z&Version=2011-08-01
6
6
  body:
7
7
  headers:
8
8
  response: !ruby/struct:VCR::Response
9
9
  status: !ruby/struct:VCR::ResponseStatus
10
10
  code: 200
11
- message: OK
11
+ message: !binary |-
12
+ T0s=
12
13
  headers:
13
- date:
14
- - Thu, 17 Nov 2011 12:26:34 GMT
15
- server:
16
- - Server
17
- content-type:
18
- - text/xml;charset=UTF-8
19
- vary:
20
- - Accept-Encoding,User-Agent
21
- nncoection:
22
- - close
23
- transfer-encoding:
24
- - chunked
25
- body: <?xml version="1.0" encoding="UTF-8"?><CartCreateResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2010-11-01"><OperationRequest><HTTPHeaders><Header
26
- Name="UserAgent" Value="Jakarta Commons-HttpClient/3.0.1"></Header></HTTPHeaders><RequestId>014QB123K7ASW4SE6QEM</RequestId><Arguments><Argument
27
- Name="AssociateTag"></Argument><Argument Name="Service" Value="AWSECommerceService"></Argument><Argument
28
- Name="Item.0.Quantity" Value="1"></Argument><Argument Name="Signature" Value="5sWyeKMk9jtVYoITVfJMjolGlzvDJ0fIk7rP4il81Lo="></Argument><Argument
14
+ !binary "ZGF0ZQ==":
15
+ - !binary |-
16
+ U2F0LCAyMiBTZXAgMjAxMiAxMzo0MTo0NSBHTVQ=
17
+ !binary "c2VydmVy":
18
+ - !binary |-
19
+ U2VydmVy
20
+ !binary "Y29udGVudC10eXBl":
21
+ - !binary |-
22
+ dGV4dC94bWw7Y2hhcnNldD1VVEYtOA==
23
+ !binary "dmFyeQ==":
24
+ - !binary |-
25
+ QWNjZXB0LUVuY29kaW5nLFVzZXItQWdlbnQ=
26
+ !binary "bm5jb2VjdGlvbg==":
27
+ - !binary |-
28
+ Y2xvc2U=
29
+ !binary "dHJhbnNmZXItZW5jb2Rpbmc=":
30
+ - !binary |-
31
+ Y2h1bmtlZA==
32
+ body: <?xml version="1.0" encoding="UTF-8"?><CartCreateResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2011-08-01"><OperationRequest><HTTPHeaders><Header
33
+ Name="UserAgent" Value="Jakarta Commons-HttpClient/3.0.1"></Header></HTTPHeaders><RequestId>1GQTSKJ2G4NH5KQWWN56</RequestId><Arguments><Argument
34
+ Name="AssociateTag" Value="phoet-20"></Argument><Argument Name="Service" Value="AWSECommerceService"></Argument><Argument
35
+ Name="Item.0.Quantity" Value="1"></Argument><Argument Name="Signature" Value="FG121ds4Lwf6j4p1xgwLt2pRjoTTGSvIwLImHLZ+gzs="></Argument><Argument
29
36
  Name="Item.0.ASIN" Value="1430218150"></Argument><Argument Name="Operation"
30
- Value="CartCreate"></Argument><Argument Name="AWSAccessKeyId" Value="AKIAJFA5X7RTOKFNPVZQ"></Argument><Argument
31
- Name="Timestamp" Value="2011-11-17T12:26:34Z"></Argument><Argument Name="Version"
32
- Value="2010-11-01"></Argument></Arguments><RequestProcessingTime>0.162961006164551</RequestProcessingTime></OperationRequest><Cart><Request><IsValid>True</IsValid><CartCreateRequest><Items><Item><ASIN>1430218150</ASIN><Quantity>1</Quantity></Item></Items></CartCreateRequest></Request><CartId>183-2540013-3419242</CartId><HMAC>QqoPIkmIkhVQ4/giDmvD0ouD1vo=</HMAC><URLEncodedHMAC>QqoPIkmIkhVQ4%2FgiDmvD0ouD1vo%3D</URLEncodedHMAC><PurchaseURL>https://www.amazon.com/gp/cart/aws-merge.html?cart-id=183-2540013-3419242%26associate-id=ws%26hmac=QqoPIkmIkhVQ4/giDmvD0ouD1vo=%26SubscriptionId=AKIAJFA5X7RTOKFNPVZQ%26MergeCart=False</PurchaseURL><SubTotal><Amount>2171</Amount><CurrencyCode>USD</CurrencyCode><FormattedPrice>$21.71</FormattedPrice></SubTotal><CartItems><SubTotal><Amount>2171</Amount><CurrencyCode>USD</CurrencyCode><FormattedPrice>$21.71</FormattedPrice></SubTotal><CartItem><CartItemId>U3G241HVLLB8N6</CartItemId><ASIN>1430218150</ASIN><MerchantId>ATVPDKIKX0DER</MerchantId><SellerId>A2R2RITDJNW1Q6</SellerId><SellerNickname>Amazon.com</SellerNickname><Quantity>1</Quantity><Title>Learn
33
- Objective-C on the Mac (Learn Series)</Title><ProductGroup>Book</ProductGroup><Price><Amount>2171</Amount><CurrencyCode>USD</CurrencyCode><FormattedPrice>$21.71</FormattedPrice></Price><ItemTotal><Amount>2171</Amount><CurrencyCode>USD</CurrencyCode><FormattedPrice>$21.71</FormattedPrice></ItemTotal></CartItem></CartItems></Cart></CartCreateResponse>
37
+ Value="CartCreate"></Argument><Argument Name="AWSAccessKeyId" Value="AKIAIBNLWSCV5OXMPD6A"></Argument><Argument
38
+ Name="Timestamp" Value="2012-09-22T13:41:49Z"></Argument><Argument Name="Version"
39
+ Value="2011-08-01"></Argument></Arguments><RequestProcessingTime>0.142043113708496</RequestProcessingTime></OperationRequest><Cart><Request><IsValid>True</IsValid><CartCreateRequest><Items><Item><ASIN>1430218150</ASIN><Quantity>1</Quantity></Item></Items></CartCreateRequest></Request><CartId>191-2380529-7963127</CartId><HMAC>rBlgHc/W9qRw0n7nUY+jRcK45n8=</HMAC><URLEncodedHMAC>rBlgHc%2FW9qRw0n7nUY%2BjRcK45n8%3D</URLEncodedHMAC><PurchaseURL>https://www.amazon.com/gp/cart/aws-merge.html?cart-id=191-2380529-7963127%26associate-id=phoet-20%26hmac=rBlgHc/W9qRw0n7nUY%2BjRcK45n8=%26SubscriptionId=AKIAIBNLWSCV5OXMPD6A%26MergeCart=False</PurchaseURL><SubTotal><Amount>2639</Amount><CurrencyCode>USD</CurrencyCode><FormattedPrice>$26.39</FormattedPrice></SubTotal><CartItems><SubTotal><Amount>2639</Amount><CurrencyCode>USD</CurrencyCode><FormattedPrice>$26.39</FormattedPrice></SubTotal><CartItem><CartItemId>C3G241HVLLB8N6</CartItemId><ASIN>1430218150</ASIN><SellerNickname>Amazon.com</SellerNickname><Quantity>1</Quantity><Title>Learn
40
+ Objective-C on the Mac (Learn Series)</Title><ProductGroup>Book</ProductGroup><Price><Amount>2639</Amount><CurrencyCode>USD</CurrencyCode><FormattedPrice>$26.39</FormattedPrice></Price><ItemTotal><Amount>2639</Amount><CurrencyCode>USD</CurrencyCode><FormattedPrice>$26.39</FormattedPrice></ItemTotal></CartItem></CartItems></Cart></CartCreateResponse>
34
41
  http_version: '1.1'
35
42
  - !ruby/struct:VCR::HTTPInteraction
36
43
  request: !ruby/struct:VCR::Request
37
44
  method: :get
38
- uri: http://webservices.amazon.com:80/onca/xml?AWSAccessKeyId=AKIAJFA5X7RTOKFNPVZQ&AssociateTag=&CartId=183-2540013-3419242&HMAC=QqoPIkmIkhVQ4/giDmvD0ouD1vo=&Item.0.ASIN=1430216263&Item.0.Quantity=2&Operation=CartAdd&Service=AWSECommerceService&Signature=FR0UOB+2MqOE9YuJ/CVBCTw9ONTLDa5Q78ISyT0TATw=&Timestamp=2011-11-17T12:26:34Z&Version=2010-11-01
45
+ uri: http://webservices.amazon.com:80/onca/xml?AWSAccessKeyId=AKIAIBNLWSCV5OXMPD6A&AssociateTag=phoet-20&CartId=191-2380529-7963127&HMAC=rBlgHc/W9qRw0n7nUY+jRcK45n8=&Item.0.ASIN=1430216263&Item.0.Quantity=2&Operation=CartAdd&Service=AWSECommerceService&Signature=ygXyDzfq7qPLQH23gL+y9sTjgKL5EkudUr2OWASn71s=&Timestamp=2012-09-22T13:41:50Z&Version=2011-08-01
39
46
  body:
40
47
  headers:
41
48
  response: !ruby/struct:VCR::Response
42
49
  status: !ruby/struct:VCR::ResponseStatus
43
50
  code: 200
44
- message: OK
51
+ message: !binary |-
52
+ T0s=
45
53
  headers:
46
- date:
47
- - Thu, 17 Nov 2011 12:26:34 GMT
48
- server:
49
- - Server
50
- content-type:
51
- - text/xml;charset=UTF-8
52
- vary:
53
- - Accept-Encoding,User-Agent
54
- nncoection:
55
- - close
56
- transfer-encoding:
57
- - chunked
58
- body: ! '<?xml version="1.0" encoding="UTF-8"?><CartAddResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2010-11-01"><OperationRequest><HTTPHeaders><Header
59
- Name="UserAgent" Value="Jakarta Commons-HttpClient/3.0.1"></Header></HTTPHeaders><RequestId>0JBNK5NQF7NJE0TSNSM1</RequestId><Arguments><Argument
60
- Name="AssociateTag"></Argument><Argument Name="Service" Value="AWSECommerceService"></Argument><Argument
61
- Name="Item.0.Quantity" Value="2"></Argument><Argument Name="Signature" Value="FR0UOB+2MqOE9YuJ/CVBCTw9ONTLDa5Q78ISyT0TATw="></Argument><Argument
62
- Name="Item.0.ASIN" Value="1430216263"></Argument><Argument Name="HMAC" Value="QqoPIkmIkhVQ4/giDmvD0ouD1vo="></Argument><Argument
63
- Name="Operation" Value="CartAdd"></Argument><Argument Name="CartId" Value="183-2540013-3419242"></Argument><Argument
64
- Name="AWSAccessKeyId" Value="AKIAJFA5X7RTOKFNPVZQ"></Argument><Argument Name="Timestamp"
65
- Value="2011-11-17T12:26:34Z"></Argument><Argument Name="Version" Value="2010-11-01"></Argument></Arguments><RequestProcessingTime>0.119147062301636</RequestProcessingTime></OperationRequest><Cart><Request><IsValid>True</IsValid><CartAddRequest><CartId>183-2540013-3419242</CartId><HMAC>QqoPIkmIkhVQ4/giDmvD0ouD1vo=</HMAC><Items><Item><ASIN>1430216263</ASIN><Quantity>2</Quantity></Item></Items></CartAddRequest></Request><CartId>183-2540013-3419242</CartId><HMAC>QqoPIkmIkhVQ4/giDmvD0ouD1vo=</HMAC><URLEncodedHMAC>QqoPIkmIkhVQ4%2FgiDmvD0ouD1vo%3D</URLEncodedHMAC><PurchaseURL>https://www.amazon.com/gp/cart/aws-merge.html?cart-id=183-2540013-3419242%26associate-id=ws%26hmac=QqoPIkmIkhVQ4/giDmvD0ouD1vo=%26SubscriptionId=AKIAJFA5X7RTOKFNPVZQ%26MergeCart=False</PurchaseURL><SubTotal><Amount>7449</Amount><CurrencyCode>USD</CurrencyCode><FormattedPrice>$74.49</FormattedPrice></SubTotal><CartItems><SubTotal><Amount>7449</Amount><CurrencyCode>USD</CurrencyCode><FormattedPrice>$74.49</FormattedPrice></SubTotal><CartItem><CartItemId>U3CFEHHIPJNW3L</CartItemId><ASIN>1430216263</ASIN><MerchantId>ATVPDKIKX0DER</MerchantId><SellerId>A2R2RITDJNW1Q6</SellerId><SellerNickname>Amazon.com</SellerNickname><Quantity>2</Quantity><Title>Beginning
66
- iPhone Development: Exploring the iPhone SDK</Title><ProductGroup>Book</ProductGroup><Price><Amount>2639</Amount><CurrencyCode>USD</CurrencyCode><FormattedPrice>$26.39</FormattedPrice></Price><ItemTotal><Amount>5278</Amount><CurrencyCode>USD</CurrencyCode><FormattedPrice>$52.78</FormattedPrice></ItemTotal></CartItem><CartItem><CartItemId>U3G241HVLLB8N6</CartItemId><ASIN>1430218150</ASIN><MerchantId>ATVPDKIKX0DER</MerchantId><SellerId>A2R2RITDJNW1Q6</SellerId><SellerNickname>Amazon.com</SellerNickname><Quantity>1</Quantity><Title>Learn
67
- Objective-C on the Mac (Learn Series)</Title><ProductGroup>Book</ProductGroup><Price><Amount>2171</Amount><CurrencyCode>USD</CurrencyCode><FormattedPrice>$21.71</FormattedPrice></Price><ItemTotal><Amount>2171</Amount><CurrencyCode>USD</CurrencyCode><FormattedPrice>$21.71</FormattedPrice></ItemTotal></CartItem></CartItems></Cart></CartAddResponse>'
54
+ !binary "ZGF0ZQ==":
55
+ - !binary |-
56
+ U2F0LCAyMiBTZXAgMjAxMiAxMzo0MTo0NSBHTVQ=
57
+ !binary "c2VydmVy":
58
+ - !binary |-
59
+ U2VydmVy
60
+ !binary "Y29udGVudC10eXBl":
61
+ - !binary |-
62
+ dGV4dC94bWw7Y2hhcnNldD1VVEYtOA==
63
+ !binary "dmFyeQ==":
64
+ - !binary |-
65
+ QWNjZXB0LUVuY29kaW5nLFVzZXItQWdlbnQ=
66
+ !binary "bm5jb2VjdGlvbg==":
67
+ - !binary |-
68
+ Y2xvc2U=
69
+ !binary "dHJhbnNmZXItZW5jb2Rpbmc=":
70
+ - !binary |-
71
+ Y2h1bmtlZA==
72
+ body: ! '<?xml version="1.0" encoding="UTF-8"?><CartAddResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2011-08-01"><OperationRequest><HTTPHeaders><Header
73
+ Name="UserAgent" Value="Jakarta Commons-HttpClient/3.0.1"></Header></HTTPHeaders><RequestId>092JCS8GHW6BRBZ52F66</RequestId><Arguments><Argument
74
+ Name="Service" Value="AWSECommerceService"></Argument><Argument Name="Item.0.Quantity"
75
+ Value="2"></Argument><Argument Name="Operation" Value="CartAdd"></Argument><Argument
76
+ Name="Timestamp" Value="2012-09-22T13:41:50Z"></Argument><Argument Name="Version"
77
+ Value="2011-08-01"></Argument><Argument Name="AssociateTag" Value="phoet-20"></Argument><Argument
78
+ Name="Signature" Value="ygXyDzfq7qPLQH23gL+y9sTjgKL5EkudUr2OWASn71s="></Argument><Argument
79
+ Name="Item.0.ASIN" Value="1430216263"></Argument><Argument Name="HMAC" Value="rBlgHc/W9qRw0n7nUY+jRcK45n8="></Argument><Argument
80
+ Name="CartId" Value="191-2380529-7963127"></Argument><Argument Name="AWSAccessKeyId"
81
+ Value="AKIAIBNLWSCV5OXMPD6A"></Argument></Arguments><RequestProcessingTime>0.14446496963501</RequestProcessingTime></OperationRequest><Cart><Request><IsValid>True</IsValid><CartAddRequest><CartId>191-2380529-7963127</CartId><HMAC>rBlgHc/W9qRw0n7nUY+jRcK45n8=</HMAC><Items><Item><ASIN>1430216263</ASIN><Quantity>2</Quantity></Item></Items></CartAddRequest></Request><CartId>191-2380529-7963127</CartId><HMAC>rBlgHc/W9qRw0n7nUY+jRcK45n8=</HMAC><URLEncodedHMAC>rBlgHc%2FW9qRw0n7nUY%2BjRcK45n8%3D</URLEncodedHMAC><PurchaseURL>https://www.amazon.com/gp/cart/aws-merge.html?cart-id=191-2380529-7963127%26associate-id=phoet-20%26hmac=rBlgHc/W9qRw0n7nUY%2BjRcK45n8=%26SubscriptionId=AKIAIBNLWSCV5OXMPD6A%26MergeCart=False</PurchaseURL><SubTotal><Amount>7827</Amount><CurrencyCode>USD</CurrencyCode><FormattedPrice>$78.27</FormattedPrice></SubTotal><CartItems><SubTotal><Amount>7827</Amount><CurrencyCode>USD</CurrencyCode><FormattedPrice>$78.27</FormattedPrice></SubTotal><CartItem><CartItemId>C3CFEHHIPJNW3L</CartItemId><ASIN>1430216263</ASIN><SellerNickname>Amazon.com</SellerNickname><Quantity>2</Quantity><Title>Beginning
82
+ iPhone Development: Exploring the iPhone SDK</Title><ProductGroup>Book</ProductGroup><Price><Amount>2594</Amount><CurrencyCode>USD</CurrencyCode><FormattedPrice>$25.94</FormattedPrice></Price><ItemTotal><Amount>5188</Amount><CurrencyCode>USD</CurrencyCode><FormattedPrice>$51.88</FormattedPrice></ItemTotal></CartItem><CartItem><CartItemId>C3G241HVLLB8N6</CartItemId><ASIN>1430218150</ASIN><SellerNickname>Amazon.com</SellerNickname><Quantity>1</Quantity><Title>Learn
83
+ Objective-C on the Mac (Learn Series)</Title><ProductGroup>Book</ProductGroup><Price><Amount>2639</Amount><CurrencyCode>USD</CurrencyCode><FormattedPrice>$26.39</FormattedPrice></Price><ItemTotal><Amount>2639</Amount><CurrencyCode>USD</CurrencyCode><FormattedPrice>$26.39</FormattedPrice></ItemTotal></CartItem></CartItems></Cart></CartAddResponse>'
68
84
  http_version: '1.1'