musicbrainz 0.7.7 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.github/workflows/test.yml +26 -0
- data/.gitignore +2 -2
- data/Gemfile +11 -0
- data/Gemfile.lock +54 -0
- data/LICENSE +2 -2
- data/README.md +21 -10
- data/lib/musicbrainz/bindings/artist.rb +0 -1
- data/lib/musicbrainz/bindings/artist_search.rb +0 -1
- data/lib/musicbrainz/bindings/discid_releases.rb +13 -0
- data/lib/musicbrainz/bindings/recording.rb +19 -0
- data/lib/musicbrainz/bindings/{track_search.rb → recording_search.rb} +1 -2
- data/lib/musicbrainz/bindings/relations.rb +1 -2
- data/lib/musicbrainz/bindings/release_group_search.rb +0 -1
- data/lib/musicbrainz/client_modules/caching_proxy.rb +27 -13
- data/lib/musicbrainz/models/base_model.rb +12 -2
- data/lib/musicbrainz/models/recording.rb +20 -0
- data/lib/musicbrainz/models/release.rb +8 -1
- data/lib/musicbrainz/models/track.rb +0 -4
- data/lib/musicbrainz/version.rb +1 -1
- data/lib/musicbrainz.rb +4 -1
- data/musicbrainz.gemspec +3 -6
- data/spec/bindings/recording_search_spec.rb +48 -0
- data/spec/bindings/relations_spec.rb +45 -26
- data/spec/bindings/release_group_search_spec.rb +24 -6
- data/spec/bindings/release_spec.rb +94 -18
- data/spec/client_modules/cache_spec.rb +18 -17
- data/spec/deprecated/cache_config_spec.rb +4 -6
- data/spec/deprecated/proxy_config_spec.rb +4 -6
- data/spec/fixtures/artist/find_69b39eab-6577-46a4-a9f5-817839092033.xml +168 -0
- data/spec/fixtures/artist/release_groups_69b39eab-6577-46a4-a9f5-817839092033.xml +412 -0
- data/spec/fixtures/artist/search_kasabian.xml +104 -0
- data/spec/fixtures/recording/find_b3015bab-1540-4d4e-9f30-14872a1525f7.xml +8 -0
- data/spec/fixtures/recording/search_bound_for_the_floor_local_h.xml +647 -0
- data/spec/fixtures/release/find_2225dd4c-ae9a-403b-8ea0-9e05014c778f.xml +44 -0
- data/spec/fixtures/release/find_2225dd4c-ae9a-403b-8ea0-9e05014c778f_tracks.xml +151 -0
- data/spec/fixtures/release/find_b94cb547-cf7a-4357-894c-53c3bf33b093.xml +52 -0
- data/spec/fixtures/release/find_by_discid_pmzhT6ZlFiwSRCdVwV0eqire5_Y-.xml +141 -0
- data/spec/fixtures/release/list_6f33e0f0-cde2-38f9-9aee-2c60af8d1a61.xml +344 -0
- data/spec/fixtures/release_group/search_kasabian_empire_album.xml +117 -0
- data/spec/models/artist_spec.rb +77 -46
- data/spec/models/base_model_spec.rb +50 -22
- data/spec/models/recording_spec.rb +42 -0
- data/spec/models/release_group_spec.rb +61 -55
- data/spec/models/release_spec.rb +63 -28
- data/spec/models/track_spec.rb +19 -15
- data/spec/spec_helper.rb +7 -7
- data/spec/support/mock_helpers.rb +13 -0
- metadata +55 -93
- data/.rspec +0 -1
- data/.travis.yml +0 -4
- data/spec/bindings/track_search_spec.rb +0 -17
- data/spec/fixtures/artist/search.xml +0 -67
- data/spec/fixtures/kasabian.xml +0 -1
- data/spec/fixtures/release/list.xml +0 -344
- /data/spec/fixtures/release_group/{entity.xml → find_6f33e0f0-cde2-38f9-9aee-2c60af8d1a61.xml} +0 -0
- /data/spec/fixtures/release_group/{search.xml → search_kasabian_empire.xml} +0 -0
@@ -1,5 +1,3 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
|
3
1
|
require "spec_helper"
|
4
2
|
|
5
3
|
describe MusicBrainz::Bindings::Release do
|
@@ -7,37 +5,115 @@ describe MusicBrainz::Bindings::Release do
|
|
7
5
|
describe 'attributes' do
|
8
6
|
describe 'format' do
|
9
7
|
context 'single cd' do
|
8
|
+
let(:response) {
|
9
|
+
<<-XML
|
10
|
+
<release>
|
11
|
+
<medium-list count="1">
|
12
|
+
<medium>
|
13
|
+
<format>CD</format>
|
14
|
+
</medium>
|
15
|
+
</medium-list>
|
16
|
+
</release>
|
17
|
+
XML
|
18
|
+
}
|
19
|
+
let(:xml) {
|
20
|
+
Nokogiri::XML.parse(response)
|
21
|
+
}
|
22
|
+
let(:release) {
|
23
|
+
described_class.parse(xml)
|
24
|
+
}
|
25
|
+
|
10
26
|
it 'returns CD' do
|
11
|
-
|
12
|
-
xml = Nokogiri::XML.parse(response)
|
13
|
-
described_class.parse(xml)[:format].should == 'CD'
|
27
|
+
expect(release[:format]).to eq 'CD'
|
14
28
|
end
|
15
29
|
end
|
16
|
-
|
30
|
+
|
17
31
|
context 'multiple cds' do
|
32
|
+
let(:response) {
|
33
|
+
<<-XML
|
34
|
+
<release>
|
35
|
+
<medium-list count="2">
|
36
|
+
<medium>
|
37
|
+
<format>CD</format>
|
38
|
+
<track-list count="11"/>
|
39
|
+
</medium>
|
40
|
+
<medium>
|
41
|
+
<title>bonus disc</title>
|
42
|
+
<format>CD</format>
|
43
|
+
</medium>
|
44
|
+
</medium-list>
|
45
|
+
</release>
|
46
|
+
XML
|
47
|
+
}
|
48
|
+
let(:xml) {
|
49
|
+
Nokogiri::XML.parse(response)
|
50
|
+
}
|
51
|
+
let(:release) {
|
52
|
+
described_class.parse(xml)
|
53
|
+
}
|
54
|
+
|
18
55
|
it 'returns 2xCD' do
|
19
|
-
|
20
|
-
xml = Nokogiri::XML.parse(response)
|
21
|
-
described_class.parse(xml)[:format].should == '2xCD'
|
56
|
+
expect(release[:format]).to eq '2xCD'
|
22
57
|
end
|
23
58
|
end
|
24
|
-
|
59
|
+
|
25
60
|
context 'different formats' do
|
61
|
+
let(:response) {
|
62
|
+
<<-XML
|
63
|
+
<release>
|
64
|
+
<medium-list count="2">
|
65
|
+
<medium>
|
66
|
+
<format>DVD</format>
|
67
|
+
</medium>
|
68
|
+
<medium>
|
69
|
+
<format>CD</format>
|
70
|
+
</medium>
|
71
|
+
</medium-list>
|
72
|
+
</release>
|
73
|
+
XML
|
74
|
+
}
|
75
|
+
let(:xml) {
|
76
|
+
Nokogiri::XML.parse(response)
|
77
|
+
}
|
78
|
+
let(:release) {
|
79
|
+
described_class.parse(xml)
|
80
|
+
}
|
81
|
+
|
26
82
|
it 'returns DVD + CD' do
|
27
|
-
|
28
|
-
xml = Nokogiri::XML.parse(response)
|
29
|
-
described_class.parse(xml)[:format].should == 'DVD + CD'
|
83
|
+
expect(release[:format]).to eq 'DVD + CD'
|
30
84
|
end
|
31
85
|
end
|
32
|
-
|
86
|
+
|
33
87
|
context 'different formats plus multiple mediums with same format' do
|
88
|
+
let(:response) {
|
89
|
+
<<-XML
|
90
|
+
<release>
|
91
|
+
<medium-list count="2">
|
92
|
+
<medium>
|
93
|
+
<format>CD</format>
|
94
|
+
</medium>
|
95
|
+
<medium>
|
96
|
+
<format>CD</format>
|
97
|
+
</medium>
|
98
|
+
<medium>
|
99
|
+
<format>DVD</format>
|
100
|
+
</medium>
|
101
|
+
</medium-list>
|
102
|
+
</release>
|
103
|
+
XML
|
104
|
+
}
|
105
|
+
let(:xml) {
|
106
|
+
Nokogiri::XML.parse(response)
|
107
|
+
}
|
108
|
+
let(:release) {
|
109
|
+
described_class.parse(xml)
|
110
|
+
}
|
111
|
+
|
34
112
|
it 'returns 2xCD + DVD' do
|
35
|
-
|
36
|
-
xml = Nokogiri::XML.parse(response)
|
37
|
-
described_class.parse(xml)[:format].should == '2xCD + DVD'
|
113
|
+
expect(release[:format]).to eq '2xCD + DVD'
|
38
114
|
end
|
39
115
|
end
|
40
116
|
end
|
41
117
|
end
|
42
118
|
end
|
43
|
-
end
|
119
|
+
end
|
@@ -1,22 +1,22 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
1
|
require "ostruct"
|
4
2
|
require "spec_helper"
|
5
3
|
|
6
4
|
describe MusicBrainz::ClientModules::CachingProxy do
|
7
|
-
let(:old_cache_path){ File.join(File.dirname(__FILE__), '..', '..', 'tmp', 'spec_cache') }
|
8
|
-
let(:tmp_cache_path){ File.join(File.dirname(__FILE__), '..', '..', 'tmp', 'cache_module_spec_cache') }
|
9
5
|
let(:test_mbid){ "69b39eab-6577-46a4-a9f5-817839092033" }
|
6
|
+
let(:tmp_cache_path){ File.join(File.dirname(__FILE__), '..', '..', 'tmp', 'cache_module_spec_cache') }
|
10
7
|
let(:test_cache_file){ "#{tmp_cache_path}/03/48/ec/6c2bee685d9a96f95ed46378f624714e7a4650b0d44c1a8eee5bac2480.xml" }
|
11
|
-
let(:
|
12
|
-
let(:test_response){ File.open(test_response_file).read }
|
8
|
+
let(:test_response){ read_fixture('artist/find_69b39eab-6577-46a4-a9f5-817839092033.xml') }
|
13
9
|
|
14
10
|
before(:all) do
|
15
11
|
MusicBrainz.config.cache_path = File.join(File.dirname(__FILE__), '..', '..', 'tmp', 'cache_module_spec_cache')
|
16
12
|
end
|
17
13
|
|
14
|
+
before do
|
15
|
+
File.delete(test_cache_file) if File.exist?(test_cache_file)
|
16
|
+
end
|
17
|
+
|
18
18
|
after(:all) do
|
19
|
-
MusicBrainz.config.cache_path =
|
19
|
+
MusicBrainz.config.cache_path = File.join(File.dirname(__FILE__), '..', '..', 'tmp', 'spec_cache')
|
20
20
|
MusicBrainz.config.perform_caching = true
|
21
21
|
MusicBrainz.config.query_interval = 1.5
|
22
22
|
end
|
@@ -24,16 +24,17 @@ describe MusicBrainz::ClientModules::CachingProxy do
|
|
24
24
|
context "with cache enabled" do
|
25
25
|
it "calls http only once when requesting the resource twice" do
|
26
26
|
MusicBrainz.config.perform_caching = true
|
27
|
-
File.exist
|
27
|
+
expect(File).to_not exist(test_cache_file)
|
28
28
|
|
29
29
|
# Stubbing
|
30
|
-
MusicBrainz.client
|
31
|
-
|
30
|
+
allow(MusicBrainz.client).to receive(:get_live_contents)
|
31
|
+
.and_return({status: 200, body: test_response})
|
32
|
+
expect(MusicBrainz.client).to receive(:get_live_contents).once
|
32
33
|
|
33
34
|
2.times do
|
34
35
|
artist = MusicBrainz::Artist.find(test_mbid)
|
35
|
-
artist.
|
36
|
-
File.exist
|
36
|
+
expect(artist).to be_kind_of(MusicBrainz::Artist)
|
37
|
+
expect(File).to exist(test_cache_file)
|
37
38
|
end
|
38
39
|
|
39
40
|
MusicBrainz.client.clear_cache
|
@@ -43,19 +44,19 @@ describe MusicBrainz::ClientModules::CachingProxy do
|
|
43
44
|
context "with cache disabled" do
|
44
45
|
it "calls http twice when requesting the resource twice" do
|
45
46
|
MusicBrainz.config.perform_caching = false
|
46
|
-
File.exist
|
47
|
+
expect(File).to_not exist(test_cache_file)
|
47
48
|
|
48
49
|
# Hacking for test performance purposes
|
49
50
|
MusicBrainz.config.query_interval = 0.0
|
50
51
|
|
51
52
|
# Stubbing
|
52
|
-
MusicBrainz.client.http.
|
53
|
-
MusicBrainz.client.http.
|
53
|
+
allow(MusicBrainz.client.http).to receive(:get).and_return(OpenStruct.new(status: 200, body: test_response))
|
54
|
+
expect(MusicBrainz.client.http).to receive(:get).twice
|
54
55
|
|
55
56
|
2.times do
|
56
57
|
artist = MusicBrainz::Artist.find(test_mbid)
|
57
|
-
artist.
|
58
|
-
File.exist
|
58
|
+
expect(artist).to be_kind_of(MusicBrainz::Artist)
|
59
|
+
expect(File).to_not exist(test_cache_file)
|
59
60
|
end
|
60
61
|
end
|
61
62
|
end
|
@@ -1,5 +1,3 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
|
3
1
|
require "spec_helper"
|
4
2
|
|
5
3
|
describe MusicBrainz::Deprecated::CacheConfig do
|
@@ -18,15 +16,15 @@ describe MusicBrainz::Deprecated::CacheConfig do
|
|
18
16
|
it "allows deprecated use of cache_path" do
|
19
17
|
MusicBrainz.config.cache_path = "test1"
|
20
18
|
|
21
|
-
MusicBrainz::Tools::Cache.cache_path.
|
22
|
-
MusicBrainz.cache_path.
|
19
|
+
expect(MusicBrainz::Tools::Cache.cache_path).to eq "test1"
|
20
|
+
expect(MusicBrainz.cache_path).to eq "test1"
|
23
21
|
end
|
24
22
|
|
25
23
|
it "allows deprecated use of cache_path=" do
|
26
24
|
MusicBrainz::Tools::Cache.cache_path = "test2"
|
27
|
-
MusicBrainz.config.cache_path.
|
25
|
+
expect(MusicBrainz.config.cache_path).to eq "test2"
|
28
26
|
|
29
27
|
MusicBrainz.cache_path = "test3"
|
30
|
-
MusicBrainz.config.cache_path.
|
28
|
+
expect(MusicBrainz.config.cache_path).to eq "test3"
|
31
29
|
end
|
32
30
|
end
|
@@ -1,5 +1,3 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
|
3
1
|
require "spec_helper"
|
4
2
|
|
5
3
|
describe MusicBrainz::Deprecated::ProxyConfig do
|
@@ -18,15 +16,15 @@ describe MusicBrainz::Deprecated::ProxyConfig do
|
|
18
16
|
it "allows deprecated use of query_interval" do
|
19
17
|
MusicBrainz.config.query_interval = 2
|
20
18
|
|
21
|
-
MusicBrainz::Tools::Proxy.query_interval.
|
22
|
-
MusicBrainz.query_interval.
|
19
|
+
expect(MusicBrainz::Tools::Proxy.query_interval).to eq 2
|
20
|
+
expect(MusicBrainz.query_interval).to eq 2
|
23
21
|
end
|
24
22
|
|
25
23
|
it "allows deprecated use of query_interval=" do
|
26
24
|
MusicBrainz::Tools::Proxy.query_interval = 3
|
27
|
-
MusicBrainz.config.query_interval.
|
25
|
+
expect(MusicBrainz.config.query_interval).to eq 3
|
28
26
|
|
29
27
|
MusicBrainz.query_interval = 4
|
30
|
-
MusicBrainz.config.query_interval.
|
28
|
+
expect(MusicBrainz.config.query_interval).to eq 4
|
31
29
|
end
|
32
30
|
end
|
@@ -0,0 +1,168 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<metadata xmlns="http://musicbrainz.org/ns/mmd-2.0#">
|
3
|
+
<artist id="69b39eab-6577-46a4-a9f5-817839092033" type="Group" type-id="e431f5f6-b5d2-343d-8b36-72607fffb74b">
|
4
|
+
<name>Kasabian</name>
|
5
|
+
<sort-name>Kasabian</sort-name>
|
6
|
+
<isni-list>
|
7
|
+
<isni>0000000106652390</isni>
|
8
|
+
</isni-list>
|
9
|
+
<country>GB</country>
|
10
|
+
<area id="8a754a16-0027-3a29-b6d7-2b40ea0481ed">
|
11
|
+
<name>United Kingdom</name>
|
12
|
+
<sort-name>United Kingdom</sort-name>
|
13
|
+
<iso-3166-1-code-list>
|
14
|
+
<iso-3166-1-code>GB</iso-3166-1-code>
|
15
|
+
</iso-3166-1-code-list>
|
16
|
+
</area>
|
17
|
+
<begin-area id="806b9b3b-5daf-4eaa-807d-7a2a29cde0da">
|
18
|
+
<name>Leicester</name>
|
19
|
+
<sort-name>Leicester</sort-name>
|
20
|
+
<iso-3166-2-code-list>
|
21
|
+
<iso-3166-2-code>GB-LCE</iso-3166-2-code>
|
22
|
+
</iso-3166-2-code-list>
|
23
|
+
</begin-area>
|
24
|
+
<life-span>
|
25
|
+
<begin>1997</begin>
|
26
|
+
</life-span>
|
27
|
+
<relation-list target-type="url">
|
28
|
+
<relation type="allmusic" type-id="6b3e3c85-0002-4f34-aca6-80ace0d7e846">
|
29
|
+
<target id="79e99f63-f76d-4859-b10f-88ee7737f3c5">https://www.allmusic.com/artist/mn0000361541</target>
|
30
|
+
<direction>forward</direction>
|
31
|
+
</relation>
|
32
|
+
<relation type="BBC Music page" type-id="d028a975-000c-4525-9333-d3c8425e4b54">
|
33
|
+
<target id="e2110cb1-46db-42e3-abda-313e76f1237d">https://www.bbc.co.uk/music/artists/69b39eab-6577-46a4-a9f5-817839092033</target>
|
34
|
+
<direction>forward</direction>
|
35
|
+
<end>2020-11-19</end>
|
36
|
+
<ended>true</ended>
|
37
|
+
</relation>
|
38
|
+
<relation type="discogs" type-id="04a5b104-a4c2-4bac-99a1-7b837c37d9e4">
|
39
|
+
<target id="d1676007-8b11-431a-b96c-8f56d696485b">https://www.discogs.com/artist/235133</target>
|
40
|
+
<direction>forward</direction>
|
41
|
+
</relation>
|
42
|
+
<relation type="free streaming" type-id="769085a1-c2f7-4c24-a532-2375a77693bd">
|
43
|
+
<target id="0c5836a7-6747-46e7-917b-b181ee4b2468">https://open.spotify.com/artist/11wRdbnoYqRddKBrpHt4Ue</target>
|
44
|
+
<direction>forward</direction>
|
45
|
+
</relation>
|
46
|
+
<relation type="free streaming" type-id="769085a1-c2f7-4c24-a532-2375a77693bd">
|
47
|
+
<target id="dec26047-a327-4359-8db2-b2350175d100">https://www.deezer.com/artist/1247</target>
|
48
|
+
<direction>forward</direction>
|
49
|
+
</relation>
|
50
|
+
<relation type="image" type-id="221132e9-e30e-43f2-a741-15afc4c5fa7c">
|
51
|
+
<target id="4090fabc-d9b2-419b-b9be-db9601035359">https://commons.wikimedia.org/wiki/File:Kasabian_at_Brixton_Academy_2009.jpg</target>
|
52
|
+
<direction>forward</direction>
|
53
|
+
</relation>
|
54
|
+
<relation type="IMDb" type-id="94c8b0cc-4477-4106-932c-da60e63de61c">
|
55
|
+
<target id="7e8236d6-4a80-423d-8caf-5b012542befd">https://www.imdb.com/name/nm1868442/</target>
|
56
|
+
<direction>forward</direction>
|
57
|
+
</relation>
|
58
|
+
<relation type="last.fm" type-id="08db8098-c0df-4b78-82c3-c8697b4bba7f">
|
59
|
+
<target id="6733880a-f246-4ead-a7ac-23785b80e136">https://www.last.fm/music/Kasabian</target>
|
60
|
+
<direction>forward</direction>
|
61
|
+
</relation>
|
62
|
+
<relation type="lyrics" type-id="e4d73442-3762-45a8-905c-401da65544ed">
|
63
|
+
<target id="a716a264-b67a-4ad9-9e29-64a5c589e595">https://genius.com/artists/Kasabian</target>
|
64
|
+
<direction>forward</direction>
|
65
|
+
</relation>
|
66
|
+
<relation type="lyrics" type-id="e4d73442-3762-45a8-905c-401da65544ed">
|
67
|
+
<target id="6859ebf7-cfe7-4543-b576-788d0149c773">https://muzikum.eu/en/kasabian/lyrics</target>
|
68
|
+
<direction>forward</direction>
|
69
|
+
</relation>
|
70
|
+
<relation type="myspace" type-id="bac47923-ecde-4b59-822e-d08f0cd10156">
|
71
|
+
<target id="2a671cb7-482b-48e3-9fb9-5aa448968e14">https://myspace.com/kasabian</target>
|
72
|
+
<direction>forward</direction>
|
73
|
+
</relation>
|
74
|
+
<relation type="official homepage" type-id="fe33d22f-c3b0-4d68-bd53-a856badf2b15">
|
75
|
+
<target id="f489988f-f6ca-49ed-9931-f21712d00f6d">https://www.kasabian.co.uk/</target>
|
76
|
+
<direction>forward</direction>
|
77
|
+
</relation>
|
78
|
+
<relation type="other databases" type-id="d94fb61c-fa20-4e3c-a19a-71a949fb2c55">
|
79
|
+
<target id="49a2e69a-a3ef-4096-aefd-15ba6b3e32a4">http://id.loc.gov/authorities/names/n2005068609</target>
|
80
|
+
<direction>forward</direction>
|
81
|
+
</relation>
|
82
|
+
<relation type="other databases" type-id="d94fb61c-fa20-4e3c-a19a-71a949fb2c55">
|
83
|
+
<target id="1fdfb0d4-fcdd-4f44-b9e2-f4c9e76b7d94">https://catalogue.bnf.fr/ark:/12148/cb145796883</target>
|
84
|
+
<direction>forward</direction>
|
85
|
+
</relation>
|
86
|
+
<relation type="other databases" type-id="d94fb61c-fa20-4e3c-a19a-71a949fb2c55">
|
87
|
+
<target id="be5626f4-70f3-4ee9-9c04-4b41dc9a27b3">https://d-nb.info/gnd/10336310-5</target>
|
88
|
+
<direction>forward</direction>
|
89
|
+
</relation>
|
90
|
+
<relation type="other databases" type-id="d94fb61c-fa20-4e3c-a19a-71a949fb2c55">
|
91
|
+
<target id="0ad65037-83d2-46ca-8bf6-9327fe0063bb">https://rateyourmusic.com/artist/kasabian</target>
|
92
|
+
<direction>forward</direction>
|
93
|
+
</relation>
|
94
|
+
<relation type="other databases" type-id="d94fb61c-fa20-4e3c-a19a-71a949fb2c55">
|
95
|
+
<target id="6636ae93-6f8a-4d98-9013-609259712cdf">http://www.worldcat.org/identities/lccn-n2005068609/</target>
|
96
|
+
<direction>forward</direction>
|
97
|
+
<ended>true</ended>
|
98
|
+
</relation>
|
99
|
+
<relation type="purchase for download" type-id="f8319a2f-f824-4617-81c8-be6560b3b203">
|
100
|
+
<target id="04c0e7b7-2b69-4708-8de4-7f37cee8a9eb">https://play.google.com/store/music/artist?id=A2chuocuj6o6rswcqvmb6h2fzn4</target>
|
101
|
+
<direction>forward</direction>
|
102
|
+
<end>2020-10-12</end>
|
103
|
+
<ended>true</ended>
|
104
|
+
</relation>
|
105
|
+
<relation type="purchase for download" type-id="f8319a2f-f824-4617-81c8-be6560b3b203">
|
106
|
+
<target id="b8ac6f68-70bb-41b8-9632-4fa002003949">https://itunes.apple.com/us/artist/id20478838</target>
|
107
|
+
<direction>forward</direction>
|
108
|
+
</relation>
|
109
|
+
<relation type="secondhandsongs" type-id="79c5b84d-a206-4f4c-9832-78c028c312c3">
|
110
|
+
<target id="68cf3241-04bc-488c-976d-af33680a51d4">https://secondhandsongs.com/artist/25440</target>
|
111
|
+
<direction>forward</direction>
|
112
|
+
</relation>
|
113
|
+
<relation type="social network" type-id="99429741-f3f6-484b-84f8-23af51991770">
|
114
|
+
<target id="b32de4e6-f645-45e8-b2e4-787f4e49aa84">https://twitter.com/kasabianhq</target>
|
115
|
+
<direction>forward</direction>
|
116
|
+
</relation>
|
117
|
+
<relation type="social network" type-id="99429741-f3f6-484b-84f8-23af51991770">
|
118
|
+
<target id="74206326-e179-4908-8be8-79db9cef17fa">https://www.facebook.com/kasabian</target>
|
119
|
+
<direction>forward</direction>
|
120
|
+
</relation>
|
121
|
+
<relation type="social network" type-id="99429741-f3f6-484b-84f8-23af51991770">
|
122
|
+
<target id="ba78e7e1-27e6-407e-b9de-3f9415b7e7e7">https://www.instagram.com/kasabianofficial/</target>
|
123
|
+
<direction>forward</direction>
|
124
|
+
</relation>
|
125
|
+
<relation type="songkick" type-id="aac9c4bc-a5b9-30b8-9839-e3ac314c6e58">
|
126
|
+
<target id="187bd965-fef2-4674-98b9-1b256a1ae96d">https://www.songkick.com/artists/175029</target>
|
127
|
+
<direction>forward</direction>
|
128
|
+
</relation>
|
129
|
+
<relation type="soundcloud" type-id="89e4a949-0976-440d-bda1-5f772c1e5710">
|
130
|
+
<target id="8ef55e5b-ef5a-433f-bbea-cf08b920d7a0">https://soundcloud.com/kasabian</target>
|
131
|
+
<direction>forward</direction>
|
132
|
+
</relation>
|
133
|
+
<relation type="streaming" type-id="63cc5d1f-f096-4c94-a43f-ecb32ea94161">
|
134
|
+
<target id="6533f0f7-20c1-4834-ba14-c0776d80152b">https://music.apple.com/gb/artist/20478838</target>
|
135
|
+
<direction>forward</direction>
|
136
|
+
</relation>
|
137
|
+
<relation type="streaming" type-id="63cc5d1f-f096-4c94-a43f-ecb32ea94161">
|
138
|
+
<target id="1dd6ae94-e90f-4e17-9ad3-4adcce78cfaa">https://music.youtube.com/channel/UCmJDzMXYTdyjtp5VNONQRKg</target>
|
139
|
+
<direction>forward</direction>
|
140
|
+
</relation>
|
141
|
+
<relation type="streaming" type-id="63cc5d1f-f096-4c94-a43f-ecb32ea94161">
|
142
|
+
<target id="550130fd-4182-4284-b526-fdf20f2a6709">https://tidal.com/artist/1556</target>
|
143
|
+
<direction>forward</direction>
|
144
|
+
</relation>
|
145
|
+
<relation type="VIAF" type-id="e8571dcc-35d4-4e91-a577-a3382fd84460">
|
146
|
+
<target id="02fb245f-87f3-4363-9a81-dc0c0ec4f874">http://viaf.org/viaf/138707200</target>
|
147
|
+
<direction>forward</direction>
|
148
|
+
</relation>
|
149
|
+
<relation type="wikidata" type-id="689870a4-a1e4-4912-b17f-7b2664215698">
|
150
|
+
<target id="82e48da2-9fc5-402a-b7c1-d1eb0bb6e123">https://www.wikidata.org/wiki/Q272517</target>
|
151
|
+
<direction>forward</direction>
|
152
|
+
</relation>
|
153
|
+
<relation type="youtube" type-id="6a540e5b-58c6-4192-b6ba-dbc71ec8fcf0">
|
154
|
+
<target id="cca53eab-ab96-4d2d-9403-4c5278164812">https://www.youtube.com/channel/UC_niYTRmUdRvVNdGYIA1vcg</target>
|
155
|
+
<direction>forward</direction>
|
156
|
+
</relation>
|
157
|
+
<relation type="youtube" type-id="6a540e5b-58c6-4192-b6ba-dbc71ec8fcf0">
|
158
|
+
<target id="b52fa30f-3705-40d9-b3c5-d164be76b360">https://www.youtube.com/user/KasabianVEVO</target>
|
159
|
+
<direction>forward</direction>
|
160
|
+
</relation>
|
161
|
+
<relation type="youtube" type-id="6a540e5b-58c6-4192-b6ba-dbc71ec8fcf0">
|
162
|
+
<target id="a013b397-c09b-4308-b14b-8168265b6776">https://www.youtube.com/user/KasabianTour</target>
|
163
|
+
<direction>forward</direction>
|
164
|
+
<ended>true</ended>
|
165
|
+
</relation>
|
166
|
+
</relation-list>
|
167
|
+
</artist>
|
168
|
+
</metadata>
|