musicbrainz 0.3.1 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +1 -1
- data/VERSION +1 -1
- data/lib/models/music_brainz.rb +1 -1
- data/lib/models/music_brainz/artist.rb +34 -1
- data/lib/models/music_brainz/release.rb +1 -1
- data/lib/models/music_brainz/release_group.rb +1 -1
- data/lib/models/music_brainz/track.rb +1 -1
- data/musicbrainz.gemspec +2 -2
- data/test/test_musicbrainz.rb +11 -0
- metadata +15 -15
data/README.rdoc
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.4.0
|
data/lib/models/music_brainz.rb
CHANGED
@@ -15,12 +15,12 @@ module MusicBrainz
|
|
15
15
|
5.times do
|
16
16
|
begin
|
17
17
|
response = open(url, "User-Agent" => "gem musicbrainz (https://github.com/magnolia-fan/musicbrainz) @ " + Socket.gethostname)
|
18
|
+
self.last_query_time = Time.now.to_f
|
18
19
|
rescue => e
|
19
20
|
p "MusicBrainz: 503"
|
20
21
|
end
|
21
22
|
break unless response.nil?
|
22
23
|
end
|
23
|
-
self.last_query_time = Time.now.to_f
|
24
24
|
response
|
25
25
|
end
|
26
26
|
|
@@ -6,7 +6,9 @@ module MusicBrainz
|
|
6
6
|
def release_groups
|
7
7
|
if @release_groups.nil? and not self.id.nil?
|
8
8
|
@release_groups = []
|
9
|
-
Nokogiri::XML(MusicBrainz.load(
|
9
|
+
Nokogiri::XML(MusicBrainz.load(
|
10
|
+
'http://musicbrainz.org/ws/2/release-group/?artist=' + self.id
|
11
|
+
)).css('release-group').each do |rg|
|
10
12
|
@release_groups << MusicBrainz::ReleaseGroup.parse_xml(rg)
|
11
13
|
end
|
12
14
|
end
|
@@ -27,5 +29,36 @@ module MusicBrainz
|
|
27
29
|
@artist.date_end = xml.css('artist > life-span > end').text unless xml.css('artist > life-span > end').empty?
|
28
30
|
@artist
|
29
31
|
end
|
32
|
+
|
33
|
+
def self.find_by_name name
|
34
|
+
matches = self.search name
|
35
|
+
matches.length.zero? ? nil : self.find(matches.first[:mbid])
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.search name
|
39
|
+
artists = []
|
40
|
+
xml = Nokogiri::XML(MusicBrainz.load(
|
41
|
+
'http://musicbrainz.org/ws/2/artist/?query='+ URI.escape(name).gsub(/\&/, '%26').gsub(/\?/, '%3F') +'~&limit=50'
|
42
|
+
))
|
43
|
+
xml.css('artist-list > artist').each do |a|
|
44
|
+
artist = {
|
45
|
+
:name => a.first_element_child.text,
|
46
|
+
:weight => 0,
|
47
|
+
:desc => (a.css('disambiguation').text unless a.css('disambiguation').empty?),
|
48
|
+
:type => a.attr('type'),
|
49
|
+
:mbid => a.attr('id')
|
50
|
+
}
|
51
|
+
aliases = a.css('alias-list > alias').map{ |item| item.text }
|
52
|
+
if aliases.include? name
|
53
|
+
artist[:weight] += 20
|
54
|
+
elsif aliases.map{ |item| item.downcase }.include? name.downcase
|
55
|
+
artist[:weight] += 10
|
56
|
+
elsif aliases.map{ |item| item.downcase.gsub(/\s/, '') }.include? name.downcase.gsub(/\s/, '')
|
57
|
+
artist[:weight] += 5
|
58
|
+
end
|
59
|
+
artists << artist
|
60
|
+
end
|
61
|
+
artists.sort{ |a, b| b[:weight] <=> a[:weight] }.take(10)
|
62
|
+
end
|
30
63
|
end
|
31
64
|
end
|
@@ -6,7 +6,7 @@ module MusicBrainz
|
|
6
6
|
def tracks
|
7
7
|
if @tracks.nil? and not self.id.nil?
|
8
8
|
@tracks = []
|
9
|
-
Nokogiri::XML(MusicBrainz.load('http://musicbrainz.org/ws/2/release/' + self.id + '?inc=recordings')).css('medium-list > medium > track-list > track').each do |r|
|
9
|
+
Nokogiri::XML(MusicBrainz.load('http://musicbrainz.org/ws/2/release/' + self.id + '?inc=recordings&limit=100')).css('medium-list > medium > track-list > track').each do |r|
|
10
10
|
@tracks << MusicBrainz::Track.parse_xml(r)
|
11
11
|
end
|
12
12
|
end
|
@@ -6,7 +6,7 @@ module MusicBrainz
|
|
6
6
|
def releases
|
7
7
|
if @releases.nil? and not self.id.nil?
|
8
8
|
@releases = []
|
9
|
-
Nokogiri::XML(MusicBrainz.load('http://musicbrainz.org/ws/2/release/?release-group=' + self.id)).css('release').each do |r|
|
9
|
+
Nokogiri::XML(MusicBrainz.load('http://musicbrainz.org/ws/2/release/?release-group=' + self.id + '&limit=100')).css('release').each do |r|
|
10
10
|
@releases << MusicBrainz::Release.parse_xml(r)
|
11
11
|
end
|
12
12
|
end
|
@@ -3,7 +3,7 @@ module MusicBrainz
|
|
3
3
|
attr_accessor :position, :recording_id, :title, :length
|
4
4
|
|
5
5
|
def self.find mbid
|
6
|
-
xml = Nokogiri::XML(MusicBrainz.load('http://musicbrainz.org/ws/2/recording/' + mbid))
|
6
|
+
xml = Nokogiri::XML(MusicBrainz.load('http://musicbrainz.org/ws/2/recording/' + mbid + '?limit=100'))
|
7
7
|
self.parse_xml(xml) unless xml.nil?
|
8
8
|
end
|
9
9
|
|
data/musicbrainz.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{musicbrainz}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.4.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = [%q{Gregory Eremin}]
|
12
|
-
s.date = %q{2011-09-
|
12
|
+
s.date = %q{2011-09-14}
|
13
13
|
s.description = %q{MusicBrainz Web Service wrapper with ActiveRecord-style models}
|
14
14
|
s.email = %q{magnolia_fan@me.com}
|
15
15
|
s.extra_rdoc_files = [
|
data/test/test_musicbrainz.rb
CHANGED
@@ -8,6 +8,17 @@ class TestMusicbrainz < Test::Unit::TestCase
|
|
8
8
|
end
|
9
9
|
end
|
10
10
|
|
11
|
+
should "search for artists by name" do
|
12
|
+
matches = MusicBrainz::Artist.search('Kasabian')
|
13
|
+
assert_operator(0, :<, matches.length)
|
14
|
+
assert_equal("Kasabian", matches.first[:name])
|
15
|
+
end
|
16
|
+
|
17
|
+
should "get correct artist by name" do
|
18
|
+
@artist = MusicBrainz::Artist.find_by_name('Kasabian')
|
19
|
+
assert_equal("69b39eab-6577-46a4-a9f5-817839092033", @artist.id)
|
20
|
+
end
|
21
|
+
|
11
22
|
setup do
|
12
23
|
@artist = MusicBrainz::Artist.find('69b39eab-6577-46a4-a9f5-817839092033')
|
13
24
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: musicbrainz
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-09-
|
12
|
+
date: 2011-09-14 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogiri
|
16
|
-
requirement: &
|
16
|
+
requirement: &2153490500 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2153490500
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: shoulda
|
27
|
-
requirement: &
|
27
|
+
requirement: &2153489260 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2153489260
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: bundler
|
38
|
-
requirement: &
|
38
|
+
requirement: &2153467600 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 1.0.0
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *2153467600
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: jeweler
|
49
|
-
requirement: &
|
49
|
+
requirement: &2153466800 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 1.6.4
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *2153466800
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: rcov
|
60
|
-
requirement: &
|
60
|
+
requirement: &2153465500 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *2153465500
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rdoc
|
71
|
-
requirement: &
|
71
|
+
requirement: &2153464900 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,7 +76,7 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *2153464900
|
80
80
|
description: MusicBrainz Web Service wrapper with ActiveRecord-style models
|
81
81
|
email: magnolia_fan@me.com
|
82
82
|
executables: []
|
@@ -116,7 +116,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
116
116
|
version: '0'
|
117
117
|
segments:
|
118
118
|
- 0
|
119
|
-
hash: -
|
119
|
+
hash: -2702220955620971085
|
120
120
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
121
121
|
none: false
|
122
122
|
requirements:
|