asin 0.0.5 → 0.0.6
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/lib/asin.rb +74 -1
- data/readme.textile +15 -3
- data/test/test_asin.rb +14 -6
- metadata +13 -12
data/lib/asin.rb
CHANGED
@@ -4,8 +4,53 @@ require 'crack/xml'
|
|
4
4
|
require 'cgi'
|
5
5
|
require 'base64'
|
6
6
|
|
7
|
+
# ASIN (Amazon Simple INterface) is a gem for easy access of the Amazon E-Commerce-API.
|
8
|
+
# It is simple to configure and use. Since it's very small and flexible, it is easy to extend it to your needs.
|
9
|
+
#
|
10
|
+
# Author:: Peter Schröder (mailto:phoetmail@googlemail.com)
|
11
|
+
#
|
12
|
+
# ==Usage
|
13
|
+
#
|
14
|
+
# The ASIN module is designed as a mixin.
|
15
|
+
#
|
16
|
+
# require 'asin'
|
17
|
+
# include ASIN
|
18
|
+
#
|
19
|
+
# In order to use the Amazon API properly, you need to be a registered user (http://aws.amazon.com).
|
20
|
+
#
|
21
|
+
# The registration process will give you a +secret-key+ and an +access-key+ (AWSAccessKeyId).
|
22
|
+
#
|
23
|
+
# Both are needed to use ASIN:
|
24
|
+
#
|
25
|
+
# configure :secret => 'your-secret', :key => 'your-key'
|
26
|
+
#
|
27
|
+
# After configuring your environment you can call the +lookup+ method to retrieve an +Item+ via the Amazon Standard Identification Number (ASIN):
|
28
|
+
#
|
29
|
+
# item = lookup '1430218150'
|
30
|
+
# item.title
|
31
|
+
# => "Learn Objective-C on the Mac (Learn Series)"
|
32
|
+
#
|
33
|
+
# The +Item+ uses a Hashie::Mash as its internal data representation and you can get fetched data from it:
|
34
|
+
#
|
35
|
+
# item.raw.ItemAttributes.ListPrice.FormattedPrice
|
36
|
+
# => "$39.99"
|
37
|
+
#
|
38
|
+
# ==Further Configuration
|
39
|
+
#
|
40
|
+
# If you need more controll over the request that is sent to the Amazon API (http://docs.amazonwebservices.com/AWSEcommerceService/4-0/),
|
41
|
+
# you can override some defaults or add additional query-parameters to the REST calls:
|
42
|
+
#
|
43
|
+
# configure :host => 'webservices.amazon.de'
|
44
|
+
# lookup(asin, :ResponseGroup => :Medium)
|
45
|
+
#
|
7
46
|
module ASIN
|
8
47
|
|
48
|
+
# =Item
|
49
|
+
#
|
50
|
+
# The +Item+ class is a wrapper for the Amazon XML-REST-Response.
|
51
|
+
#
|
52
|
+
# A Hashie::Mash is used for the internal data representation and can be accessed over the +raw+ attribute.
|
53
|
+
#
|
9
54
|
class Item
|
10
55
|
|
11
56
|
attr_reader :raw
|
@@ -20,6 +65,18 @@ module ASIN
|
|
20
65
|
|
21
66
|
end
|
22
67
|
|
68
|
+
# Configures the basic request parameters for ASIN.
|
69
|
+
#
|
70
|
+
# Expects at least +secret+ and +key+ for the API call:
|
71
|
+
#
|
72
|
+
# configure :secret => 'your-secret', :key => 'your-key'
|
73
|
+
#
|
74
|
+
# ==== Options:
|
75
|
+
#
|
76
|
+
# [secret] the API secret key
|
77
|
+
# [key] the API access key
|
78
|
+
# [host] the host, which defaults to 'webservices.amazon.com'
|
79
|
+
#
|
23
80
|
def configure(options={})
|
24
81
|
@options = {
|
25
82
|
:host => 'webservices.amazon.com',
|
@@ -31,12 +88,28 @@ module ASIN
|
|
31
88
|
@options.merge! options
|
32
89
|
end
|
33
90
|
|
91
|
+
# Performs an +ItemLookup+ REST call against the Amazon API.
|
92
|
+
#
|
93
|
+
# Expects an ASIN (Amazon Standard Identification Number) and returns an +Item+:
|
94
|
+
#
|
95
|
+
# item = lookup '1430218150'
|
96
|
+
# item.title
|
97
|
+
# => "Learn Objective-C on the Mac (Learn Series)"
|
98
|
+
#
|
99
|
+
# ==== Options:
|
100
|
+
#
|
101
|
+
# Additional parameters for the API call like this:
|
102
|
+
#
|
103
|
+
# lookup(asin, :ResponseGroup => :Medium)
|
104
|
+
#
|
34
105
|
def lookup(asin, params={})
|
35
106
|
Item.new(call(params.merge(:Operation => :ItemLookup, :ItemId => asin)))
|
36
107
|
end
|
37
108
|
|
109
|
+
private
|
110
|
+
|
38
111
|
def call(params)
|
39
|
-
configure if @options.nil?
|
112
|
+
raise "you have to configure ASIN: 'configure :secret => 'your-secret', :key => 'your-key''" if @options.nil?
|
40
113
|
signed = create_signed_query_string(params)
|
41
114
|
resp = HTTPClient.new.get_content("http://#{@options[:host]}#{@options[:path]}?#{signed}")
|
42
115
|
resp = resp.force_encoding('UTF-8') # shady workaround cause amazon returns bad utf-8 chars
|
data/readme.textile
CHANGED
@@ -10,11 +10,23 @@ The code currently runs only on __Ruby 1.9__ due to encoding issues with the Ama
|
|
10
10
|
|
11
11
|
h2. Usage
|
12
12
|
|
13
|
-
<pre>
|
13
|
+
<pre lang="ruby">
|
14
14
|
require 'asin'
|
15
15
|
include ASIN
|
16
|
+
# use the configure method to setup your api credentials
|
16
17
|
configure :secret => 'your-secret', :key => 'your-key'
|
17
|
-
item
|
18
|
+
# lookup an item with the amazon standard identification number (asin)
|
19
|
+
item = lookup '1430218150'
|
20
|
+
# have a look at the title of the item
|
18
21
|
item.title
|
19
22
|
=> Learn Objective-C on the Mac (Learn Series)
|
20
|
-
|
23
|
+
# access the internal data representation (Hashie::Mash)
|
24
|
+
item.raw.ItemAttributes.ListPrice.FormattedPrice
|
25
|
+
=> $39.99
|
26
|
+
</pre>
|
27
|
+
|
28
|
+
h2. TODO
|
29
|
+
|
30
|
+
* Logging
|
31
|
+
* More Docs
|
32
|
+
* More Tests
|
data/test/test_asin.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
|
+
ANY_ASIN = '1430218150'
|
4
|
+
|
3
5
|
class TestAsin < Test::Unit::TestCase
|
4
6
|
|
5
7
|
def setup
|
@@ -7,11 +9,17 @@ class TestAsin < Test::Unit::TestCase
|
|
7
9
|
@helper.extend ASIN
|
8
10
|
end
|
9
11
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
12
|
+
def test_lookup_with_configured_asin
|
13
|
+
secret = ENV['ASIN_SECRET']
|
14
|
+
key = ENV['ASIN_KEY']
|
15
|
+
puts "configure #{secret} and #{key} for this test"
|
16
|
+
@helper.configure :secret => secret, :key => key
|
17
|
+
p item = @helper.lookup(ANY_ASIN)
|
18
|
+
assert_match(/Learn Objective/, item.title)
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_error_with_not_called_configure
|
22
|
+
assert_raise(RuntimeError) { @helper.lookup ANY_ASIN }
|
23
|
+
end
|
16
24
|
|
17
25
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: asin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 19
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 6
|
10
|
+
version: 0.0.6
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- "Peter Schr\xC3\xB6der"
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-07-
|
18
|
+
date: 2010-07-13 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -66,7 +66,7 @@ dependencies:
|
|
66
66
|
version: 2.1.0
|
67
67
|
type: :runtime
|
68
68
|
version_requirements: *id003
|
69
|
-
description: Amazon Simple INterface or whatever you want to call this
|
69
|
+
description: Amazon Simple INterface or whatever you want to call this.
|
70
70
|
email: phoetmail@googlemail.com
|
71
71
|
executables: []
|
72
72
|
|
@@ -75,10 +75,10 @@ extensions: []
|
|
75
75
|
extra_rdoc_files:
|
76
76
|
- readme.textile
|
77
77
|
files:
|
78
|
-
- readme.textile
|
79
78
|
- lib/asin.rb
|
80
|
-
- test/test_helper.rb
|
81
79
|
- test/test_asin.rb
|
80
|
+
- test/test_helper.rb
|
81
|
+
- readme.textile
|
82
82
|
has_rdoc: true
|
83
83
|
homepage: http://github.com/phoet/asin
|
84
84
|
licenses: []
|
@@ -95,10 +95,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
95
95
|
requirements:
|
96
96
|
- - ">="
|
97
97
|
- !ruby/object:Gem::Version
|
98
|
-
hash:
|
98
|
+
hash: 29
|
99
99
|
segments:
|
100
|
-
-
|
101
|
-
|
100
|
+
- 1
|
101
|
+
- 9
|
102
|
+
version: "1.9"
|
102
103
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
103
104
|
none: false
|
104
105
|
requirements:
|
@@ -114,7 +115,7 @@ rubyforge_project:
|
|
114
115
|
rubygems_version: 1.3.7
|
115
116
|
signing_key:
|
116
117
|
specification_version: 3
|
117
|
-
summary: Simple interface to Amazon Item lookup
|
118
|
+
summary: Simple interface to Amazon Item lookup.
|
118
119
|
test_files:
|
119
|
-
- test/test_helper.rb
|
120
120
|
- test/test_asin.rb
|
121
|
+
- test/test_helper.rb
|