amazon-album-art 0.3.0 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +1 -0
- data/Gemfile.lock +2 -0
- data/VERSION +1 -1
- data/amazon-album-art.gemspec +6 -2
- data/lib/amazon-album-art/client.rb +32 -7
- data/test/fixtures/albums.json +101 -0
- data/test/helper.rb +10 -7
- metadata +22 -8
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -8,6 +8,7 @@ GEM
|
|
8
8
|
bundler (~> 1.0.0)
|
9
9
|
git (>= 1.2.5)
|
10
10
|
rake
|
11
|
+
json (1.4.6)
|
11
12
|
nokogiri (1.4.4)
|
12
13
|
rake (0.8.7)
|
13
14
|
rcov (0.9.9)
|
@@ -23,6 +24,7 @@ PLATFORMS
|
|
23
24
|
DEPENDENCIES
|
24
25
|
bundler (~> 1.0.0)
|
25
26
|
jeweler (~> 1.5.2)
|
27
|
+
json
|
26
28
|
nokogiri (>= 1.4.4)
|
27
29
|
rcov
|
28
30
|
shoulda
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.1
|
data/amazon-album-art.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{amazon-album-art}
|
8
|
-
s.version = "0.3.
|
8
|
+
s.version = "0.3.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["John Allen"]
|
12
|
-
s.date = %q{2011-01-
|
12
|
+
s.date = %q{2011-01-20}
|
13
13
|
s.description = %q{A specialized Amazon AWS gem for finding Album Art running on top of the 'sucker' gem}
|
14
14
|
s.email = %q{john@threedogconsulting.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -27,6 +27,7 @@ Gem::Specification.new do |s|
|
|
27
27
|
"amazon-album-art.gemspec",
|
28
28
|
"lib/amazon-album-art.rb",
|
29
29
|
"lib/amazon-album-art/client.rb",
|
30
|
+
"test/fixtures/albums.json",
|
30
31
|
"test/helper.rb",
|
31
32
|
"test/test_amazon-album-art.rb"
|
32
33
|
]
|
@@ -51,6 +52,7 @@ Gem::Specification.new do |s|
|
|
51
52
|
s.add_development_dependency(%q<rcov>, [">= 0"])
|
52
53
|
s.add_development_dependency(%q<nokogiri>, [">= 1.4.4"])
|
53
54
|
s.add_development_dependency(%q<sucker>, [">= 1.1.4"])
|
55
|
+
s.add_development_dependency(%q<json>, [">= 0"])
|
54
56
|
s.add_runtime_dependency(%q<nokogiri>, [">= 1.4.4"])
|
55
57
|
s.add_runtime_dependency(%q<sucker>, [">= 1.1.4"])
|
56
58
|
else
|
@@ -60,6 +62,7 @@ Gem::Specification.new do |s|
|
|
60
62
|
s.add_dependency(%q<rcov>, [">= 0"])
|
61
63
|
s.add_dependency(%q<nokogiri>, [">= 1.4.4"])
|
62
64
|
s.add_dependency(%q<sucker>, [">= 1.1.4"])
|
65
|
+
s.add_dependency(%q<json>, [">= 0"])
|
63
66
|
s.add_dependency(%q<nokogiri>, [">= 1.4.4"])
|
64
67
|
s.add_dependency(%q<sucker>, [">= 1.1.4"])
|
65
68
|
end
|
@@ -70,6 +73,7 @@ Gem::Specification.new do |s|
|
|
70
73
|
s.add_dependency(%q<rcov>, [">= 0"])
|
71
74
|
s.add_dependency(%q<nokogiri>, [">= 1.4.4"])
|
72
75
|
s.add_dependency(%q<sucker>, [">= 1.1.4"])
|
76
|
+
s.add_dependency(%q<json>, [">= 0"])
|
73
77
|
s.add_dependency(%q<nokogiri>, [">= 1.4.4"])
|
74
78
|
s.add_dependency(%q<sucker>, [">= 1.1.4"])
|
75
79
|
end
|
@@ -22,6 +22,9 @@ module AmazonAlbumArt
|
|
22
22
|
def search(artist, album, sizes = [:swatch, :small, :thumbnail, :tiny, :medium, :large])
|
23
23
|
raise ArgumentError.new("An artist and album are required to search") if artist.blank? || album.blank?
|
24
24
|
|
25
|
+
# clean up params, this client may be used repeatedly
|
26
|
+
clean_params(%w{IdType ResponseGroup ItemId})
|
27
|
+
|
25
28
|
# Prepare a request.
|
26
29
|
@worker << {
|
27
30
|
"Operation" => "ItemSearch",
|
@@ -34,23 +37,24 @@ module AmazonAlbumArt
|
|
34
37
|
results = @worker.get
|
35
38
|
|
36
39
|
# Make sure nothing went awry.
|
37
|
-
check_response(results, "Error finding album")
|
40
|
+
return nil if !check_response?(results, "Error finding album")
|
38
41
|
|
39
42
|
# Now parse it.
|
40
43
|
results.map("Item") do |match|
|
41
44
|
begin
|
42
45
|
attribs = match['ItemAttributes']
|
43
46
|
# grab values that were returned
|
44
|
-
found_artist, found_album = (attribs
|
47
|
+
found_artist, found_album = load_artist(attribs), load_album(attribs)
|
45
48
|
rescue StandardError => bang
|
46
|
-
#
|
49
|
+
# handled error from Sucker in some cases
|
47
50
|
next
|
48
51
|
end
|
49
52
|
# check to see if we have a reasonable match
|
50
53
|
next unless !found_album.blank? && !found_artist.blank? && matches?(album, found_album) && matches?(artist, found_artist)
|
51
54
|
|
52
55
|
# remove params not used for image search
|
53
|
-
@worker.parameters.delete_if { |k,v| %w{SearchIndex Title Artist}.include? k }
|
56
|
+
# @worker.parameters.delete_if { |k,v| %w{SearchIndex Title Artist}.include? k }
|
57
|
+
clean_params(%w{SearchIndex Title Artist})
|
54
58
|
|
55
59
|
# fetch images
|
56
60
|
@worker << {
|
@@ -64,13 +68,15 @@ module AmazonAlbumArt
|
|
64
68
|
images = @worker.get
|
65
69
|
|
66
70
|
# Make sure nothing went awry.
|
67
|
-
check_response(results, "Error finding images")
|
71
|
+
return nil if !check_response?(results, "Error finding images")
|
68
72
|
|
69
73
|
# parse response
|
70
74
|
doc = Nokogiri::XML.parse(images.body)
|
71
75
|
|
72
76
|
return { :artist => found_artist, :album => found_album, :images => load_images(doc, sizes) }
|
73
77
|
end
|
78
|
+
|
79
|
+
return nil # nothing found
|
74
80
|
end
|
75
81
|
|
76
82
|
private
|
@@ -101,6 +107,24 @@ module AmazonAlbumArt
|
|
101
107
|
return x
|
102
108
|
end
|
103
109
|
|
110
|
+
def clean_params(params)
|
111
|
+
# remove given params so worker can be reused
|
112
|
+
@worker.parameters.delete_if { |k,v| params.include? k }
|
113
|
+
end
|
114
|
+
|
115
|
+
def load_artist(attribs)
|
116
|
+
# found artists are returned in many different permutations
|
117
|
+
return attribs['Artist'] if attribs.has_key?('Artist')
|
118
|
+
return attribs['Author'] if attribs.has_key?('Author')
|
119
|
+
return attribs['Creator'].map { |item| item["__content__"] if item.has_key?("__content__") }.join(" and ") if attribs.has_key?("Creator") && attribs['Creator'].is_a?(Array)
|
120
|
+
return attribs["Creator"]["__content__"] if attribs.has_key?("Creator") && attribs["Creator"].has_key?('__content__')
|
121
|
+
return nil
|
122
|
+
end
|
123
|
+
|
124
|
+
def load_album(attribs)
|
125
|
+
attribs.has_key?('Title') ? attribs['Title'] : ""
|
126
|
+
end
|
127
|
+
|
104
128
|
def load_images(doc, sizes)
|
105
129
|
# build the hash with requested values
|
106
130
|
{}.tap do |urls|
|
@@ -110,8 +134,9 @@ module AmazonAlbumArt
|
|
110
134
|
end
|
111
135
|
end
|
112
136
|
|
113
|
-
def check_response(results, msg)
|
114
|
-
raise AmazonAlbumArtError.new(msg) unless results.valid? || results.find("Error").size > 0
|
137
|
+
def check_response?(results, msg)
|
138
|
+
# raise AmazonAlbumArtError.new(msg) unless results.valid? || results.find("Error").size > 0
|
139
|
+
results.valid? || results.find("Error").size == 0
|
115
140
|
end
|
116
141
|
end
|
117
142
|
|
@@ -0,0 +1,101 @@
|
|
1
|
+
[{"artist":"Rihanna", "album":"A Girl Like Me"},
|
2
|
+
{"artist":"Swing Out Sister", "album":"20th Century Masters - The Millennium Collection: The Best Of Swing Out Sister"},
|
3
|
+
{"artist":"Eddie Kendricks", "album":"20th Century Masters: The Millenium Collection"},
|
4
|
+
{"artist":"Brainstorm", "album":"54: Music From The Miramax Motion Picture, Vol. 2"},
|
5
|
+
{"artist":"Edgar Winter Group", "album":"70's Pop Hits"},
|
6
|
+
{"artist":"Collective Soul", "album":"7even Year Itch: Greatest Hits, 1994-2001"},
|
7
|
+
{"artist":"Breakfast Club", "album":"'80s Hits Back Vol. 3"},
|
8
|
+
{"artist":"Billy Squier", "album":"80's Rock, Vol. 1"},
|
9
|
+
{"artist":"Hilary Duff And Haylie Duff", "album":"A Cinderella Story"},
|
10
|
+
{"artist":"Mya", "album":"A Cinderella Story"},
|
11
|
+
{"artist":"Snow Patrol", "album":"A Hundred Million Suns"},
|
12
|
+
{"artist":"Jonas Brothers", "album":"A Little Bit Longer"},
|
13
|
+
{"artist":"Don Henley", "album":"Actual Miles: Henley's Greatest Hits"},
|
14
|
+
{"artist":"Lisa Stansfield", "album":"Affection"},
|
15
|
+
{"artist":"Tower Of Power", "album":"Ain't Nothin' Stoppin' Us Now"},
|
16
|
+
{"artist":"Al Green", "album":"Al Green's Greatest Hits"},
|
17
|
+
{"artist":"Sum 41", "album":"All Killer No Filler"},
|
18
|
+
{"artist":"Smash Mouth", "album":"All Star Smash Hits"},
|
19
|
+
{"artist":"Santana feat. Michelle Branch And The Wreckers", "album":"All That I Am"},
|
20
|
+
{"artist":"Killers", "album":"All These Things That I've Done"},
|
21
|
+
{"artist":"Crystal Waters", "album":"All Ultimate Dance"},
|
22
|
+
{"artist":"Josh Kelley", "album":"Almost Honest"},
|
23
|
+
{"artist":"Al Stewart", "album":"American Woman And Other Hits Of The '70s"},
|
24
|
+
{"artist":"Real McCoy", "album":"Another Night"},
|
25
|
+
{"artist":"Guns N' Roses", "album":"Appetite For Destruction"},
|
26
|
+
{"artist":"Bodyrockers", "album":"Aquamarine: Music From The Motion Picture"},
|
27
|
+
{"artist":"Barenaked Ladies", "album":"Are Me"},
|
28
|
+
{"artist":"Aretha Franklin", "album":"Aretha's Best"},
|
29
|
+
{"artist":"Aretha Franklin and George Michael", "album":"Aretha's Best"},
|
30
|
+
{"artist":"Stevie Wonder", "album":"At The Close Of A Century"},
|
31
|
+
{"artist":"Average White Band", "album":"AWB"},
|
32
|
+
{"artist":"Lenny Kravitz", "album":"Baptism"},
|
33
|
+
{"artist":"Nick Lowe", "album":"Basher: The Best of Nick Lowe"},
|
34
|
+
{"artist":"English Beat", "album":"Beat This!: The Best Of The English Beat"},
|
35
|
+
{"artist":"Jesse McCartney", "album":"Beautiful Soul"},
|
36
|
+
{"artist":"Big Mountain", "album":"Best of Big Mountain"},
|
37
|
+
{"artist":"Blur", "album":"Best of Blur"},
|
38
|
+
{"artist":"David Bowie", "album":"Best Of Bowie"},
|
39
|
+
{"artist":"David Bowie and Mick Jagger", "album":"Best Of Bowie"},
|
40
|
+
{"artist":"Brothers Johnson", "album":"Best Of Brothers Johnson"},
|
41
|
+
{"artist":"En Vogue", "album":"Best Of En Vogue"},
|
42
|
+
{"artist":"Pablo Cruise", "album":"Best Of Pablo Cruise"},
|
43
|
+
{"artist":"Ziggy Marley And The Melody Makers", "album":"Best of Ziggy Marley and the Melody Makers (1988-1993)"},
|
44
|
+
{"artist":"Van Halen", "album":"Best Of, Vol. 1"},
|
45
|
+
{"artist":"Outfield", "album":"Big Innings: Best Of The Outfield"},
|
46
|
+
{"artist":"Atlantic Starr", "album":"Billboard Hot R&B Hits: 1982"},
|
47
|
+
{"artist":"Brothers Johnson", "album":"Billboard Top Dance Hits - 1980"},
|
48
|
+
{"artist":"Heatwave", "album":"Billboard Top Hits: 1977"},
|
49
|
+
{"artist":"Jackson 5", "album":"Billboard Top Rock 'n' Roll Hits: 1974"},
|
50
|
+
{"artist":"Billy Idol", "album":"Billy Idol's Greatest Hits"},
|
51
|
+
{"artist":"Alana Davis", "album":"Blame It On Me"},
|
52
|
+
{"artist":"Jimmy Eat World", "album":"Bleed American"},
|
53
|
+
{"artist":"Blink-182", "album":"Blink-182 Greatest Hits"},
|
54
|
+
{"artist":"Boney M", "album":"Boney M - The Greatest Hits"},
|
55
|
+
{"artist":"Rick Springfield", "album":"Boogie Nights No. 2: More Music From The Original Motion Picture"},
|
56
|
+
{"artist":"Shaggy", "album":"Boombastic"},
|
57
|
+
{"artist":"Bonnie Raitt", "album":"Boys On The Side"},
|
58
|
+
{"artist":"Sting", "album":"Brand New Day - The Remixes"},
|
59
|
+
{"artist":"Kelly Clarkson", "album":"Breakaway"},
|
60
|
+
{"artist":"Miley Cyrus", "album":"Breakout"},
|
61
|
+
{"artist":"Wallflowers", "album":"Bringing Down The Horse"},
|
62
|
+
{"artist":"Raconteurs", "album":"Broken Boy Soldiers"},
|
63
|
+
{"artist":"Bachman-Turner Overdrive", "album":"BTO's Greatest"},
|
64
|
+
{"artist":"Red Hot Chili Peppers", "album":"By The Way"},
|
65
|
+
{"artist":"Marc Broussard", "album":"Carencro"},
|
66
|
+
{"artist":"C And C Music Factory", "album":"Casey Kasem Presents America's Top Ten Through The Years: 90s"},
|
67
|
+
{"artist":"Gavin DeGraw", "album":"Chariot"},
|
68
|
+
{"artist":"Andy Gibb", "album":"Charlie's Angels: Full Throttle"},
|
69
|
+
{"artist":"Blackbyrds", "album":"Chart Toppers: Dance Hits of the 70's"},
|
70
|
+
{"artist":"Cheap Trick", "album":"Cheap Trick's Greatest Hits"},
|
71
|
+
{"artist":"Elton John", "album":"Chicken Soup for the Soul: The Triumph of the Spirit"},
|
72
|
+
{"artist":"Christina Aguilera", "album":"Christina Aguilera"},
|
73
|
+
{"artist":"James Taylor", "album":"Classic Songs"},
|
74
|
+
{"artist":"George Harrison", "album":"Cloud Nine"},
|
75
|
+
{"artist":"Heatwave", "album":"Club Epic: A Collection Of Classic Dance Mixes, Vol.1"},
|
76
|
+
{"artist":"Jack Johnson", "album":"Curious George: Sing-A-Longs And Lullabies For The Film"},
|
77
|
+
{"artist":"Barry White", "album":"Dance Fever : Hits of the 70's"},
|
78
|
+
{"artist":"Vicki Sue Robinson", "album":"Dance Floor Divas: The 70's"},
|
79
|
+
{"artist":"Phil Collins", "album":"Dance Into The Light"},
|
80
|
+
{"artist":"Dan Hartman", "album":"Dancin' 'N' Disco"},
|
81
|
+
{"artist":"Daughtry", "album":"Daughtry"},
|
82
|
+
{"artist":"Janet Jackson", "album":"Design Of A Decade"},
|
83
|
+
{"artist":"Eagle-Eye Cherry", "album":"Desireless"},
|
84
|
+
{"artist":"Barenaked Ladies", "album":"Disc One: All Their Greatest Hits"},
|
85
|
+
{"artist":"Van Halen", "album":"Diver Down"},
|
86
|
+
{"artist":"Donavon Frankenreiter feat. Jack Johnson", "album":"Donavon Frankenreiter"},
|
87
|
+
{"artist":"Bobby Brown", "album":"Don't Be Cruel"},
|
88
|
+
{"artist":"Replacements", "album":"Don't You Know Who I Think I Was?: The Best Of The Replacements"},
|
89
|
+
{"artist":"Doobie Brothers", "album":"Doobie Brothers' Greatest Hits"},
|
90
|
+
{"artist":"Green Day", "album":"Dookie"},
|
91
|
+
{"artist":"KT Tunstall", "album":"Drastic Fantastic"},
|
92
|
+
{"artist":"Corrs", "album":"Dreams: The Ultimate Corrs Collection"},
|
93
|
+
{"artist":"Whispers", "album":"Drivin' Soul"},
|
94
|
+
{"artist":"Duran Duran", "album":"Duran Duran: Greatest"},
|
95
|
+
{"artist":"Eagles", "album":"Eagles Greatest Hits, Vol. 2"},
|
96
|
+
{"artist":"Culture Club", "album":"Eighties Complete Vol. #2"},
|
97
|
+
{"artist":"R.E.M.", "album":"Eponymous"},
|
98
|
+
{"artist":"Clash", "album":"Essential Clash"},
|
99
|
+
{"artist":"Eiffel 65", "album":"Europop"},
|
100
|
+
{"artist":"Vertical Horizon", "album":"Everything You Want"}
|
101
|
+
]
|
data/test/helper.rb
CHANGED
@@ -14,11 +14,14 @@ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
|
14
14
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
15
15
|
require 'amazon-album-art'
|
16
16
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
17
|
+
def api_key
|
18
|
+
'api-key'
|
19
|
+
end
|
20
|
+
def secret_key
|
21
|
+
"secret-key"
|
22
|
+
end
|
23
|
+
def fixture_file(filename)
|
24
|
+
return '' if filename == ''
|
25
|
+
file_path = File.expand_path(File.dirname(__FILE__) + '/fixtures/' + filename)
|
26
|
+
File.read(file_path)
|
24
27
|
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 3
|
8
|
-
-
|
9
|
-
version: 0.3.
|
8
|
+
- 1
|
9
|
+
version: 0.3.1
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- John Allen
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2011-01-
|
17
|
+
date: 2011-01-20 00:00:00 -05:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -104,8 +104,21 @@ dependencies:
|
|
104
104
|
prerelease: false
|
105
105
|
version_requirements: *id006
|
106
106
|
- !ruby/object:Gem::Dependency
|
107
|
-
name:
|
107
|
+
name: json
|
108
108
|
requirement: &id007 !ruby/object:Gem::Requirement
|
109
|
+
none: false
|
110
|
+
requirements:
|
111
|
+
- - ">="
|
112
|
+
- !ruby/object:Gem::Version
|
113
|
+
segments:
|
114
|
+
- 0
|
115
|
+
version: "0"
|
116
|
+
type: :development
|
117
|
+
prerelease: false
|
118
|
+
version_requirements: *id007
|
119
|
+
- !ruby/object:Gem::Dependency
|
120
|
+
name: nokogiri
|
121
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
109
122
|
none: false
|
110
123
|
requirements:
|
111
124
|
- - ">="
|
@@ -117,10 +130,10 @@ dependencies:
|
|
117
130
|
version: 1.4.4
|
118
131
|
type: :runtime
|
119
132
|
prerelease: false
|
120
|
-
version_requirements: *
|
133
|
+
version_requirements: *id008
|
121
134
|
- !ruby/object:Gem::Dependency
|
122
135
|
name: sucker
|
123
|
-
requirement: &
|
136
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
124
137
|
none: false
|
125
138
|
requirements:
|
126
139
|
- - ">="
|
@@ -132,7 +145,7 @@ dependencies:
|
|
132
145
|
version: 1.1.4
|
133
146
|
type: :runtime
|
134
147
|
prerelease: false
|
135
|
-
version_requirements: *
|
148
|
+
version_requirements: *id009
|
136
149
|
description: A specialized Amazon AWS gem for finding Album Art running on top of the 'sucker' gem
|
137
150
|
email: john@threedogconsulting.com
|
138
151
|
executables: []
|
@@ -153,6 +166,7 @@ files:
|
|
153
166
|
- amazon-album-art.gemspec
|
154
167
|
- lib/amazon-album-art.rb
|
155
168
|
- lib/amazon-album-art/client.rb
|
169
|
+
- test/fixtures/albums.json
|
156
170
|
- test/helper.rb
|
157
171
|
- test/test_amazon-album-art.rb
|
158
172
|
has_rdoc: true
|
@@ -169,7 +183,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
169
183
|
requirements:
|
170
184
|
- - ">="
|
171
185
|
- !ruby/object:Gem::Version
|
172
|
-
hash:
|
186
|
+
hash: 3587697543368286211
|
173
187
|
segments:
|
174
188
|
- 0
|
175
189
|
version: "0"
|