rspotify 1.17.0 → 1.18.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +24 -8
- data/lib/rspotify.rb +10 -7
- data/lib/rspotify/audio_features.rb +72 -0
- data/lib/rspotify/base.rb +40 -0
- data/lib/rspotify/recommendation_seed.rb +18 -0
- data/lib/rspotify/recommendations.rb +108 -0
- data/lib/rspotify/track.rb +5 -0
- data/lib/rspotify/user.rb +36 -0
- data/lib/rspotify/version.rb +1 -1
- data/spec/lib/rspotify/album_spec.rb +47 -0
- data/spec/lib/rspotify/audio_features_spec.rb +44 -0
- data/spec/lib/rspotify/recommendations_spec.rb +52 -0
- data/spec/lib/rspotify/track_spec.rb +40 -1
- data/spec/vcr_cassettes/audio_features_find_1zHlj4dQ8ZAtrayhuDDmkY.yml +214 -0
- data/spec/vcr_cassettes/audio_features_find_multiple.yml +78 -0
- data/spec/vcr_cassettes/authenticate_client.yml +19 -19
- data/spec/vcr_cassettes/recommendations_available_genre_seeds.yml +207 -0
- data/spec/vcr_cassettes/recommendations_generate.yml +192 -0
- data/spec/vcr_cassettes/track_audio_features_3jfr0TF6DQcOLat8gGn7E2.yml +203 -0
- metadata +19 -2
@@ -0,0 +1,44 @@
|
|
1
|
+
describe RSpotify::AudioFeatures do
|
2
|
+
|
3
|
+
let(:client_id) { '5ac1cda2ad354aeaa1ad2693d33bb98c' }
|
4
|
+
let(:client_secret) { '155fc038a85840679b55a1822ef36b9b' }
|
5
|
+
|
6
|
+
before do
|
7
|
+
VCR.use_cassette('authenticate:client') do
|
8
|
+
RSpotify.authenticate(client_id, client_secret)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
describe 'AudioFeatures::find' do
|
13
|
+
it 'finds the audio features for a track' do
|
14
|
+
audio_features = VCR.use_cassette('audio_features:find:1zHlj4dQ8ZAtrayhuDDmkY') do
|
15
|
+
RSpotify::AudioFeatures.find('1zHlj4dQ8ZAtrayhuDDmkY')
|
16
|
+
end
|
17
|
+
|
18
|
+
expect(audio_features.acousticness).to eq 0.0362
|
19
|
+
expect(audio_features.analysis_url).to eq 'http://echonest-analysis.s3.amazonaws.com/TR/NJIkNQOAcm9QRI6VoxQ8KKj3xlFtyh3AFpxuKABMGuAx1sXx1ysxdaHiZ8ZzwBC6KE3HiPd00yLPrRTog=/3/full.json?AWSAccessKeyId=AKIAJRDFEY23UEVW42BQ&Expires=1460038539&Signature=ZqgmK8XH15lLPwGlKZnLJp2wgbs%3D'
|
20
|
+
expect(audio_features.danceability).to eq 0.587
|
21
|
+
expect(audio_features.duration_ms).to eq 204053
|
22
|
+
expect(audio_features.energy).to eq 0.965
|
23
|
+
expect(audio_features.instrumentalness).to eq 0
|
24
|
+
expect(audio_features.key).to eq 11
|
25
|
+
expect(audio_features.liveness).to eq 0.138
|
26
|
+
expect(audio_features.loudness).to eq -4.106
|
27
|
+
expect(audio_features.mode).to eq 1
|
28
|
+
expect(audio_features.speechiness).to eq 0.101
|
29
|
+
expect(audio_features.tempo).to eq 129.972
|
30
|
+
expect(audio_features.time_signature).to eq 4
|
31
|
+
expect(audio_features.track_href).to eq 'https://api.spotify.com/v1/tracks/1zHlj4dQ8ZAtrayhuDDmkY'
|
32
|
+
expect(audio_features.valence).to eq 0.818
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'finds the audio features for multiple tracks' do
|
36
|
+
audio_features = VCR.use_cassette('audio_features:find:multiple') do
|
37
|
+
RSpotify::AudioFeatures.find(['1zHlj4dQ8ZAtrayhuDDmkY', '7ouMYWpwJ422jRcDASZB7P', '4VqPOruhp5EdPBeR92t6lQ'])
|
38
|
+
end
|
39
|
+
|
40
|
+
expect(audio_features.count).to eq 3
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
describe RSpotify::Recommendations do
|
2
|
+
|
3
|
+
let(:client_id) { '5ac1cda2ad354aeaa1ad2693d33bb98c' }
|
4
|
+
let(:client_secret) { '155fc038a85840679b55a1822ef36b9b' }
|
5
|
+
|
6
|
+
before do
|
7
|
+
VCR.use_cassette('authenticate:client') do
|
8
|
+
RSpotify.authenticate(client_id, client_secret)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
describe 'Recommendations::available_genre_seeds' do
|
13
|
+
subject do
|
14
|
+
VCR.use_cassette('recommendations:available_genre_seeds') do
|
15
|
+
RSpotify::Recommendations.available_genre_seeds
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'retrieves a list of available genres seed parameter values' do
|
20
|
+
available_genre_seeds = subject
|
21
|
+
expect(available_genre_seeds.size) .to eq 126
|
22
|
+
expect(available_genre_seeds) .to include('black-metal', 'industrial', 'trip-hop')
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe 'Recommendations::generate' do
|
27
|
+
subject do
|
28
|
+
VCR.use_cassette('recommendations_generate') do
|
29
|
+
RSpotify::Recommendations.generate(
|
30
|
+
limit: 20,
|
31
|
+
seed_artists: ['0X380XXQSNBYuleKzav5UO', '6FXMGgJwohJLUSr5nVlf9X'],
|
32
|
+
seed_genres: ['electronic', 'industrial', 'trip-hop'],
|
33
|
+
market: 'US',
|
34
|
+
min_danceability: 0.2,
|
35
|
+
target_valence: 0.6
|
36
|
+
)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'generates a list of recommended tracks' do
|
41
|
+
tracks = subject.tracks
|
42
|
+
expect(tracks.count) .to eq(20)
|
43
|
+
expect(tracks.map { |track| track.name }).to include('Bonfire', 'All The Love In The World', 'Splitting The Atom')
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'generates a list of recommendation seeds' do
|
47
|
+
seeds = subject.seeds
|
48
|
+
expect(seeds.count) .to eq(5)
|
49
|
+
expect(seeds.select { |seed| seed.type == 'ARTIST' }.map { |seed| seed.id }).to include('0X380XXQSNBYuleKzav5UO', '6FXMGgJwohJLUSr5nVlf9X')
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
describe RSpotify::Track do
|
2
|
-
|
2
|
+
|
3
3
|
describe 'Track::find receiving id as a string' do
|
4
4
|
|
5
5
|
before(:each) do
|
@@ -101,4 +101,43 @@ describe RSpotify::Track do
|
|
101
101
|
expect(ES_tracks.length).to eq(tracks.length)
|
102
102
|
end
|
103
103
|
end
|
104
|
+
|
105
|
+
describe 'Track#audio_features' do
|
106
|
+
let(:client_id) { '5ac1cda2ad354aeaa1ad2693d33bb98c' }
|
107
|
+
let(:client_secret) { '155fc038a85840679b55a1822ef36b9b' }
|
108
|
+
|
109
|
+
before do
|
110
|
+
VCR.use_cassette('authenticate:client') do
|
111
|
+
RSpotify.authenticate(client_id, client_secret)
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
let(:track) do
|
116
|
+
VCR.use_cassette('track:find:3jfr0TF6DQcOLat8gGn7E2') do
|
117
|
+
RSpotify::Track.find('3jfr0TF6DQcOLat8gGn7E2')
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
it 'retrieves the audio features for the track' do
|
122
|
+
audio_features = VCR.use_cassette('track:audio_features:3jfr0TF6DQcOLat8gGn7E2') do
|
123
|
+
track.audio_features
|
124
|
+
end
|
125
|
+
|
126
|
+
expect(audio_features.acousticness).to eq 0.186
|
127
|
+
expect(audio_features.analysis_url).to eq 'http://echonest-analysis.s3.amazonaws.com/TR/TR-mGwgsahAQuIJvg1GFm9sHdVOQa1Tq677JbupMzwMyyKB_i5PBIKWWtTxnarW-qvlA9zRYF6OIY6cnU=/3/full.json?AWSAccessKeyId=AKIAJRDFEY23UEVW42BQ&Expires=1460833574&Signature=5binEjpotRQp8%2BE3LdYipDL%2BE8E%3D'
|
128
|
+
expect(audio_features.danceability).to eq 0.548
|
129
|
+
expect(audio_features.duration_ms).to eq 272394
|
130
|
+
expect(audio_features.energy).to eq 0.532
|
131
|
+
expect(audio_features.instrumentalness).to eq 0.000263
|
132
|
+
expect(audio_features.key).to eq 5
|
133
|
+
expect(audio_features.liveness).to eq 0.217
|
134
|
+
expect(audio_features.loudness).to eq -7.596
|
135
|
+
expect(audio_features.mode).to eq 1
|
136
|
+
expect(audio_features.speechiness).to eq 0.0323
|
137
|
+
expect(audio_features.tempo).to eq 85.030
|
138
|
+
expect(audio_features.time_signature).to eq 4
|
139
|
+
expect(audio_features.track_href).to eq 'https://api.spotify.com/v1/tracks/3jfr0TF6DQcOLat8gGn7E2'
|
140
|
+
expect(audio_features.valence).to eq 0.428
|
141
|
+
end
|
142
|
+
end
|
104
143
|
end
|
@@ -0,0 +1,214 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://5ac1cda2ad354aeaa1ad2693d33bb98c:155fc038a85840679b55a1822ef36b9b@accounts.spotify.com/api/token
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: grant_type=client_credentials
|
9
|
+
headers:
|
10
|
+
accept:
|
11
|
+
- "*/*; q=0.5, application/xml"
|
12
|
+
accept-encoding:
|
13
|
+
- gzip, deflate
|
14
|
+
authorization:
|
15
|
+
- Basic NWFjMWNkYTJhZDM1NGFlYWExYWQyNjkzZDMzYmI5OGM6MTU1ZmMwMzhhODU4NDA2NzliNTVhMTgyMmVmMzZiOWI=
|
16
|
+
content-length:
|
17
|
+
- '29'
|
18
|
+
content-type:
|
19
|
+
- application/x-www-form-urlencoded
|
20
|
+
user-agent:
|
21
|
+
- Ruby
|
22
|
+
response:
|
23
|
+
status:
|
24
|
+
code: 200
|
25
|
+
message: OK
|
26
|
+
headers:
|
27
|
+
server:
|
28
|
+
- nginx
|
29
|
+
date:
|
30
|
+
- Thu, 07 Apr 2016 14:04:58 GMT
|
31
|
+
content-type:
|
32
|
+
- application/json
|
33
|
+
transfer-encoding:
|
34
|
+
- chunked
|
35
|
+
connection:
|
36
|
+
- keep-alive
|
37
|
+
keep-alive:
|
38
|
+
- timeout=10
|
39
|
+
vary:
|
40
|
+
- Accept-Encoding
|
41
|
+
x-ua-compatible:
|
42
|
+
- IE=edge
|
43
|
+
x-frame-options:
|
44
|
+
- deny
|
45
|
+
content-security-policy:
|
46
|
+
- 'default-src ''self''; script-src ''self'' https://d2d1dxiu3v1f2i.cloudfront.net
|
47
|
+
https://www.google-analytics.com; img-src ''self'' https://d2d1dxiu3v1f2i.cloudfront.net
|
48
|
+
https://i.imgur.com https://d2mv8tnci56s9d.cloudfront.net https://aci.scdn.co
|
49
|
+
https://graph.facebook.com https://fbcdn-profile-a.akamaihd.net https://scontent.xx.fbcdn.net
|
50
|
+
https://www.google-analytics.com https://stats.g.doubleclick.net data: d2d1dxiu3v1f2i.cloudfront.net;
|
51
|
+
font-src ''self'' https://d2d1dxiu3v1f2i.cloudfront.net https://sp-bootstrap.global.ssl.fastly.net;
|
52
|
+
style-src ''self'' ''unsafe-inline'' https://d2d1dxiu3v1f2i.cloudfront.net;
|
53
|
+
frame-src ''self'' https://www.spotify.com;'
|
54
|
+
x-content-security-policy:
|
55
|
+
- 'default-src ''self''; script-src ''self'' https://d2d1dxiu3v1f2i.cloudfront.net
|
56
|
+
https://www.google-analytics.com; img-src ''self'' https://d2d1dxiu3v1f2i.cloudfront.net
|
57
|
+
https://i.imgur.com https://d2mv8tnci56s9d.cloudfront.net https://aci.scdn.co
|
58
|
+
https://graph.facebook.com https://fbcdn-profile-a.akamaihd.net https://scontent.xx.fbcdn.net
|
59
|
+
https://www.google-analytics.com https://stats.g.doubleclick.net data: d2d1dxiu3v1f2i.cloudfront.net;
|
60
|
+
font-src ''self'' https://d2d1dxiu3v1f2i.cloudfront.net https://sp-bootstrap.global.ssl.fastly.net;
|
61
|
+
style-src ''self'' ''unsafe-inline'' https://d2d1dxiu3v1f2i.cloudfront.net;
|
62
|
+
frame-src ''self'' https://www.spotify.com;'
|
63
|
+
cache-control:
|
64
|
+
- no-cache, no-store, must-revalidate
|
65
|
+
pragma:
|
66
|
+
- no-cache
|
67
|
+
content-encoding:
|
68
|
+
- gzip
|
69
|
+
x-content-type-options:
|
70
|
+
- nosniff
|
71
|
+
strict-transport-security:
|
72
|
+
- max-age=31536000;
|
73
|
+
body:
|
74
|
+
encoding: ASCII-8BIT
|
75
|
+
string: !binary |-
|
76
|
+
H4sIAAAAAAAAAx3Nuw6CMBQA0H/prElTBIlbBYWAg4APykIqXGk1CmkJIMZ/
|
77
|
+
F13Pct6IFwVonbf1HZ5ohdYRrVMPxIJUDtchiP4WsEvimyOtthtmJ87ADibx
|
78
|
+
fNwEbpjZmQ5OcdftlhalKY9YScqj3GPszq9VLB/j2eiE6NEM/YO8fTXwW4Ar
|
79
|
+
UJPC0EgFOpfTbVgYf76qpcjokQAAAA==
|
80
|
+
http_version: '1.1'
|
81
|
+
recorded_at: Thu, 07 Apr 2016 14:04:58 GMT
|
82
|
+
- request:
|
83
|
+
method: get
|
84
|
+
uri: https://api.spotify.com/v1/audio-features/1zHlj4dQ8ZAtrayhuDDmkY
|
85
|
+
body:
|
86
|
+
encoding: US-ASCII
|
87
|
+
string: ''
|
88
|
+
headers:
|
89
|
+
accept:
|
90
|
+
- "*/*; q=0.5, application/xml"
|
91
|
+
accept-encoding:
|
92
|
+
- gzip, deflate
|
93
|
+
authorization:
|
94
|
+
- Bearer BQBNixCwXaKzzVt-cA3vzPqWHpCiwVFE3mKDKM-jhwQNDo9ixhDYNQR42tUroszplPiH0rlgOT--mS0iLiSx4g
|
95
|
+
user-agent:
|
96
|
+
- Ruby
|
97
|
+
response:
|
98
|
+
status:
|
99
|
+
code: 200
|
100
|
+
message: OK
|
101
|
+
headers:
|
102
|
+
server:
|
103
|
+
- nginx
|
104
|
+
date:
|
105
|
+
- Thu, 07 Apr 2016 14:05:39 GMT
|
106
|
+
content-type:
|
107
|
+
- application/json; charset=UTF8
|
108
|
+
transfer-encoding:
|
109
|
+
- chunked
|
110
|
+
connection:
|
111
|
+
- keep-alive
|
112
|
+
keep-alive:
|
113
|
+
- timeout=600
|
114
|
+
cache-control:
|
115
|
+
- private, max-age=0
|
116
|
+
access-control-allow-origin:
|
117
|
+
- "*"
|
118
|
+
access-control-allow-methods:
|
119
|
+
- GET, POST, OPTIONS, PUT, DELETE
|
120
|
+
access-control-allow-credentials:
|
121
|
+
- 'true'
|
122
|
+
access-control-max-age:
|
123
|
+
- '604800'
|
124
|
+
access-control-allow-headers:
|
125
|
+
- Accept, Authorization, Origin, Content-Type
|
126
|
+
content-encoding:
|
127
|
+
- gzip
|
128
|
+
x-content-type-options:
|
129
|
+
- nosniff
|
130
|
+
strict-transport-security:
|
131
|
+
- max-age=31536000;
|
132
|
+
body:
|
133
|
+
encoding: ASCII-8BIT
|
134
|
+
string: !binary |-
|
135
|
+
H4sIAAAAAAAAAHySXXOiMBiF7/srHGe2V1sgBCg44+zgqlVxu2q7/fDGSSFK
|
136
|
+
NCSUJAp2+t8XQ+3uVS9zzpPzJid5u2i12gliMUYvhBJZtVudlmW4/vX3k4MZ
|
137
|
+
LjYfWuC5WtthLQCgV5SrhGEhTtKVYwDL03LGE6wpvRI5xnFKzpxVY42BYq6E
|
138
|
+
JPE/x4KerS3ChCxUhplE9NNuRpI9/i8K+lrdI4rrazSiDxpR4izn+hx2YATX
|
139
|
+
TbKsco21kUoIX60xkqrAot2MTbQFjiO6dZK5vwxlgapU9fvZ7rlBVEE0I3Iu
|
140
|
+
ybrq1EC863y1QxOrtMBrvTGVMhcd00Q5MT5CjJhn5h6YmhTmV2GIIVoJIlaq
|
141
|
+
oJ9xdVrdMK9rkVdnwBDQQBk6coYOQg+4X5i3k/Hudv47jLNgvhh7D7yc+1G0
|
142
|
+
hSUdyiqF4TAvVRT2ft2osATiqQSVKBM0Ikt/eTz0fnrRAI7ILLGsajorFvd8
|
143
|
+
0zWhuVaUGlvB2Y/w8S6M4/pxIlyNk24YjcPJoj8cPNvwz+Dh0bF788tBmZO6
|
144
|
+
7y5wPMuCvguDyzuyYfoVusvXTRb5TyPg0unscEOjJZtOcvuweRHfYL9pIFEF
|
145
|
+
koSzVab/gG05lgubokmGV+IcdjKdi/e/AAAA//8DAM2eGPbkAgAA
|
146
|
+
http_version: '1.1'
|
147
|
+
recorded_at: Thu, 07 Apr 2016 14:05:39 GMT
|
148
|
+
- request:
|
149
|
+
method: get
|
150
|
+
uri: https://api.spotify.com/v1/audio-features/1zHlj4dQ8ZAtrayhuDDmkY
|
151
|
+
body:
|
152
|
+
encoding: US-ASCII
|
153
|
+
string: ''
|
154
|
+
headers:
|
155
|
+
accept:
|
156
|
+
- "*/*; q=0.5, application/xml"
|
157
|
+
accept-encoding:
|
158
|
+
- gzip, deflate
|
159
|
+
authorization:
|
160
|
+
- Bearer BQCLjzy01pcW3i4yYvehkPn1YxN63JtPCuCtAcQDhiKrYfKvIuVj0sk9dUapG3GjIajKlp9I5GrZhbqv_jiR8w
|
161
|
+
user-agent:
|
162
|
+
- Ruby
|
163
|
+
response:
|
164
|
+
status:
|
165
|
+
code: 200
|
166
|
+
message: OK
|
167
|
+
headers:
|
168
|
+
server:
|
169
|
+
- nginx
|
170
|
+
date:
|
171
|
+
- Thu, 07 Apr 2016 14:06:14 GMT
|
172
|
+
content-type:
|
173
|
+
- application/json; charset=UTF8
|
174
|
+
transfer-encoding:
|
175
|
+
- chunked
|
176
|
+
connection:
|
177
|
+
- keep-alive
|
178
|
+
keep-alive:
|
179
|
+
- timeout=600
|
180
|
+
cache-control:
|
181
|
+
- private, max-age=0
|
182
|
+
access-control-allow-origin:
|
183
|
+
- "*"
|
184
|
+
access-control-allow-methods:
|
185
|
+
- GET, POST, OPTIONS, PUT, DELETE
|
186
|
+
access-control-allow-credentials:
|
187
|
+
- 'true'
|
188
|
+
access-control-max-age:
|
189
|
+
- '604800'
|
190
|
+
access-control-allow-headers:
|
191
|
+
- Accept, Authorization, Origin, Content-Type
|
192
|
+
content-encoding:
|
193
|
+
- gzip
|
194
|
+
x-content-type-options:
|
195
|
+
- nosniff
|
196
|
+
strict-transport-security:
|
197
|
+
- max-age=31536000;
|
198
|
+
body:
|
199
|
+
encoding: ASCII-8BIT
|
200
|
+
string: !binary |-
|
201
|
+
H4sIAAAAAAAAAHySy27iMBiF930KhNSupokThxCQ0CgMUCBtp9DbwAa5sSGG
|
202
|
+
xI58gYRR373BKZ1ZdelzPp/fPvbfi0ajiRGLCXqjKVVls9FtAKsVtH+cHMKI
|
203
|
+
2HxqHb9ltB0xguOYVco1ZkTKk3TtWQ7wjZxxTAxlVjInJE7omQMVVhso5loq
|
204
|
+
Gv9zAPRdY1EmldAZYQqlX3Y9ku7Jf1EwMOoepaS6Ri0GTi0qkuXcnMPtWJ12
|
205
|
+
nazK3GBNpDHlqzVBSgsim/VYbCznOE63Hp4Fy1AJVCZ6MMh2ixrRghpG5lzR
|
206
|
+
ddmtgHjX/W6HIVaJIGuzMVEql13bRjm1PkOsmGf23rENKe3vwhBDaSmpXGmR
|
207
|
+
fsVVaVXDvKpFXZ8BS0ILZejIGTpIM+Bpbt9PJ7v72e8wzjqz+cR/4cUsiKIt
|
208
|
+
LNKRKhMYjvJCR2H/7kaHhSP/FE4pC4zGdBksj4f+Lz8awjF9wACUtw9i/sQ3
|
209
|
+
PRvaa52m1lZy9jN8fQzjuHqciJQT3AujSTidD0bDhQufhy+vntufXQ2LnFZ9
|
210
|
+
9xzPBwAGrbZ39Ug3zLxCTxS3GzaN1HOCD2pxc+n2Q7bhQIo3hL1LOKg7wFog
|
211
|
+
RTlbZeYXuMADLVhXTTOykue4k+ldvH8AAAD//wMAMW+C7+YCAAA=
|
212
|
+
http_version: '1.1'
|
213
|
+
recorded_at: Thu, 07 Apr 2016 14:06:14 GMT
|
214
|
+
recorded_with: VCR 2.9.3
|
@@ -0,0 +1,78 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://api.spotify.com/v1/audio-features?ids=1zHlj4dQ8ZAtrayhuDDmkY,7ouMYWpwJ422jRcDASZB7P,4VqPOruhp5EdPBeR92t6lQ
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
accept:
|
11
|
+
- "*/*; q=0.5, application/xml"
|
12
|
+
accept-encoding:
|
13
|
+
- gzip, deflate
|
14
|
+
authorization:
|
15
|
+
- Bearer BQBh33vrzHsO0Wx89qfJl52x2QOeNrO0NeTwhVIJa1P_bMk1oIVE6S4U4cK2Rvsc-pn76qQv8cTiib5IWedtrA
|
16
|
+
user-agent:
|
17
|
+
- Ruby
|
18
|
+
response:
|
19
|
+
status:
|
20
|
+
code: 200
|
21
|
+
message: OK
|
22
|
+
headers:
|
23
|
+
server:
|
24
|
+
- nginx
|
25
|
+
date:
|
26
|
+
- Thu, 07 Apr 2016 14:06:13 GMT
|
27
|
+
content-type:
|
28
|
+
- application/json; charset=UTF8
|
29
|
+
transfer-encoding:
|
30
|
+
- chunked
|
31
|
+
connection:
|
32
|
+
- keep-alive
|
33
|
+
keep-alive:
|
34
|
+
- timeout=600
|
35
|
+
cache-control:
|
36
|
+
- private, max-age=0
|
37
|
+
access-control-allow-origin:
|
38
|
+
- "*"
|
39
|
+
access-control-allow-methods:
|
40
|
+
- GET, POST, OPTIONS, PUT, DELETE
|
41
|
+
access-control-allow-credentials:
|
42
|
+
- 'true'
|
43
|
+
access-control-max-age:
|
44
|
+
- '604800'
|
45
|
+
access-control-allow-headers:
|
46
|
+
- Accept, Authorization, Origin, Content-Type
|
47
|
+
content-encoding:
|
48
|
+
- gzip
|
49
|
+
x-content-type-options:
|
50
|
+
- nosniff
|
51
|
+
strict-transport-security:
|
52
|
+
- max-age=31536000;
|
53
|
+
body:
|
54
|
+
encoding: ASCII-8BIT
|
55
|
+
string: !binary |-
|
56
|
+
H4sIAAAAAAAAAKyVa4/aOBSGv/dXoErbT53EsZ0LI41W4TZAyiVhgIHVCnkS
|
57
|
+
A4bcSBxIqPrfN03J7KqFqLPtx5z3Pa+dYz/y53e12nuSOCxYrSnhSUTj97X7
|
58
|
+
2l+1z7mQSw7xbUpemMt49lUAgqypH79p1KfR5lKtK/KluqdFSZIu326QOD6N
|
59
|
+
i9g7LEhAuQhe4NDCefmOQ0rtLSu9ILeWErGDJObM/lcDSIEXkfkxjxKP+py4
|
60
|
+
r4ZycXak/wlE2qV+JC7Nf+xbWZPKMqdeGBR7gnWhrpYr8CwsrN8PqtyAU4jS
|
61
|
+
uevusGNqS51HJNsmrZa3X5SmJGKFKw4DztbZfW6x9/fVPYVntY3oumjdch7G
|
62
|
+
96JIQiZcYgQ78MSjJBbOWKyOIz5xs5jFqyRyXwPzvHzqQT4kflcahBgJxCPn
|
63
|
+
wCenuFjiyRKH/d5+aI5026ubVk+ZBampGcYOpW6HZ1ukd8I0MfTG4DHRUyl+
|
64
|
+
TqUsTh3SZUtteT41morRRl02dgDIPo0j6ynYPIhIXCeuK+ziwP9Tn090286P
|
65
|
+
yqBZz3nQjZ7et1qd9gKiaXs2x7BhfminIcvn/iBhBQCkySr6MGEbvziNB1Np
|
66
|
+
LPuNM7fl+ungT6d81/Vkr3mSaO8P1Cpn4CQR4SzwV15xJyDAQEbluJlHV3EZ
|
67
|
+
+FXGufDl420WkKJcZQH9DAuygF4veMkCuMkChrdZAACqqIoGAUgQXkdCkq8h
|
68
|
+
ASX4AxJIzd34TUioQTJYzMNTH0O4s+yWPlk21HE1EtU9b0aiOu7XkGgblklM
|
69
|
+
b4eC2Sb1tmw/hkYKbWufnmbJrqc5K9Kj+IDWzbs71J1NrIVmt54e+1PdH6aB
|
70
|
+
3t487o4oM1bGtNs4zBSMfzMSfDrJ0NoXlXgp9t0NX7ehPMXEceDmNhL5nYbS
|
71
|
+
/0dCAfAaEuC75wFeIwILAP/06wBUVa5EAlQ+EAJQ8I1XQlKvIYGR8gMSUMvJ
|
72
|
+
qr8JCTw7jEdRsg3ltjNuUKsOueKa1UhU97wZieq4X0MiUZ/VuqkHutp4GQ33
|
73
|
+
bic8dpqjJ07GL/MmnZP9YZmybIrPRJVPXcfpzD8N+ktim1boDqaPNg7WSav9
|
74
|
+
uJnVpbG12ELwm5GwRknPsclwY3dmB/N5rR1OCRqEDK33FUgArL1elhtI1P5+
|
75
|
+
9+UfAAAA//8DAPmxEC5NCQAA
|
76
|
+
http_version: '1.1'
|
77
|
+
recorded_at: Thu, 07 Apr 2016 14:06:13 GMT
|
78
|
+
recorded_with: VCR 2.9.3
|
@@ -8,7 +8,7 @@ http_interactions:
|
|
8
8
|
string: grant_type=client_credentials
|
9
9
|
headers:
|
10
10
|
accept:
|
11
|
-
-
|
11
|
+
- '*/*; q=0.5, application/xml'
|
12
12
|
accept-encoding:
|
13
13
|
- gzip, deflate
|
14
14
|
authorization:
|
@@ -27,7 +27,7 @@ http_interactions:
|
|
27
27
|
server:
|
28
28
|
- nginx
|
29
29
|
date:
|
30
|
-
-
|
30
|
+
- Sat, 16 Apr 2016 18:56:13 GMT
|
31
31
|
content-type:
|
32
32
|
- application/json
|
33
33
|
transfer-encoding:
|
@@ -46,24 +46,24 @@ http_interactions:
|
|
46
46
|
- 'default-src ''self''; script-src ''self'' https://d2d1dxiu3v1f2i.cloudfront.net
|
47
47
|
https://www.google-analytics.com; img-src ''self'' https://d2d1dxiu3v1f2i.cloudfront.net
|
48
48
|
https://i.imgur.com https://d2mv8tnci56s9d.cloudfront.net https://aci.scdn.co
|
49
|
-
https://graph.facebook.com https://fbcdn-profile-a.akamaihd.net https://
|
50
|
-
https://stats.g.doubleclick.net data: d2d1dxiu3v1f2i.cloudfront.net;
|
51
|
-
''self'' https://d2d1dxiu3v1f2i.cloudfront.net https://
|
52
|
-
|
53
|
-
|
49
|
+
https://graph.facebook.com https://fbcdn-profile-a.akamaihd.net https://scontent.xx.fbcdn.net
|
50
|
+
https://www.google-analytics.com https://stats.g.doubleclick.net data: d2d1dxiu3v1f2i.cloudfront.net;
|
51
|
+
font-src ''self'' https://d2d1dxiu3v1f2i.cloudfront.net https://sp-bootstrap.global.ssl.fastly.net;
|
52
|
+
style-src ''self'' ''unsafe-inline'' https://d2d1dxiu3v1f2i.cloudfront.net;
|
53
|
+
frame-src ''self'' https://www.spotify.com;'
|
54
54
|
x-content-security-policy:
|
55
55
|
- 'default-src ''self''; script-src ''self'' https://d2d1dxiu3v1f2i.cloudfront.net
|
56
56
|
https://www.google-analytics.com; img-src ''self'' https://d2d1dxiu3v1f2i.cloudfront.net
|
57
57
|
https://i.imgur.com https://d2mv8tnci56s9d.cloudfront.net https://aci.scdn.co
|
58
|
-
https://graph.facebook.com https://fbcdn-profile-a.akamaihd.net https://
|
59
|
-
https://stats.g.doubleclick.net data: d2d1dxiu3v1f2i.cloudfront.net;
|
60
|
-
''self'' https://d2d1dxiu3v1f2i.cloudfront.net https://
|
61
|
-
|
62
|
-
|
58
|
+
https://graph.facebook.com https://fbcdn-profile-a.akamaihd.net https://scontent.xx.fbcdn.net
|
59
|
+
https://www.google-analytics.com https://stats.g.doubleclick.net data: d2d1dxiu3v1f2i.cloudfront.net;
|
60
|
+
font-src ''self'' https://d2d1dxiu3v1f2i.cloudfront.net https://sp-bootstrap.global.ssl.fastly.net;
|
61
|
+
style-src ''self'' ''unsafe-inline'' https://d2d1dxiu3v1f2i.cloudfront.net;
|
62
|
+
frame-src ''self'' https://www.spotify.com;'
|
63
63
|
cache-control:
|
64
|
-
-
|
64
|
+
- no-cache, no-store, must-revalidate
|
65
65
|
pragma:
|
66
|
-
-
|
66
|
+
- no-cache
|
67
67
|
content-encoding:
|
68
68
|
- gzip
|
69
69
|
x-content-type-options:
|
@@ -73,10 +73,10 @@ http_interactions:
|
|
73
73
|
body:
|
74
74
|
encoding: ASCII-8BIT
|
75
75
|
string: !binary |-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
76
|
+
H4sIAAAAAAAAAx3NTQuCMBgA4P+yc4K2CumYiqgUqeXyNMZ4qbX82syc0X/P
|
77
|
+
uj6X540Y56A17RsJNdqiXep71+JB3EJPVjLJQa5FKDGJ7ZriJTcJToesup0v
|
78
|
+
z9VJGd/NG8/JgyOvurbZuyTmozk43DJdGN2jjCWqCsvyhRboH9DetPBbgClQ
|
79
|
+
s8LYCgWaivnGG9v+fAFe3jUNkQAAAA==
|
80
80
|
http_version: '1.1'
|
81
|
-
recorded_at:
|
81
|
+
recorded_at: Sat, 16 Apr 2016 18:56:33 GMT
|
82
82
|
recorded_with: VCR 2.9.3
|