sucker 1.3.1 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -10,47 +10,90 @@ Sucker is fast and supports __the entire Amazon API__.
10
10
  Usage
11
11
  -----
12
12
 
13
+ Read the [API](http://aws.amazon.com/archives/Product%20Advertising%20API). Jump to the __Operations__ section if in a hurry.
14
+
13
15
  Set up.
14
16
 
15
- worker = Sucker.new(
17
+ worker = Sucker.new \
16
18
  :locale => :us,
17
- :key => 'API KEY',
18
- :secret => 'API SECRET')
19
+ :key => api_key,
20
+ :secret => api_secret
19
21
 
20
22
  Build a request.
21
23
 
22
24
  worker << {
23
25
  'Operation' => 'ItemLookup',
24
26
  'IdType' => 'ASIN',
25
- 'ItemId' => '0816614024',
27
+ 'ItemId' => 10.asins,
26
28
  'ResponseGroup' => 'ItemAttributes' }
27
29
 
28
30
  Get a response.
29
31
 
30
32
  response = worker.get
31
33
 
32
- Do something with it.
34
+ Fulfill a business value.
33
35
 
34
- items = response['Item'] if response.valid? # and so on
36
+ if response.valid?
37
+ response.each('Item') do |item|
38
+ consume item
39
+ end
40
+ end
35
41
 
36
42
  Repeat ad infinitum.
37
43
 
44
+ The following are all valid ways to query a response:
45
+
46
+ items = response.find('Item')
47
+ items = response['Item']
48
+ items = response.map('Item') { |item| ... }
49
+ response.each('Item') { |item| ... }
50
+
51
+ To dig further into the response object:
52
+
53
+ p response.valid?,
54
+ response.body,
55
+ response.code,
56
+ response.errors,
57
+ response.has_errors?,
58
+ response.to_hash,
59
+ response.xml
60
+
38
61
  Read further [here](http://rdoc.info/github/papercavalier/sucker/master/frames) and [here](http://relishapp.com/papercavalier/sucker).
39
62
 
40
- Multiple IPs
41
- ------------
63
+ API Usage
64
+ ---------
65
+
66
+ I have a growing cottage industry of gems we use to manage our
67
+ consumption of the Amazon API.
68
+
69
+ * [Multiplex](http://github.com/papercavalier/multiplex) binds a request
70
+ to a specified local IP.
71
+ * [Throttler](http://github.com/papercavalier/throttler) throttles
72
+ requests to a venue to one per second per IP.
42
73
 
43
- Amazon limits calls to a venue to one per second per IP address.
44
74
 
45
- If your server has multiple local interfaces, use them simultaneously like so:
75
+ A hypothetical setup:
46
76
 
47
- your_ips.each do |ip|
77
+ require 'multiplex'
78
+ require 'throttler'
79
+
80
+ ips.each do |ip|
48
81
  Thread.new do
49
- worker.local_ip = ip
50
- worker.get
82
+ scope = "#{ip}-#{locale}"
83
+ Throttler.throttle(scope) do
84
+ Net::HTTP.bind ip do
85
+ # Set up worker
86
+ response = worker.get
87
+ # Consume response
88
+ end
89
+ end
51
90
  end
52
91
  end
53
92
 
93
+ We prefer to use [Resque](http://github.com/defunkt/resque) to manage
94
+ multiple requests. Generally, four or five workers per venue per IP
95
+ should provide optimum throughput.
96
+
54
97
  Stubbing in Tests
55
98
  -----------------
56
99
 
data/lib/sucker.rbc CHANGED
@@ -1,5 +1,5 @@
1
1
  !RBIX
2
- 10937318184790222022
2
+ 0
3
3
  x
4
4
  M
5
5
  1
@@ -9,7 +9,7 @@ x
9
9
  10
10
10
  __script__
11
11
  i
12
- 46
12
+ 55
13
13
  5
14
14
  7
15
15
  0
@@ -28,30 +28,39 @@ i
28
28
  1
29
29
  1
30
30
  15
31
- 99
31
+ 5
32
32
  7
33
33
  3
34
- 65
34
+ 64
35
+ 47
35
36
  49
37
+ 1
38
+ 1
39
+ 15
40
+ 99
41
+ 7
36
42
  4
43
+ 65
44
+ 49
45
+ 5
37
46
  2
38
47
  13
39
48
  99
40
49
  12
41
50
  7
42
- 5
51
+ 6
43
52
  12
44
53
  7
45
- 6
54
+ 7
46
55
  12
47
56
  65
48
57
  12
49
58
  49
50
- 7
59
+ 8
51
60
  4
52
61
  15
53
62
  49
54
- 5
63
+ 6
55
64
  0
56
65
  15
57
66
  2
@@ -66,14 +75,17 @@ I
66
75
  0
67
76
  n
68
77
  p
69
- 8
78
+ 9
70
79
  s
71
- 14
72
- sucker/request
80
+ 17
81
+ sucker/parameters
73
82
  x
74
83
  7
75
84
  require
76
85
  s
86
+ 14
87
+ sucker/request
88
+ s
77
89
  15
78
90
  sucker/response
79
91
  x
@@ -208,16 +220,16 @@ p
208
220
  I
209
221
  -1
210
222
  I
211
- 10
223
+ 13
212
224
  I
213
225
  e
214
226
  I
215
- 11
227
+ 14
216
228
  I
217
229
  2b
218
230
  x
219
- 36
220
- /Users/snl/code/sucker/lib/sucker.rb
231
+ 44
232
+ /Users/hakanensari/code/sucker/lib/sucker.rb
221
233
  p
222
234
  1
223
235
  x
@@ -231,35 +243,39 @@ p
231
243
  I
232
244
  2
233
245
  I
234
- 10
246
+ 13
235
247
  I
236
248
  d
237
249
  x
238
- 36
239
- /Users/snl/code/sucker/lib/sucker.rb
250
+ 44
251
+ /Users/hakanensari/code/sucker/lib/sucker.rb
240
252
  p
241
253
  0
242
254
  x
243
255
  13
244
256
  attach_method
245
257
  p
246
- 7
258
+ 9
247
259
  I
248
260
  0
249
261
  I
250
- 1
262
+ 3
251
263
  I
252
264
  9
253
265
  I
254
- 2
266
+ 4
255
267
  I
256
268
  12
257
269
  I
258
- 7
270
+ 5
271
+ I
272
+ 1b
259
273
  I
260
- 2e
274
+ a
275
+ I
276
+ 37
261
277
  x
262
- 36
263
- /Users/snl/code/sucker/lib/sucker.rb
278
+ 44
279
+ /Users/hakanensari/code/sucker/lib/sucker.rb
264
280
  p
265
281
  0
@@ -1,5 +1,5 @@
1
1
  !RBIX
2
- 10937318184790222022
2
+ 0
3
3
  x
4
4
  M
5
5
  1
@@ -9,31 +9,40 @@ x
9
9
  10
10
10
  __script__
11
11
  i
12
- 28
13
- 99
12
+ 37
13
+ 5
14
14
  7
15
15
  0
16
- 65
16
+ 64
17
+ 47
17
18
  49
18
19
  1
20
+ 1
21
+ 15
22
+ 99
23
+ 7
24
+ 2
25
+ 65
26
+ 49
27
+ 3
19
28
  2
20
29
  13
21
30
  99
22
31
  12
23
32
  7
24
- 2
33
+ 4
25
34
  12
26
35
  7
27
- 3
36
+ 5
28
37
  12
29
38
  65
30
39
  12
31
40
  49
32
- 4
41
+ 6
33
42
  4
34
43
  15
35
44
  49
36
- 2
45
+ 4
37
46
  0
38
47
  15
39
48
  2
@@ -48,7 +57,13 @@ I
48
57
  0
49
58
  n
50
59
  p
51
- 5
60
+ 7
61
+ s
62
+ 24
63
+ active_support/inflector
64
+ x
65
+ 7
66
+ require
52
67
  x
53
68
  6
54
69
  Sucker
@@ -72,30 +87,30 @@ i
72
87
  99
73
88
  7
74
89
  0
75
- 44
76
- 43
90
+ 45
77
91
  1
92
+ 2
78
93
  65
79
94
  49
80
- 2
95
+ 3
81
96
  3
82
97
  13
83
98
  99
84
99
  12
85
100
  7
86
- 3
101
+ 4
87
102
  12
88
103
  7
89
- 4
104
+ 5
90
105
  12
91
106
  65
92
107
  12
93
108
  49
94
- 5
109
+ 6
95
110
  4
96
111
  15
97
112
  49
98
- 3
113
+ 4
99
114
  0
100
115
  11
101
116
  I
@@ -108,13 +123,14 @@ I
108
123
  0
109
124
  n
110
125
  p
111
- 6
126
+ 7
112
127
  x
113
128
  10
114
129
  Parameters
115
130
  x
116
131
  4
117
132
  Hash
133
+ n
118
134
  x
119
135
  10
120
136
  open_class
@@ -308,24 +324,24 @@ p
308
324
  I
309
325
  -1
310
326
  I
311
- 6
327
+ b
312
328
  I
313
329
  0
314
330
  I
315
- 7
331
+ c
316
332
  I
317
333
  b
318
334
  I
319
- 8
335
+ d
320
336
  I
321
337
  16
322
338
  I
323
- 9
339
+ e
324
340
  I
325
341
  21
326
342
  x
327
- 47
328
- /Users/snl/code/sucker/lib/sucker/parameters.rb
343
+ 55
344
+ /Users/hakanensari/code/sucker/lib/sucker/parameters.rb
329
345
  p
330
346
  0
331
347
  x
@@ -391,7 +407,7 @@ x
391
407
  9
392
408
  normalize
393
409
  i
394
- 86
410
+ 75
395
411
  58
396
412
  37
397
413
  19
@@ -451,19 +467,8 @@ i
451
467
  49
452
468
  5
453
469
  0
454
- 7
455
- 6
456
- 64
457
470
  49
458
- 7
459
- 1
460
- 56
461
- 8
462
- 50
463
- 9
464
- 0
465
- 49
466
- 4
471
+ 6
467
472
  0
468
473
  20
469
474
  3
@@ -471,7 +476,7 @@ i
471
476
  18
472
477
  3
473
478
  49
474
- 10
479
+ 7
475
480
  2
476
481
  15
477
482
  15
@@ -488,7 +493,7 @@ I
488
493
  2
489
494
  n
490
495
  p
491
- 11
496
+ 8
492
497
  x
493
498
  5
494
499
  Array
@@ -505,94 +510,9 @@ join
505
510
  x
506
511
  4
507
512
  to_s
508
- s
509
- 1
510
- _
511
513
  x
512
- 5
513
- split
514
- M
515
- 1
516
- p
517
- 2
518
- x
519
- 9
520
- for_block
521
- t
522
- n
523
- x
524
- 9
525
- normalize
526
- i
527
- 29
528
- 57
529
- 19
530
- 0
531
- 15
532
- 20
533
- 0
534
- 78
535
- 79
536
- 20
537
- 0
538
- 78
539
- 79
540
- 49
541
- 0
542
- 2
543
- 49
544
- 1
545
- 0
546
- 13
547
- 18
548
- 4
549
- 49
550
- 2
551
- 3
552
- 15
553
- 15
554
- 20
555
- 0
556
- 11
557
- I
558
514
  8
559
- I
560
- 1
561
- I
562
- 1
563
- I
564
- 1
565
- n
566
- p
567
- 3
568
- x
569
- 2
570
- []
571
- x
572
- 6
573
- upcase
574
- x
575
- 3
576
- []=
577
- p
578
- 3
579
- I
580
- 0
581
- I
582
- 11
583
- I
584
- 1d
585
- x
586
- 47
587
- /Users/snl/code/sucker/lib/sucker/parameters.rb
588
- p
589
- 1
590
- x
591
- 1
592
- w
593
- x
594
- 3
595
- map
515
+ camelize
596
516
  x
597
517
  3
598
518
  []=
@@ -601,28 +521,28 @@ p
601
521
  I
602
522
  0
603
523
  I
604
- e
524
+ 12
605
525
  I
606
526
  a
607
527
  I
608
- f
528
+ 13
609
529
  I
610
530
  18
611
531
  I
612
- 10
532
+ 14
613
533
  I
614
534
  34
615
535
  I
616
- 11
536
+ 15
617
537
  I
618
- 53
538
+ 48
619
539
  I
620
- 12
540
+ 16
621
541
  I
622
- 56
542
+ 4b
623
543
  x
624
- 47
625
- /Users/snl/code/sucker/lib/sucker/parameters.rb
544
+ 55
545
+ /Users/hakanensari/code/sucker/lib/sucker/parameters.rb
626
546
  p
627
547
  4
628
548
  x
@@ -645,16 +565,16 @@ p
645
565
  I
646
566
  -1
647
567
  I
648
- d
568
+ 11
649
569
  I
650
570
  0
651
571
  I
652
- e
572
+ 12
653
573
  I
654
574
  f
655
575
  x
656
- 47
657
- /Users/snl/code/sucker/lib/sucker/parameters.rb
576
+ 55
577
+ /Users/hakanensari/code/sucker/lib/sucker/parameters.rb
658
578
  p
659
579
  0
660
580
  x
@@ -720,16 +640,16 @@ p
720
640
  I
721
641
  -1
722
642
  I
723
- 18
643
+ 1c
724
644
  I
725
645
  0
726
646
  I
727
- 19
647
+ 1d
728
648
  I
729
649
  10
730
650
  x
731
- 47
732
- /Users/snl/code/sucker/lib/sucker/parameters.rb
651
+ 55
652
+ /Users/hakanensari/code/sucker/lib/sucker/parameters.rb
733
653
  p
734
654
  0
735
655
  p
@@ -737,32 +657,32 @@ p
737
657
  I
738
658
  2
739
659
  I
740
- 3
660
+ 8
741
661
  I
742
662
  c
743
663
  I
744
- 4
664
+ 9
745
665
  I
746
666
  16
747
667
  I
748
- 6
668
+ b
749
669
  I
750
670
  24
751
671
  I
752
- d
672
+ 11
753
673
  I
754
674
  32
755
675
  I
756
- 16
676
+ 1a
757
677
  I
758
678
  36
759
679
  I
760
- 18
680
+ 1c
761
681
  I
762
682
  44
763
683
  x
764
- 47
765
- /Users/snl/code/sucker/lib/sucker/parameters.rb
684
+ 55
685
+ /Users/hakanensari/code/sucker/lib/sucker/parameters.rb
766
686
  p
767
687
  0
768
688
  x
@@ -773,27 +693,31 @@ p
773
693
  I
774
694
  2
775
695
  I
776
- 2
696
+ 7
777
697
  I
778
698
  1f
779
699
  x
780
- 47
781
- /Users/snl/code/sucker/lib/sucker/parameters.rb
700
+ 55
701
+ /Users/hakanensari/code/sucker/lib/sucker/parameters.rb
782
702
  p
783
703
  0
784
704
  x
785
705
  13
786
706
  attach_method
787
707
  p
788
- 3
708
+ 5
789
709
  I
790
710
  0
791
711
  I
792
- 1
712
+ 3
793
713
  I
794
- 1c
714
+ 9
715
+ I
716
+ 5
717
+ I
718
+ 25
795
719
  x
796
- 47
797
- /Users/snl/code/sucker/lib/sucker/parameters.rb
720
+ 55
721
+ /Users/hakanensari/code/sucker/lib/sucker/parameters.rb
798
722
  p
799
723
  0