musicbrainz 0.1.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.3.0
@@ -0,0 +1,32 @@
1
+ module MusicBrainz
2
+ @@last_query_time = 0
3
+
4
+ def self.last_query_time
5
+ @@last_query_time
6
+ end
7
+
8
+ def self.last_query_time= time
9
+ @@last_query_time = time
10
+ end
11
+
12
+ def self.load url
13
+ sleep 1.1 - (Time.now.to_f - self.last_query_time) if Time.now.to_f - self.last_query_time < 1.1
14
+ response = nil
15
+ 5.times do
16
+ begin
17
+ response = open(url, "User-Agent" => "gem musicbrainz (https://github.com/magnolia-fan/musicbrainz) @ " + Socket.gethostname)
18
+ rescue => e
19
+ p "MusicBrainz: 503"
20
+ end
21
+ break unless response.nil?
22
+ end
23
+ self.last_query_time = Time.now.to_f
24
+ response
25
+ end
26
+
27
+ def self.discography mbid
28
+ artist = MusicBrainz::Artist.find(mbid)
29
+ artist.release_groups.each {|rg| rg.releases.each {|r| r.tracks } }
30
+ artist
31
+ end
32
+ end
@@ -0,0 +1,31 @@
1
+ module MusicBrainz
2
+ class Artist
3
+ attr_accessor :id, :type, :name, :country, :date_begin, :date_end
4
+ @release_groups
5
+
6
+ def release_groups
7
+ if @release_groups.nil? and not self.id.nil?
8
+ @release_groups = []
9
+ Nokogiri::XML(MusicBrainz.load('http://musicbrainz.org/ws/2/release-group/?artist=' + self.id)).css('release-group').each do |rg|
10
+ @release_groups << MusicBrainz::ReleaseGroup.parse_xml(rg)
11
+ end
12
+ end
13
+ @release_groups
14
+ end
15
+
16
+ def self.find mbid
17
+ @artist = self.parse_xml(Nokogiri::XML(MusicBrainz.load('http://musicbrainz.org/ws/2/artist/' + mbid)))
18
+ end
19
+
20
+ def self.parse_xml xml
21
+ @artist = MusicBrainz::Artist.new
22
+ @artist.id = xml.css('artist').attr('id').value
23
+ @artist.type = xml.css('artist').attr('type').value
24
+ @artist.name = xml.css('artist > name').text
25
+ @artist.country = xml.css('artist > country').text unless xml.css('artist > country').empty?
26
+ @artist.date_begin = xml.css('artist > life-span > begin').text unless xml.css('artist > life-span > begin').empty?
27
+ @artist.date_end = xml.css('artist > life-span > end').text unless xml.css('artist > life-span > end').empty?
28
+ @artist
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,41 @@
1
+ module MusicBrainz
2
+ class Release
3
+ attr_accessor :id, :title, :status, :date, :country
4
+ @tracks
5
+
6
+ def tracks
7
+ if @tracks.nil? and not self.id.nil?
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|
10
+ @tracks << MusicBrainz::Track.parse_xml(r)
11
+ end
12
+ end
13
+ @tracks
14
+ end
15
+
16
+ def self.find mbid
17
+ xml = Nokogiri::XML(MusicBrainz.load('http://musicbrainz.org/ws/2/release/' + mbid)).css('release').first
18
+ self.parse_xml(xml) unless xml.nil?
19
+ end
20
+
21
+ def self.parse_xml xml
22
+ @release = MusicBrainz::Release.new
23
+ @release.id = xml.attr('id')
24
+ @release.title = xml.css('title').text unless xml.css('title').empty?
25
+ @release.status = xml.css('status').text unless xml.css('status').empty?
26
+ date = nil
27
+ date = xml.css('date').text unless xml.css('date').empty?
28
+ unless date.nil? or date.empty?
29
+ if date.length == 4
30
+ date += '-01-01'
31
+ elsif date.length == 7
32
+ date += '-01'
33
+ end
34
+ date = Time.parse(date)
35
+ end
36
+ @release.date = date
37
+ @release.country = xml.css('country').text unless xml.css('country').empty?
38
+ @release
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,40 @@
1
+ module MusicBrainz
2
+ class ReleaseGroup
3
+ attr_accessor :id, :type, :title, :first_release_date
4
+ @releases
5
+
6
+ def releases
7
+ if @releases.nil? and not self.id.nil?
8
+ @releases = []
9
+ Nokogiri::XML(MusicBrainz.load('http://musicbrainz.org/ws/2/release/?release-group=' + self.id)).css('release').each do |r|
10
+ @releases << MusicBrainz::Release.parse_xml(r)
11
+ end
12
+ end
13
+ @releases
14
+ end
15
+
16
+ def self.find mbid
17
+ xml = Nokogiri::XML(MusicBrainz.load('http://musicbrainz.org/ws/2/release-group/' + mbid)).css('release-group').first
18
+ self.parse_xml(xml) unless xml.nil?
19
+ end
20
+
21
+ def self.parse_xml xml
22
+ @release_group = MusicBrainz::ReleaseGroup.new
23
+ @release_group.id = xml.attr('id')
24
+ @release_group.type = xml.attr('type')
25
+ @release_group.title = xml.css('title').text unless xml.css('title').empty?
26
+ date = nil
27
+ date = xml.css('first-release-date').text unless xml.css('first-release-date').empty?
28
+ unless date.nil? or date.empty?
29
+ if date.length == 4
30
+ date += '-01-01'
31
+ elsif date.length == 7
32
+ date += '-01'
33
+ end
34
+ date = Time.parse(date)
35
+ end
36
+ @release_group.first_release_date = date
37
+ @release_group
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,20 @@
1
+ module MusicBrainz
2
+ class Track
3
+ attr_accessor :position, :recording_id, :title, :length
4
+
5
+ def self.find mbid
6
+ xml = Nokogiri::XML(MusicBrainz.load('http://musicbrainz.org/ws/2/recording/' + mbid))
7
+ self.parse_xml(xml) unless xml.nil?
8
+ end
9
+
10
+ def self.parse_xml xml
11
+ @track = MusicBrainz::Track.new
12
+ @track.position = xml.css('position').text.to_i unless xml.css('position').empty?
13
+ @track.recording_id = xml.css('recording').attr('id').value unless xml.css('recording').empty?
14
+ @track.title = xml.css('recording > title').text unless xml.css('recording > title').empty?
15
+ @track.length = xml.css('length').first.text.to_i unless xml.css('length').empty?
16
+ @track.length = xml.css('recording > length').first.text.to_i unless xml.css('recording > length').empty?
17
+ @track
18
+ end
19
+ end
20
+ end
data/lib/musicbrainz.rb CHANGED
@@ -1,7 +1,9 @@
1
1
  require "open-uri"
