sucker 1.4.1 → 1.5.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.
- data/README.md +17 -54
- data/lib/sucker/hash.rb +1 -0
- data/lib/sucker/hash.rbc +26 -26
- data/lib/sucker/parameters.rb +4 -0
- data/lib/sucker/parameters.rbc +95 -30
- data/lib/sucker/request.rb +35 -12
- data/lib/sucker/request.rbc +420 -244
- data/lib/sucker/response.rb +3 -3
- data/lib/sucker/response.rbc +91 -65
- data/lib/sucker/version.rb +1 -1
- data/lib/sucker/version.rbc +1 -1
- data/lib/sucker.rb +1 -1
- data/spec/fixtures/cassette_library/cartcreate/e3e2f9b71afba67619a95c7178178595.yml +26 -0
- data/spec/fixtures/cassette_library/cartcreate/f8fe45cc6b78ac1aac675a8f76d5f7d9.yml +26 -0
- data/spec/fixtures/cassette_library/{0415246334.yml → itemlookup/0547439fa22ec1178508f61bc8fb1dfb.yml} +3 -3
- data/spec/fixtures/cassette_library/itemlookup/2656b1813249aff0d4febb01044962ff.yml +26 -0
- data/spec/fixtures/cassette_library/itemlookup/4908294851a4df13269707e9f6507f91.yml +26 -0
- data/spec/fixtures/cassette_library/itemlookup/49690856d2b9cb358fc505dc52862acf.yml +26 -0
- data/spec/fixtures/cassette_library/itemlookup/5670727fa0cb9f30464e41aa1346c91c.yml +26 -0
- data/spec/fixtures/cassette_library/{b000aspues.yml → itemlookup/67b3c825b2902b511412057442db6e91.yml} +3 -3
- data/spec/fixtures/cassette_library/itemlookup/6e6b1dc74378e2e1118713e254191fc0.yml +26 -0
- data/spec/fixtures/cassette_library/itemlookup/742f3458144935c0a3320be6e842a17c.yml +26 -0
- data/spec/fixtures/cassette_library/itemlookup/76f548183c2804a74d0ed7e0bfbd6d4a.yml +26 -0
- data/spec/fixtures/cassette_library/itemlookup/8286b763b726d3dc1fc992023e639b9b.yml +151 -0
- data/spec/fixtures/cassette_library/{816614024.yml → itemlookup/9853d1f8ae05d5501df4e4390c5abeae.yml} +18 -18
- data/spec/fixtures/cassette_library/itemlookup/9d82768fe80b09c4a3697c608e5edebe.yml +26 -0
- data/spec/fixtures/cassette_library/{482224816x.yml → itemlookup/b6c76ad93b17b86adb932b9b97c1f019.yml} +3 -3
- data/spec/fixtures/cassette_library/itemlookup/d3d6ea869d31173526f48907bff752a3.yml +26 -0
- data/spec/fixtures/cassette_library/itemlookup/d8ad346710c3b479febcf58e67fea7ef.yml +26 -0
- data/spec/fixtures/cassette_library/{0394751221.yml → itemlookup/e880c4cb3dd56cdfa2161a71fece15ac.yml} +3 -3
- data/spec/fixtures/cassette_library/itemsearch/1c4db6b83580a7498b87d7502c249307.yml +26 -0
- data/spec/fixtures/cassette_library/itemsearch/295b9eadfb69d55e1c0acb06220e0b6e.yml +26 -0
- data/spec/fixtures/cassette_library/itemsearch/30d2bff757af125e31b82c47380b98ba.yml +26 -0
- data/spec/fixtures/cassette_library/itemsearch/34098006ffbbd9570b2c2f9ce23df9f3.yml +26 -0
- data/spec/fixtures/cassette_library/itemsearch/4c1e50d070821f4eb9fe3961aba105ee.yml +26 -0
- data/spec/fixtures/cassette_library/itemsearch/5a15430433ab94c70466eb61c919a028.yml +26 -0
- data/spec/fixtures/cassette_library/itemsearch/8fd40b929a9ed46e2b38ac905c8ab53a.yml +26 -0
- data/spec/fixtures/cassette_library/itemsearch/e9a6659c2b464d7388c3831c6425a526.yml +26 -0
- data/spec/fixtures/cassette_library/sellerlistingsearch/6b38af058d6a0bda696f49de13cfd343.yml +26 -0
- data/spec/fixtures/cassette_library/{a2h6nh4sqyfz4m.yml → sellerlistingsearch/c92200a4bd3d6d9023fa6317a780589b.yml} +3 -3
- data/spec/fixtures/cassette_library/sellerlistingsearch/cb25caadce96ac3de70b69b76431d730.yml +26 -0
- data/spec/fixtures/cassette_library/sellerlistingsearch/e1261838e1754870ffd309dd78eb7374.yml +26 -0
- data/spec/fixtures/cassette_library/spec/sucker/request.yml +4 -4
- data/spec/fixtures/cassette_library/spec/sucker/response.yml +3 -3
- data/spec/sucker/request_spec.rb +35 -15
- data/spec/sucker/request_spec.rbc +660 -166
- data/spec/sucker/response_spec.rb +4 -4
- data/spec/sucker/response_spec.rbc +133 -269
- metadata +75 -36
- data/spec/fixtures/cassette_library/0679753354.yml +0 -26
- data/spec/fixtures/cassette_library/0816614024-0007218095.yml +0 -26
- data/spec/fixtures/cassette_library/0816614024-0143105825.yml +0 -26
- data/spec/fixtures/cassette_library/0816614024.yml +0 -26
- data/spec/fixtures/cassette_library/a2jyso6w6kep83.yml +0 -26
- data/spec/fixtures/cassette_library/author-lacan-or-deleuze-and-not-fiction.yml +0 -26
- data/spec/fixtures/cassette_library/deleuze-binding-kindle.yml +0 -26
- data/spec/fixtures/cassette_library/deleuze.yml +0 -26
- data/spec/fixtures/cassette_library/george-orwell.yml +0 -26
- data/spec/fixtures/cassette_library/offer-listing-id.yml +0 -26
data/README.md
CHANGED
|
@@ -1,27 +1,26 @@
|
|
|
1
1
|
Sucker
|
|
2
2
|
======
|
|
3
3
|
|
|
4
|
-
Sucker is a Nokogiri-based Ruby wrapper to the [Amazon Product Advertising API](https://affiliate-program.amazon.co.uk/gp/advertising/api/detail/main.html).
|
|
5
|
-
|
|
6
|
-
Sucker is fast and supports __the entire Amazon API__.
|
|
4
|
+
Sucker is a Nokogiri-based Ruby wrapper to the [Amazon Product Advertising API](https://affiliate-program.amazon.co.uk/gp/advertising/api/detail/main.html). It's fast and supports the entire API.
|
|
7
5
|
|
|
8
6
|

|
|
9
7
|
|
|
10
8
|
Usage
|
|
11
9
|
-----
|
|
12
10
|
|
|
13
|
-
Read
|
|
11
|
+
Read [Amazon's API](http://aws.amazon.com/archives/Product%20Advertising%20API).
|
|
12
|
+
Skip to the __Operations__ section if in a hurry.
|
|
14
13
|
|
|
15
14
|
Set up.
|
|
16
15
|
|
|
17
|
-
|
|
18
|
-
:locale
|
|
19
|
-
:key
|
|
20
|
-
:secret
|
|
16
|
+
request = Sucker.new(
|
|
17
|
+
:locale => :us,
|
|
18
|
+
:key => a_key,
|
|
19
|
+
:secret => a_secret)
|
|
21
20
|
|
|
22
21
|
Build a request.
|
|
23
22
|
|
|
24
|
-
|
|
23
|
+
request << {
|
|
25
24
|
'Operation' => 'ItemLookup',
|
|
26
25
|
'IdType' => 'ASIN',
|
|
27
26
|
'ItemId' => 10.asins,
|
|
@@ -29,7 +28,7 @@ Build a request.
|
|
|
29
28
|
|
|
30
29
|
Get a response.
|
|
31
30
|
|
|
32
|
-
response =
|
|
31
|
+
response = request.get
|
|
33
32
|
|
|
34
33
|
Fulfill a business value.
|
|
35
34
|
|
|
@@ -58,56 +57,20 @@ To dig further into the response object:
|
|
|
58
57
|
response.to_hash,
|
|
59
58
|
response.xml
|
|
60
59
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
Managing calls
|
|
64
|
-
--------------
|
|
65
|
-
|
|
66
|
-
We have a home-grown collection of gems that help us manage our
|
|
67
|
-
calls to the Amazon API.
|
|
68
|
-
|
|
69
|
-
* [Multiplex](http://github.com/papercavalier/multiplex) binds a
|
|
70
|
-
request to a specified local IP.
|
|
71
|
-
* [Throttler](http://github.com/papercavalier/throttler) throttles
|
|
72
|
-
requests to a venue to one per second per IP.
|
|
60
|
+
To use multiple local IPs on your server, configure the request object like so:
|
|
73
61
|
|
|
74
|
-
|
|
62
|
+
adapter = request.adapter
|
|
63
|
+
adapter.socket_local.host = '10.0.0.2'
|
|
75
64
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
Thread.new do
|
|
82
|
-
scope = "#{ip}-#{locale}"
|
|
83
|
-
|
|
84
|
-
Throttler.throttle(scope) do
|
|
85
|
-
Net::HTTP.bind ip do
|
|
86
|
-
# Set up worker
|
|
87
|
-
response = worker.get
|
|
88
|
-
# Consume response
|
|
89
|
-
end
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
We prefer to use [Resque](http://github.com/defunkt/resque) to manage
|
|
97
|
-
multiple requests.
|
|
98
|
-
|
|
99
|
-
Generally, four or five workers per locale per IP proves enough to provide
|
|
100
|
-
optimum throughput.
|
|
65
|
+
Browse the public interface of Sucker
|
|
66
|
+
[here](http://rdoc.info/github/papercavalier/sucker/master/frames). To see more
|
|
67
|
+
advanced usage examples such as twenty-item batch requests and remote cart
|
|
68
|
+
manipulation, read [here](http://relishapp.com/papercavalier/sucker).
|
|
101
69
|
|
|
102
70
|
Stubbing in Tests
|
|
103
71
|
-----------------
|
|
104
72
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
Compatibility
|
|
108
|
-
-------------
|
|
109
|
-
|
|
110
|
-
Specs pass against Ruby 1.8.7, Ruby 1.9.2, JRuby 1.5.6, and Rubinius 1.2.1.
|
|
73
|
+
Try [VCR](http://github.com/myronmarston/vcr).
|
|
111
74
|
|
|
112
75
|
Moral of the story
|
|
113
76
|
------------------
|
data/lib/sucker/hash.rb
CHANGED
data/lib/sucker/hash.rbc
CHANGED
|
@@ -480,11 +480,11 @@ p
|
|
|
480
480
|
I
|
|
481
481
|
0
|
|
482
482
|
I
|
|
483
|
-
|
|
483
|
+
15
|
|
484
484
|
I
|
|
485
485
|
a
|
|
486
486
|
I
|
|
487
|
-
|
|
487
|
+
16
|
|
488
488
|
I
|
|
489
489
|
1c
|
|
490
490
|
x
|
|
@@ -727,47 +727,47 @@ p
|
|
|
727
727
|
I
|
|
728
728
|
0
|
|
729
729
|
I
|
|
730
|
-
|
|
730
|
+
19
|
|
731
731
|
I
|
|
732
732
|
4
|
|
733
733
|
I
|
|
734
|
-
|
|
734
|
+
1a
|
|
735
735
|
I
|
|
736
736
|
e
|
|
737
737
|
I
|
|
738
|
-
|
|
738
|
+
1c
|
|
739
739
|
I
|
|
740
740
|
1a
|
|
741
741
|
I
|
|
742
|
-
|
|
742
|
+
1d
|
|
743
743
|
I
|
|
744
744
|
22
|
|
745
745
|
I
|
|
746
|
-
|
|
746
|
+
1e
|
|
747
747
|
I
|
|
748
748
|
27
|
|
749
749
|
I
|
|
750
|
-
|
|
750
|
+
20
|
|
751
751
|
I
|
|
752
752
|
38
|
|
753
753
|
I
|
|
754
|
-
|
|
754
|
+
22
|
|
755
755
|
I
|
|
756
756
|
45
|
|
757
757
|
I
|
|
758
|
-
|
|
758
|
+
23
|
|
759
759
|
I
|
|
760
760
|
58
|
|
761
761
|
I
|
|
762
|
-
|
|
762
|
+
24
|
|
763
763
|
I
|
|
764
764
|
6a
|
|
765
765
|
I
|
|
766
|
-
|
|
766
|
+
26
|
|
767
767
|
I
|
|
768
768
|
8d
|
|
769
769
|
I
|
|
770
|
-
|
|
770
|
+
29
|
|
771
771
|
I
|
|
772
772
|
9f
|
|
773
773
|
x
|
|
@@ -795,43 +795,43 @@ p
|
|
|
795
795
|
I
|
|
796
796
|
-1
|
|
797
797
|
I
|
|
798
|
-
|
|
798
|
+
e
|
|
799
799
|
I
|
|
800
800
|
0
|
|
801
801
|
I
|
|
802
|
-
|
|
802
|
+
f
|
|
803
803
|
I
|
|
804
804
|
2
|
|
805
805
|
I
|
|
806
|
-
|
|
806
|
+
10
|
|
807
807
|
I
|
|
808
808
|
11
|
|
809
809
|
I
|
|
810
|
-
|
|
810
|
+
11
|
|
811
811
|
I
|
|
812
812
|
43
|
|
813
813
|
I
|
|
814
|
-
|
|
814
|
+
12
|
|
815
815
|
I
|
|
816
816
|
52
|
|
817
817
|
I
|
|
818
|
-
|
|
818
|
+
13
|
|
819
819
|
I
|
|
820
820
|
6c
|
|
821
821
|
I
|
|
822
|
-
|
|
822
|
+
15
|
|
823
823
|
I
|
|
824
824
|
77
|
|
825
825
|
I
|
|
826
|
-
|
|
826
|
+
19
|
|
827
827
|
I
|
|
828
828
|
82
|
|
829
829
|
I
|
|
830
|
-
|
|
830
|
+
2d
|
|
831
831
|
I
|
|
832
832
|
87
|
|
833
833
|
I
|
|
834
|
-
|
|
834
|
+
2f
|
|
835
835
|
I
|
|
836
836
|
90
|
|
837
837
|
x
|
|
@@ -856,7 +856,7 @@ p
|
|
|
856
856
|
I
|
|
857
857
|
2
|
|
858
858
|
I
|
|
859
|
-
|
|
859
|
+
e
|
|
860
860
|
I
|
|
861
861
|
10
|
|
862
862
|
x
|
|
@@ -872,7 +872,7 @@ p
|
|
|
872
872
|
I
|
|
873
873
|
2
|
|
874
874
|
I
|
|
875
|
-
|
|
875
|
+
5
|
|
876
876
|
I
|
|
877
877
|
1c
|
|
878
878
|
x
|
|
@@ -888,7 +888,7 @@ p
|
|
|
888
888
|
I
|
|
889
889
|
2
|
|
890
890
|
I
|
|
891
|
-
|
|
891
|
+
4
|
|
892
892
|
I
|
|
893
893
|
1f
|
|
894
894
|
x
|
data/lib/sucker/parameters.rb
CHANGED
data/lib/sucker/parameters.rbc
CHANGED
|
@@ -129,7 +129,7 @@ x
|
|
|
129
129
|
10
|
|
130
130
|
Parameters
|
|
131
131
|
i
|
|
132
|
-
|
|
132
|
+
72
|
|
133
133
|
5
|
|
134
134
|
66
|
|
135
135
|
65
|
|
@@ -170,15 +170,29 @@ i
|
|
|
170
170
|
6
|
|
171
171
|
4
|
|
172
172
|
15
|
|
173
|
+
99
|
|
174
|
+
7
|
|
175
|
+
9
|
|
176
|
+
7
|
|
177
|
+
10
|
|
178
|
+
65
|
|
179
|
+
67
|
|
180
|
+
49
|
|
181
|
+
5
|
|
182
|
+
0
|
|
183
|
+
49
|
|
184
|
+
6
|
|
185
|
+
4
|
|
186
|
+
15
|
|
173
187
|
5
|
|
174
188
|
48
|
|
175
|
-
|
|
189
|
+
11
|
|
176
190
|
15
|
|
177
191
|
99
|
|
178
192
|
7
|
|
179
|
-
|
|
193
|
+
12
|
|
180
194
|
7
|
|
181
|
-
|
|
195
|
+
13
|
|
182
196
|
65
|
|
183
197
|
67
|
|
184
198
|
49
|
|
@@ -198,7 +212,7 @@ I
|
|
|
198
212
|
0
|
|
199
213
|
n
|
|
200
214
|
p
|
|
201
|
-
|
|
215
|
+
14
|
|
202
216
|
x
|
|
203
217
|
19
|
|
204
218
|
CURRENT_API_VERSION
|
|
@@ -219,6 +233,59 @@ x
|
|
|
219
233
|
10
|
|
220
234
|
initialize
|
|
221
235
|
i
|
|
236
|
+
4
|
|
237
|
+
5
|
|
238
|
+
48
|
|
239
|
+
0
|
|
240
|
+
11
|
|
241
|
+
I
|
|
242
|
+
1
|
|
243
|
+
I
|
|
244
|
+
0
|
|
245
|
+
I
|
|
246
|
+
0
|
|
247
|
+
I
|
|
248
|
+
0
|
|
249
|
+
n
|
|
250
|
+
p
|
|
251
|
+
1
|
|
252
|
+
x
|
|
253
|
+
6
|
|
254
|
+
set_up
|
|
255
|
+
p
|
|
256
|
+
5
|
|
257
|
+
I
|
|
258
|
+
-1
|
|
259
|
+
I
|
|
260
|
+
5
|
|
261
|
+
I
|
|
262
|
+
0
|
|
263
|
+
I
|
|
264
|
+
6
|
|
265
|
+
I
|
|
266
|
+
4
|
|
267
|
+
x
|
|
268
|
+
55
|
|
269
|
+
/Users/hakanensari/code/sucker/lib/sucker/parameters.rb
|
|
270
|
+
p
|
|
271
|
+
0
|
|
272
|
+
x
|
|
273
|
+
17
|
|
274
|
+
method_visibility
|
|
275
|
+
x
|
|
276
|
+
15
|
|
277
|
+
add_defn_method
|
|
278
|
+
x
|
|
279
|
+
6
|
|
280
|
+
set_up
|
|
281
|
+
M
|
|
282
|
+
1
|
|
283
|
+
n
|
|
284
|
+
n
|
|
285
|
+
x
|
|
286
|
+
6
|
|
287
|
+
set_up
|
|
288
|
+
i
|
|
222
289
|
33
|
|
223
290
|
5
|
|
224
291
|
7
|
|
@@ -291,19 +358,19 @@ p
|
|
|
291
358
|
I
|
|
292
359
|
-1
|
|
293
360
|
I
|
|
294
|
-
|
|
361
|
+
9
|
|
295
362
|
I
|
|
296
363
|
0
|
|
297
364
|
I
|
|
298
|
-
|
|
365
|
+
a
|
|
299
366
|
I
|
|
300
367
|
b
|
|
301
368
|
I
|
|
302
|
-
|
|
369
|
+
b
|
|
303
370
|
I
|
|
304
371
|
16
|
|
305
372
|
I
|
|
306
|
-
|
|
373
|
+
c
|
|
307
374
|
I
|
|
308
375
|
21
|
|
309
376
|
x
|
|
@@ -312,12 +379,6 @@ x
|
|
|
312
379
|
p
|
|
313
380
|
0
|
|
314
381
|
x
|
|
315
|
-
17
|
|
316
|
-
method_visibility
|
|
317
|
-
x
|
|
318
|
-
15
|
|
319
|
-
add_defn_method
|
|
320
|
-
x
|
|
321
382
|
9
|
|
322
383
|
normalize
|
|
323
384
|
M
|
|
@@ -562,7 +623,7 @@ p
|
|
|
562
623
|
I
|
|
563
624
|
0
|
|
564
625
|
I
|
|
565
|
-
|
|
626
|
+
14
|
|
566
627
|
I
|
|
567
628
|
1d
|
|
568
629
|
x
|
|
@@ -584,23 +645,23 @@ p
|
|
|
584
645
|
I
|
|
585
646
|
0
|
|
586
647
|
I
|
|
587
|
-
|
|
648
|
+
11
|
|
588
649
|
I
|
|
589
650
|
a
|
|
590
651
|
I
|
|
591
|
-
|
|
652
|
+
12
|
|
592
653
|
I
|
|
593
654
|
18
|
|
594
655
|
I
|
|
595
|
-
|
|
656
|
+
13
|
|
596
657
|
I
|
|
597
658
|
34
|
|
598
659
|
I
|
|
599
|
-
|
|
660
|
+
14
|
|
600
661
|
I
|
|
601
662
|
53
|
|
602
663
|
I
|
|
603
|
-
|
|
664
|
+
15
|
|
604
665
|
I
|
|
605
666
|
56
|
|
606
667
|
x
|
|
@@ -628,11 +689,11 @@ p
|
|
|
628
689
|
I
|
|
629
690
|
-1
|
|
630
691
|
I
|
|
631
|
-
|
|
692
|
+
10
|
|
632
693
|
I
|
|
633
694
|
0
|
|
634
695
|
I
|
|
635
|
-
|
|
696
|
+
11
|
|
636
697
|
I
|
|
637
698
|
f
|
|
638
699
|
x
|
|
@@ -703,11 +764,11 @@ p
|
|
|
703
764
|
I
|
|
704
765
|
-1
|
|
705
766
|
I
|
|
706
|
-
|
|
767
|
+
1b
|
|
707
768
|
I
|
|
708
769
|
0
|
|
709
770
|
I
|
|
710
|
-
|
|
771
|
+
1c
|
|
711
772
|
I
|
|
712
773
|
10
|
|
713
774
|
x
|
|
@@ -716,7 +777,7 @@ x
|
|
|
716
777
|
p
|
|
717
778
|
0
|
|
718
779
|
p
|
|
719
|
-
|
|
780
|
+
13
|
|
720
781
|
I
|
|
721
782
|
2
|
|
722
783
|
I
|
|
@@ -728,17 +789,21 @@ I
|
|
|
728
789
|
I
|
|
729
790
|
1a
|
|
730
791
|
I
|
|
731
|
-
|
|
792
|
+
9
|
|
732
793
|
I
|
|
733
794
|
28
|
|
734
795
|
I
|
|
735
|
-
|
|
796
|
+
10
|
|
736
797
|
I
|
|
737
|
-
|
|
798
|
+
36
|
|
738
799
|
I
|
|
739
|
-
|
|
800
|
+
19
|
|
740
801
|
I
|
|
741
802
|
3a
|
|
803
|
+
I
|
|
804
|
+
1b
|
|
805
|
+
I
|
|
806
|
+
48
|
|
742
807
|
x
|
|
743
808
|
55
|
|
744
809
|
/Users/hakanensari/code/sucker/lib/sucker/parameters.rb
|
data/lib/sucker/request.rb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require '
|
|
1
|
+
require 'httpclient'
|
|
2
2
|
require 'openssl'
|
|
3
3
|
require 'sucker/parameters'
|
|
4
4
|
|
|
@@ -14,6 +14,11 @@ module Sucker
|
|
|
14
14
|
:fr => 'ecs.amazonaws.fr',
|
|
15
15
|
:jp => 'ecs.amazonaws.jp' }
|
|
16
16
|
|
|
17
|
+
# Available Amazon locales.
|
|
18
|
+
def self.locales
|
|
19
|
+
@locales ||= HOSTS.keys
|
|
20
|
+
end
|
|
21
|
+
|
|
17
22
|
# The Amazon associate tag.
|
|
18
23
|
attr_accessor :associate_tag
|
|
19
24
|
|
|
@@ -30,17 +35,24 @@ module Sucker
|
|
|
30
35
|
#
|
|
31
36
|
# Takes an optional hash of attribute and value pairs.
|
|
32
37
|
#
|
|
33
|
-
#
|
|
34
|
-
# :
|
|
35
|
-
# :
|
|
38
|
+
# request = Sucker.new(
|
|
39
|
+
# :locale => :us,
|
|
40
|
+
# :key => a_key,
|
|
41
|
+
# :secret => a_secret,
|
|
42
|
+
# :associate_tag => a_tag)
|
|
36
43
|
#
|
|
37
44
|
def initialize(args={})
|
|
38
45
|
args.each { |k, v| send("#{k}=", v) }
|
|
39
46
|
end
|
|
40
47
|
|
|
48
|
+
# The HTTP adapter.
|
|
49
|
+
def adapter
|
|
50
|
+
@adapter ||= HTTPClient.new
|
|
51
|
+
end
|
|
52
|
+
|
|
41
53
|
# Merges a hash into the existing parameters.
|
|
42
54
|
#
|
|
43
|
-
#
|
|
55
|
+
# request << {
|
|
44
56
|
# 'Operation' => 'ItemLookup',
|
|
45
57
|
# 'IdType' => 'ASIN',
|
|
46
58
|
# 'ItemId' => '0816614024' }
|
|
@@ -51,14 +63,10 @@ module Sucker
|
|
|
51
63
|
|
|
52
64
|
# Performs a request and returns a response object.
|
|
53
65
|
#
|
|
54
|
-
# response =
|
|
66
|
+
# response = request.get
|
|
55
67
|
#
|
|
56
68
|
def get
|
|
57
|
-
response =
|
|
58
|
-
query = build_signed_query
|
|
59
|
-
http.get("/onca/xml?#{query}")
|
|
60
|
-
end
|
|
61
|
-
|
|
69
|
+
response = adapter.get(uri)
|
|
62
70
|
Response.new(response)
|
|
63
71
|
end
|
|
64
72
|
|
|
@@ -67,9 +75,17 @@ module Sucker
|
|
|
67
75
|
@parameters ||= Parameters.new
|
|
68
76
|
end
|
|
69
77
|
|
|
78
|
+
# Resets parameters and returns itself.
|
|
79
|
+
def reset
|
|
80
|
+
parameters.clear
|
|
81
|
+
parameters.set_up
|
|
82
|
+
|
|
83
|
+
self
|
|
84
|
+
end
|
|
85
|
+
|
|
70
86
|
# Sets the Amazon API version.
|
|
71
87
|
#
|
|
72
|
-
#
|
|
88
|
+
# request.version = '2010-06-01'
|
|
73
89
|
#
|
|
74
90
|
def version=(version)
|
|
75
91
|
parameters['Version'] = version
|
|
@@ -107,5 +123,12 @@ module Sucker
|
|
|
107
123
|
def host
|
|
108
124
|
HOSTS[locale.to_sym]
|
|
109
125
|
end
|
|
126
|
+
|
|
127
|
+
def uri
|
|
128
|
+
URI::HTTP.build(
|
|
129
|
+
:host => host,
|
|
130
|
+
:path => '/onca/xml',
|
|
131
|
+
:query => build_signed_query)
|
|
132
|
+
end
|
|
110
133
|
end
|
|
111
134
|
end
|