rspotify 1.15.0 → 1.15.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +9 -0
- data/lib/rspotify/album.rb +8 -2
- data/lib/rspotify/artist.rb +7 -2
- data/lib/rspotify/base.rb +6 -0
- data/lib/rspotify/category.rb +4 -0
- data/lib/rspotify/connection.rb +4 -0
- data/lib/rspotify/playlist.rb +19 -5
- data/lib/rspotify/user.rb +9 -2
- data/lib/rspotify/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1e6de26af3763d772cfac6dcaa7af1872f33eb58
|
4
|
+
data.tar.gz: c2068bee7e831a418081238f086823a0dfddf416
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b5da292e7de162c2525f35da9443dea08dbca5160c091b9046ca3f2b61bbad35a6667396b2afa6e62ae54e32c3413878615828760acbade35db925ef6afc1cd9
|
7
|
+
data.tar.gz: 1d7b6e62548385c7d88ef98fe74deb7efd533e848fab72450fab9487ad719c0ce7cd5fdbb7a208b54da1ac0a3da3f2be995733cdf0630a4ff251fea4e0f8f3e7
|
data/README.md
CHANGED
@@ -211,6 +211,15 @@ spotify_user = RSpotify::User.new(hash)
|
|
211
211
|
spotify_user.create_playlist!('my_awesome_playlist') # automatically refreshes token
|
212
212
|
```
|
213
213
|
|
214
|
+
## Getting raw response
|
215
|
+
|
216
|
+
To get the raw response from Spotify API requests, just toggle the `raw_response` variable:
|
217
|
+
|
218
|
+
```ruby
|
219
|
+
RSpotify.raw_response = true
|
220
|
+
RSpotify::Artist.search('Cher') #=> (String with raw json response)
|
221
|
+
```
|
222
|
+
|
214
223
|
## Notes
|
215
224
|
|
216
225
|
If you'd like to use OAuth outside rails, have a look [here](https://developer.spotify.com/web-api/authorization-guide/#authorization_code_flow) for the requests that need to be made. You should be able to pass the response to RSpotify::User.new just as well, and from there easily create playlists and more for your user.
|
data/lib/rspotify/album.rb
CHANGED
@@ -45,6 +45,8 @@ module RSpotify
|
|
45
45
|
url = "browse/new-releases?limit=#{limit}&offset=#{offset}"
|
46
46
|
url << "&country=#{country}" if country
|
47
47
|
response = RSpotify.get(url)
|
48
|
+
|
49
|
+
return response if RSpotify.raw_response
|
48
50
|
response['albums']['items'].map { |i| Album.new i }
|
49
51
|
end
|
50
52
|
|
@@ -100,14 +102,18 @@ module RSpotify
|
|
100
102
|
# album.tracks.first.name #=> "Do I Wanna Know?"
|
101
103
|
def tracks(limit: 50, offset: 0)
|
102
104
|
last_track = offset + limit - 1
|
103
|
-
if @tracks_cache && last_track < 50
|
105
|
+
if @tracks_cache && last_track < 50 && !RSpotify.raw_response
|
104
106
|
return @tracks_cache[offset..last_track]
|
105
107
|
end
|
106
108
|
|
107
109
|
url = "albums/#{@id}/tracks?limit=#{limit}&offset=#{offset}"
|
108
110
|
response = RSpotify.get(url)
|
109
|
-
|
111
|
+
json = RSpotify.raw_response ? JSON.parse(response) : response
|
112
|
+
|
113
|
+
tracks = json['items'].map { |i| Track.new i }
|
110
114
|
@tracks_cache = tracks if limit == 50 && offset == 0
|
115
|
+
return response if RSpotify.raw_response
|
116
|
+
|
111
117
|
tracks
|
112
118
|
end
|
113
119
|
end
|
data/lib/rspotify/artist.rb
CHANGED
@@ -73,6 +73,7 @@ module RSpotify
|
|
73
73
|
end
|
74
74
|
|
75
75
|
response = RSpotify.get(url)
|
76
|
+
return response if RSpotify.raw_response
|
76
77
|
response['items'].map { |i| Album.new i }
|
77
78
|
end
|
78
79
|
|
@@ -87,8 +88,10 @@ module RSpotify
|
|
87
88
|
# related_artists.size #=> 20
|
88
89
|
# related_artists.first.name #=> "Miles Kane"
|
89
90
|
def related_artists
|
90
|
-
return @related_artists unless @related_artists.nil?
|
91
|
+
return @related_artists unless @related_artists.nil? || RSpotify.raw_response
|
91
92
|
response = RSpotify.get("artists/#{@id}/related-artists")
|
93
|
+
|
94
|
+
return response if RSpotify.raw_response
|
92
95
|
@related_artists = response['artists'].map { |a| Artist.new a }
|
93
96
|
end
|
94
97
|
|
@@ -103,8 +106,10 @@ module RSpotify
|
|
103
106
|
# top_tracks.size #=> 10
|
104
107
|
# top_tracks.first.class #=> RSpotify::Track
|
105
108
|
def top_tracks(country)
|
106
|
-
return @top_tracks[country] unless @top_tracks[country].nil?
|
109
|
+
return @top_tracks[country] unless @top_tracks[country].nil? || RSpotify.raw_response
|
107
110
|
response = RSpotify.get("artists/#{@id}/top-tracks?country=#{country}")
|
111
|
+
|
112
|
+
return response if RSpotify.raw_response
|
108
113
|
@top_tracks[country] = response['tracks'].map { |t| Track.new t }
|
109
114
|
end
|
110
115
|
end
|
data/lib/rspotify/base.rb
CHANGED
@@ -40,7 +40,9 @@ module RSpotify
|
|
40
40
|
def self.find_many(ids, type)
|
41
41
|
type_class = RSpotify.const_get(type.capitalize)
|
42
42
|
path = "#{type}s?ids=#{ids.join ','}"
|
43
|
+
|
43
44
|
response = RSpotify.get path
|
45
|
+
return response if RSpotify.raw_response
|
44
46
|
response["#{type}s"].map { |t| type_class.new t }
|
45
47
|
end
|
46
48
|
private_class_method :find_many
|
@@ -48,7 +50,9 @@ module RSpotify
|
|
48
50
|
def self.find_one(id, type)
|
49
51
|
type_class = RSpotify.const_get(type.capitalize)
|
50
52
|
path = "#{type}s/#{id}"
|
53
|
+
|
51
54
|
response = RSpotify.get path
|
55
|
+
return response if RSpotify.raw_response
|
52
56
|
type_class.new response
|
53
57
|
end
|
54
58
|
private_class_method :find_one
|
@@ -97,6 +101,8 @@ module RSpotify
|
|
97
101
|
RSpotify.get(url)
|
98
102
|
end
|
99
103
|
|
104
|
+
return response if RSpotify.raw_response
|
105
|
+
|
100
106
|
types = types.split(',')
|
101
107
|
result = types.flat_map do |type|
|
102
108
|
type_class = RSpotify.const_get(type.capitalize)
|
data/lib/rspotify/category.rb
CHANGED
@@ -30,6 +30,7 @@ module RSpotify
|
|
30
30
|
end
|
31
31
|
|
32
32
|
response = RSpotify.get(url)
|
33
|
+
return response if RSpotify.raw_response
|
33
34
|
Category.new response
|
34
35
|
end
|
35
36
|
|
@@ -50,7 +51,9 @@ module RSpotify
|
|
50
51
|
options.each do |option, value|
|
51
52
|
url << "&#{option}=#{value}"
|
52
53
|
end
|
54
|
+
|
53
55
|
response = RSpotify.get(url)
|
56
|
+
return response if RSpotify.raw_response
|
54
57
|
response['categories']['items'].map { |i| Category.new i }
|
55
58
|
end
|
56
59
|
|
@@ -92,6 +95,7 @@ module RSpotify
|
|
92
95
|
end
|
93
96
|
|
94
97
|
response = RSpotify.get(url)
|
98
|
+
return response if RSpotify.raw_response
|
95
99
|
response['playlists']['items'].map { |i| Playlist.new i }
|
96
100
|
end
|
97
101
|
end
|
data/lib/rspotify/connection.rb
CHANGED
@@ -10,6 +10,7 @@ module RSpotify
|
|
10
10
|
VERBS = %w(get post put delete)
|
11
11
|
|
12
12
|
class << self
|
13
|
+
attr_accessor :raw_response
|
13
14
|
|
14
15
|
# Authenticates access to restricted data. Requires {https://developer.spotify.com/my-applications user credentials}
|
15
16
|
#
|
@@ -52,6 +53,7 @@ module RSpotify
|
|
52
53
|
|
53
54
|
def send_request(verb, path, *params)
|
54
55
|
url = path.start_with?("http") ? path : API_URI + path
|
56
|
+
|
55
57
|
begin
|
56
58
|
response = RestClient.send(verb, url, *params)
|
57
59
|
rescue RestClient::Unauthorized
|
@@ -60,6 +62,8 @@ module RSpotify
|
|
60
62
|
response = RestClient.send(verb, url, *params)
|
61
63
|
end
|
62
64
|
end
|
65
|
+
|
66
|
+
return response if raw_response
|
63
67
|
JSON.parse response unless response.empty?
|
64
68
|
end
|
65
69
|
|
data/lib/rspotify/playlist.rb
CHANGED
@@ -32,7 +32,9 @@ module RSpotify
|
|
32
32
|
options.each do |option, value|
|
33
33
|
url << "&#{option}=#{value}"
|
34
34
|
end
|
35
|
+
|
35
36
|
response = RSpotify.get(url)
|
37
|
+
return response if RSpotify.raw_response
|
36
38
|
response['playlists']['items'].map { |i| Playlist.new i }
|
37
39
|
end
|
38
40
|
|
@@ -52,7 +54,9 @@ module RSpotify
|
|
52
54
|
else
|
53
55
|
"users/#{user_id}/playlists/#{id}"
|
54
56
|
end
|
57
|
+
|
55
58
|
response = RSpotify.resolve_auth_request(user_id, url)
|
59
|
+
return response if RSpotify.raw_response
|
56
60
|
Playlist.new response
|
57
61
|
end
|
58
62
|
|
@@ -131,10 +135,15 @@ module RSpotify
|
|
131
135
|
url << "&position=#{position}" if position
|
132
136
|
|
133
137
|
response = User.oauth_post(@owner.id, url, {})
|
134
|
-
@snapshot_id = response['snapshot_id']
|
135
|
-
|
136
138
|
@total += tracks.size
|
137
139
|
@tracks_cache = nil
|
140
|
+
|
141
|
+
if RSpotify::raw_response
|
142
|
+
@snapshot_id = JSON.parse(response)['snapshot_id']
|
143
|
+
return response
|
144
|
+
end
|
145
|
+
|
146
|
+
@snapshot_id = json['snapshot_id']
|
138
147
|
tracks
|
139
148
|
end
|
140
149
|
|
@@ -219,13 +228,15 @@ module RSpotify
|
|
219
228
|
# playlist.tracks.first.name #=> "Main Theme from Star Wars - Instrumental"
|
220
229
|
def tracks(limit: 100, offset: 0)
|
221
230
|
last_track = offset + limit - 1
|
222
|
-
if @tracks_cache && last_track < 100
|
231
|
+
if @tracks_cache && last_track < 100 && !RSpotify.raw_response
|
223
232
|
return @tracks_cache[offset..last_track]
|
224
233
|
end
|
225
234
|
|
226
235
|
url = "#{@href}/tracks?limit=#{limit}&offset=#{offset}"
|
227
236
|
response = RSpotify.resolve_auth_request(@owner.id, url)
|
228
|
-
|
237
|
+
|
238
|
+
json = RSpotify.raw_response ? JSON.parse(response) : response
|
239
|
+
tracks = json['items'].select { |i| i['track'] }
|
229
240
|
|
230
241
|
@tracks_added_at = hash_for(tracks, 'added_at') do |added_at|
|
231
242
|
Time.parse added_at
|
@@ -241,6 +252,7 @@ module RSpotify
|
|
241
252
|
|
242
253
|
tracks.map! { |t| Track.new t['track'] }
|
243
254
|
@tracks_cache = tracks if limit == 100 && offset == 0
|
255
|
+
return response if RSpotify.raw_response
|
244
256
|
tracks
|
245
257
|
end
|
246
258
|
|
@@ -312,7 +324,9 @@ module RSpotify
|
|
312
324
|
}.merge options
|
313
325
|
|
314
326
|
response = User.oauth_put(@owner.id, url, data.to_json)
|
315
|
-
|
327
|
+
json = RSpotify.raw_response ? JSON.parse(response) : response
|
328
|
+
|
329
|
+
@snapshot_id = json['snapshot_id']
|
316
330
|
@tracks_cache = nil
|
317
331
|
self
|
318
332
|
end
|
data/lib/rspotify/user.rb
CHANGED
@@ -105,7 +105,10 @@ module RSpotify
|
|
105
105
|
def create_playlist!(name, public: true)
|
106
106
|
url = "users/#{@id}/playlists"
|
107
107
|
request_data = { name: name, public: public }.to_json
|
108
|
-
|
108
|
+
|
109
|
+
response = User.oauth_post(@id, url, request_data)
|
110
|
+
return response if RSpotify.raw_response
|
111
|
+
Playlist.new response
|
109
112
|
end
|
110
113
|
|
111
114
|
# Add the current user as a follower of one or more artists, other Spotify users or a playlist. Following artists or users require the *user-follow-modify*
|
@@ -164,6 +167,7 @@ module RSpotify
|
|
164
167
|
url << "&after=#{after}" if after
|
165
168
|
|
166
169
|
response = User.oauth_get(@id, url)
|
170
|
+
return response if RSpotify.raw_response
|
167
171
|
response["#{type}s"]['items'].map { |i| type_class.new i }
|
168
172
|
end
|
169
173
|
|
@@ -203,6 +207,7 @@ module RSpotify
|
|
203
207
|
def playlists(limit: 20, offset: 0)
|
204
208
|
url = "users/#{@id}/playlists?limit=#{limit}&offset=#{offset}"
|
205
209
|
response = RSpotify.resolve_auth_request(@id, url)
|
210
|
+
return response if RSpotify.raw_response
|
206
211
|
response['items'].map { |i| Playlist.new i }
|
207
212
|
end
|
208
213
|
|
@@ -256,12 +261,14 @@ module RSpotify
|
|
256
261
|
def saved_tracks(limit: 20, offset: 0)
|
257
262
|
url = "me/tracks?limit=#{limit}&offset=#{offset}"
|
258
263
|
response = User.oauth_get(@id, url)
|
264
|
+
json = RSpotify.raw_response ? JSON.parse(response) : response
|
259
265
|
|
260
|
-
tracks =
|
266
|
+
tracks = json['items'].select { |i| i['track'] }
|
261
267
|
@tracks_added_at = hash_for(tracks, 'added_at') do |added_at|
|
262
268
|
Time.parse added_at
|
263
269
|
end
|
264
270
|
|
271
|
+
return response if RSpotify.raw_response
|
265
272
|
tracks.map { |t| Track.new t['track'] }
|
266
273
|
end
|
267
274
|
|
data/lib/rspotify/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspotify
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.15.
|
4
|
+
version: 1.15.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Guilherme Sad
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-08-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: omniauth-oauth2
|