2
+ require "socket"
2
3
  require "nokogiri"
3
4
 
4
- require "models/music_brainz_artist"
5
- require "models/music_brainz_release_group"
6
- require "models/music_brainz_release"
7
- require "models/music_brainz_track"
5
+ require "models/music_brainz"
6
+ require "models/music_brainz/artist"
7
+ require "models/music_brainz/release_group"
8
+ require "models/music_brainz/release"
9
+ require "models/music_brainz/track"
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.1.0"
8
+ s.version = "0.3.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-07-18}
12
+ s.date = %q{2011-09-13}
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 = [
@@ -24,10 +24,11 @@ Gem::Specification.new do |s|
24
24
  "README.rdoc",
25
25
  "Rakefile",
26
26
  "VERSION",
27
- "lib/models/music_brainz_artist.rb",
28
- "lib/models/music_brainz_release.rb",
29
- "lib/models/music_brainz_release_group.rb",
30
- "lib/models/music_brainz_track.rb",
27
+ "lib/models/music_brainz.rb",
28
+ "lib/models/music_brainz/artist.rb",
29
+ "lib/models/music_brainz/release.rb",
30
+ "lib/models/music_brainz/release_group.rb",
31
+ "lib/models/music_brainz/track.rb",
31
32
  "lib/musicbrainz.rb",
32
33
  "musicbrainz.gemspec",
33
34
  "test/helper.rb",
@@ -36,7 +37,7 @@ Gem::Specification.new do |s|
36
37
  s.homepage = %q{http://github.com/magnolia-fan/musicbrainz}
37
38
  s.licenses = [%q{MIT}]
38
39
  s.require_paths = [%q{lib}]
39
- s.rubygems_version = %q{1.8.5}
40
+ s.rubygems_version = %q{1.8.8}
40
41
  s.summary = %q{MusicBrainz Web Service wrapper}
41
42
 
42
43
  if s.respond_to? :specification_version then
@@ -4,16 +4,16 @@ class TestMusicbrainz < Test::Unit::TestCase
4
4
  context "artist" do
5
5
  should "load artist xml" do
6
6
  assert_nothing_raised(Exception) do
7
- MusicBrainzArtist.find('69b39eab-6577-46a4-a9f5-817839092033')
7
+ MusicBrainz::Artist.find('69b39eab-6577-46a4-a9f5-817839092033')
8
8
  end
9
9
  end
10
10
 
11
11
  setup do
12
- @artist = MusicBrainzArtist.find('69b39eab-6577-46a4-a9f5-817839092033')
12
+ @artist = MusicBrainz::Artist.find('69b39eab-6577-46a4-a9f5-817839092033')
13
13
  end
14
14
 
15
15
  should "return valid instance" do
16
- assert_instance_of(MusicBrainzArtist, @artist)
16
+ assert_instance_of(MusicBrainz::Artist, @artist)
17
17
  end
18
18
 
19
19
  should "contain correct data" do
@@ -37,16 +37,16 @@ class TestMusicbrainz < Test::Unit::TestCase
37
37
  context "release group" do
38
38
  should "load release group xml" do
39
39
  assert_nothing_raised(Exception) do
40
- MusicBrainzReleaseGroup.find('6f33e0f0-cde2-38f9-9aee-2c60af8d1a61')
40
+ MusicBrainz::ReleaseGroup.find('6f33e0f0-cde2-38f9-9aee-2c60af8d1a61')
41
41
  end
42
42
  end
43
43
 
44
44
  setup do
45
- @release_group = MusicBrainzReleaseGroup.find('6f33e0f0-cde2-38f9-9aee-2c60af8d1a61')
45
+ @release_group = MusicBrainz::ReleaseGroup.find('6f33e0f0-cde2-38f9-9aee-2c60af8d1a61')
46
46
  end
47
47
 
48
48
  should "return valid instance" do
49
- assert_instance_of(MusicBrainzReleaseGroup, @release_group)
49
+ assert_instance_of(MusicBrainz::ReleaseGroup, @release_group)
50
50
  end
51
51
 
52
52
  should "contain correct data" do
@@ -70,16 +70,16 @@ class TestMusicbrainz < Test::Unit::TestCase
70
70
  context "release" do
71
71
  should "load release xml" do
72
72
  assert_nothing_raised(Exception) do
73
- MusicBrainzRelease.find('2225dd4c-ae9a-403b-8ea0-9e05014c778f')
73
+ MusicBrainz::Release.find('2225dd4c-ae9a-403b-8ea0-9e05014c778f')
74
74
  end
75
75
  end
76
76
 
77
77
  setup do
78
- @release = MusicBrainzRelease.find('2225dd4c-ae9a-403b-8ea0-9e05014c778f')
78
+ @release = MusicBrainz::Release.find('2225dd4c-ae9a-403b-8ea0-9e05014c778f')
79
79
  end
80
80
 
81
81
  should "return valid instance" do
82
- assert_instance_of(MusicBrainzRelease, @release)
82
+ assert_instance_of(MusicBrainz::Release, @release)
83
83
  end
84
84
 
85
85
  should "contain correct data" do
@@ -103,16 +103,16 @@ class TestMusicbrainz < Test::Unit::TestCase
103
103
  context "track" do
104
104
  should "load track xml" do
105
105
  assert_nothing_raised(Exception) do
106
- MusicBrainzTrack.find('b3015bab-1540-4d4e-9f30-14872a1525f7')
106
+ MusicBrainz::Track.find('b3015bab-1540-4d4e-9f30-14872a1525f7')
107
107
  end
108
108
  end
109
109
 
110
110
  setup do
111
- @track = MusicBrainzTrack.find('b3015bab-1540-4d4e-9f30-14872a1525f7')
111
+ @track = MusicBrainz::Track.find('b3015bab-1540-4d4e-9f30-14872a1525f7')
112
112
  end
113
113
 
114
114
  should "return valid instance" do
115
- assert_instance_of(MusicBrainzTrack, @track)
115
+ assert_instance_of(MusicBrainz::Track, @track)
116
116
  end
117
117
 
118
118
  should "contain correct data" do
metadata CHANGED
@@ -1,93 +1,90 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: musicbrainz
3
- version: !ruby/object:Gem::Version
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.0
4
5
  prerelease:
5
- version: 0.1.0
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - Gregory Eremin
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
-
13
- date: 2011-07-18 00:00:00 Z
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
12
+ date: 2011-09-13 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
16
15
  name: nokogiri
17
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &2152823080 !ruby/object:Gem::Requirement
18
17
  none: false
19
- requirements:
20
- - - ">="
21
- - !ruby/object:Gem::Version
22
- version: "0"
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
23
22
  type: :runtime
24
23
  prerelease: false
25
- version_requirements: *id001
26
- - !ruby/object:Gem::Dependency
24
+ version_requirements: *2152823080
25
+ - !ruby/object:Gem::Dependency
27
26
  name: shoulda
28
- requirement: &id002 !ruby/object:Gem::Requirement
27
+ requirement: &2152822000 !ruby/object:Gem::Requirement
29
28
  none: false
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: "0"
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
34
33
  type: :development
35
34
  prerelease: false
36
- version_requirements: *id002
37
- - !ruby/object:Gem::Dependency
35
+ version_requirements: *2152822000
36
+ - !ruby/object:Gem::Dependency
38
37
  name: bundler
39
- requirement: &id003 !ruby/object:Gem::Requirement
38
+ requirement: &2152821300 !ruby/object:Gem::Requirement
40
39
  none: false
41
- requirements:
40
+ requirements:
42
41
  - - ~>
43
- - !ruby/object:Gem::Version
42
+ - !ruby/object:Gem::Version
44
43
  version: 1.0.0
45
44
  type: :development
46
45
  prerelease: false
47
- version_requirements: *id003
48
- - !ruby/object:Gem::Dependency
46
+ version_requirements: *2152821300
47
+ - !ruby/object:Gem::Dependency
49
48
  name: jeweler
50
- requirement: &id004 !ruby/object:Gem::Requirement
49
+ requirement: &2152820460 !ruby/object:Gem::Requirement
51
50
  none: false
52
- requirements:
51
+ requirements:
53
52
  - - ~>
54
- - !ruby/object:Gem::Version
53
+ - !ruby/object:Gem::Version
55
54
  version: 1.6.4
56
55
  type: :development
57
56
  prerelease: false
58
- version_requirements: *id004
59
- - !ruby/object:Gem::Dependency
57
+ version_requirements: *2152820460
58
+ - !ruby/object:Gem::Dependency
60
59
  name: rcov
61
- requirement: &id005 !ruby/object:Gem::Requirement
60
+ requirement: &2152819480 !ruby/object:Gem::Requirement
62
61
  none: false
63
- requirements:
64
- - - ">="
65
- - !ruby/object:Gem::Version
66
- version: "0"
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
67
66
  type: :development
68
67
  prerelease: false
69
- version_requirements: *id005
70
- - !ruby/object:Gem::Dependency
68
+ version_requirements: *2152819480
69
+ - !ruby/object:Gem::Dependency
71
70
  name: rdoc
72
- requirement: &id006 !ruby/object:Gem::Requirement
71
+ requirement: &2152818620 !ruby/object:Gem::Requirement
73
72
  none: false
74
- requirements:
75
- - - ">="
76
- - !ruby/object:Gem::Version
77
- version: "0"
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
78
77
  type: :development
79
78
  prerelease: false
80
- version_requirements: *id006
79
+ version_requirements: *2152818620
81
80
  description: MusicBrainz Web Service wrapper with ActiveRecord-style models
82
81
  email: magnolia_fan@me.com
83
82
  executables: []
84
-
85
83
  extensions: []
86
-
87
- extra_rdoc_files:
84
+ extra_rdoc_files:
88
85
  - LICENSE.txt
89
86
  - README.rdoc
90
- files:
87
+ files:
91
88
  - .document
92
89
  - Gemfile
93
90
  - Gemfile.lock
@@ -95,43 +92,41 @@ files:
95
92
  - README.rdoc
96
93
  - Rakefile
97
94
  - VERSION
98
- - lib/models/music_brainz_artist.rb
99
- - lib/models/music_brainz_release.rb
100
- - lib/models/music_brainz_release_group.rb
101
- - lib/models/music_brainz_track.rb
95
+ - lib/models/music_brainz.rb
96
+ - lib/models/music_brainz/artist.rb
97
+ - lib/models/music_brainz/release.rb
98
+ - lib/models/music_brainz/release_group.rb
99
+ - lib/models/music_brainz/track.rb
102
100
  - lib/musicbrainz.rb
103
101
  - musicbrainz.gemspec
104
102
  - test/helper.rb
105
103
  - test/test_musicbrainz.rb
106
104
  homepage: http://github.com/magnolia-fan/musicbrainz
107
- licenses:
105
+ licenses:
108
106
  - MIT
109
107
  post_install_message:
110
108
  rdoc_options: []
111
-
112
- require_paths:
109
+ require_paths:
113
110
  - lib
114
- required_ruby_version: !ruby/object:Gem::Requirement
111
+ required_ruby_version: !ruby/object:Gem::Requirement
115
112
  none: false
116
- requirements:
117
- - - ">="
118
- - !ruby/object:Gem::Version
119
- hash: -1516180288239245232
120
- segments:
113
+ requirements:
114
+ - - ! '>='
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ segments:
121
118
  - 0
122
- version: "0"
123
- required_rubygems_version: !ruby/object:Gem::Requirement
119
+ hash: -3179623927439808099
120
+ required_rubygems_version: !ruby/object:Gem::Requirement
124
121
  none: false
125
- requirements:
126
- - - ">="
127
- - !ruby/object:Gem::Version
128
- version: "0"
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
129
126
  requirements: []
130
-
131
127
  rubyforge_project:
132
- rubygems_version: 1.8.5
128
+ rubygems_version: 1.8.8
133
129
  signing_key:
134
130
  specification_version: 3
135
131
  summary: MusicBrainz Web Service wrapper
136
132
  test_files: []
137
-
@@ -1,30 +0,0 @@
1
- class MusicBrainzArtist
2
- attr_accessor :id, :type, :name, :country, :date_begin, :date_end
3
- @release_groups
4
-
5
- def release_groups
6
- if @release_groups.nil? and not self.id.nil?
7
- @release_groups = []
8
- Nokogiri::XML(open('http://musicbrainz.org/ws/2/release-group/?artist=' + self.id)).css('release-group').each do |rg|
9
- @release_groups << MusicBrainzReleaseGroup.parse_xml(rg)
10
- end
11
- end
12
- @release_groups
13
- end
14
-
15
- def self.find mbid
16
- @artist = self.parse_xml(Nokogiri::XML(open('http://musicbrainz.org/ws/2/artist/' + mbid)))
17
- end
18
-
19
- def self.parse_xml xml
20
- @artist = MusicBrainzArtist.new
21
- @artist.id = xml.css('artist').attr('id').value
22
- @artist.type = xml.css('artist').attr('type').value
23
- @artist.name = xml.css('artist > name').text
24
- @artist.country = xml.css('artist > country').text || nil
25
- @artist.date_begin = xml.css('artist > life-span > begin').text || nil
26
- @artist.date_end = xml.css('artist > life-span > end').text || nil
27
- @artist
28
- end
29
-
30
- end
@@ -1,38 +0,0 @@
1
- class MusicBrainzRelease
2
- attr_accessor :id, :title, :status, :date, :country
3
- @tracks
4
-
5
- def tracks
6
- if @tracks.nil? and not self.id.nil?
7
- @tracks = []
8
- Nokogiri::XML(open('http://musicbrainz.org/ws/2/release/' + self.id + '?inc=recordings')).css('medium-list > medium > track-list > track').each do |r|
9
- @tracks << MusicBrainzTrack.parse_xml(r)
10
- end
11
- end
12
- @tracks
13
- end
14
-
15
- def self.find mbid
16
- xml = Nokogiri::XML(open('http://musicbrainz.org/ws/2/release/' + mbid)).css('release').first
17
- self.parse_xml(xml) unless xml.nil?
18
- end
19
-
20
- def self.parse_xml xml
21
- @release = MusicBrainzRelease.new
22
- @release.id = xml.attr('id')
23
- @release.title = xml.css('title').text
24
- @release.status = xml.css('status').text
25
- date = xml.css('date').text
26
- unless date.nil? or date.empty?
27
- if date.length == 4
28
- date += '-01-01'
29
- elsif date.length == 7
30
- date += '-01'
31
- end
32
- date = Time.parse(date)
33
- end
34
- @release.date = date
35
- @release.country = xml.css('country').text
36
- @release
37
- end
38
- end
@@ -1,37 +0,0 @@
1
- class MusicBrainzReleaseGroup
2
- attr_accessor :id, :type, :title, :first_release_date
3
- @releases
4
-
5
- def releases
6
- if @releases.nil? and not self.id.nil?
7
- @releases = []
8
- Nokogiri::XML(open('http://musicbrainz.org/ws/2/release/?release-group=' + self.id)).css('release').each do |r|
9
- @releases << MusicBrainzRelease.parse_xml(r)
10
- end
11
- end
12
- @releases
13
- end
14
-
15
- def self.find mbid
16
- xml = Nokogiri::XML(open('http://musicbrainz.org/ws/2/release-group/' + mbid)).css('release-group').first
17
- self.parse_xml(xml) unless xml.nil?
18
- end
19
-
20
- def self.parse_xml xml
21
- @release_group = MusicBrainzReleaseGroup.new
22
- @release_group.id = xml.attr('id')
23
- @release_group.type = xml.attr('type')
24
- @release_group.title = xml.css('title').text
25
- date = xml.css('first-release-date').text
26
- unless date.nil? or date.empty?
27
- if date.length == 4
28
- date += '-01-01'
29
- elsif date.length == 7
30
- date += '-01'
31
- end
32
- date = Time.parse(date)
33
- end
34
- @release_group.first_release_date = date
35
- @release_group
36
- end
37
- end
@@ -1,17 +0,0 @@
1
- class MusicBrainzTrack
2
- attr_accessor :position, :recording_id, :title, :length
3
-
4
- def self.find mbid
5
- xml = Nokogiri::XML(open('http://musicbrainz.org/ws/2/recording/' + mbid))
6
- self.parse_xml(xml) unless xml.nil?
7
- end
8
-
9
- def self.parse_xml xml
10
- @track = MusicBrainzTrack.new
11
- @track.position = xml.css('position').text.to_i || nil
12
- @track.recording_id = xml.css('recording').attr('id').value
13
- @track.title = xml.css('recording > title').text
14
- @track.length = xml.css('length').first.text.to_i || 0
15
- @track
16
- end
17
- end