spotify-client 0.0.8 → 0.0.9
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/lib/spotify_client.rb +64 -47
- data/lib/spotify_client/version.rb +3 -0
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5f7f3be2065733eda7e92a6c7135a7fe2d494fd6
|
4
|
+
data.tar.gz: 9dda413fd8b39c1b97ff4e62a8047beaf6a3a32e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4c9378f4277bf916cb5fe7b833f403c1a33a096b38dccda0d57dcd81ca12722f5a71108c2bbda95f7dddc2e3b3f944fe0e4e21ad49ae86bc47613b1bde7b7df1
|
7
|
+
data.tar.gz: bdd1777d36989b2233bbb499912ed23238dd7e56c319b2e4f3fcefcf82886c480a410cacf32db7eab2b9a7e4b5d74ce1e4532666a11231dc7ae18a865e120490
|
data/lib/spotify_client.rb
CHANGED
@@ -22,11 +22,11 @@ module Spotify
|
|
22
22
|
@retries = config[:retries] || 0
|
23
23
|
@read_timeout = config[:read_timeout] || 10
|
24
24
|
@write_timeout = config[:write_timeout] || 10
|
25
|
-
@connection = Excon.new(BASE_URI, :
|
25
|
+
@connection = Excon.new(BASE_URI, persistent: config[:persistent] || false)
|
26
26
|
end
|
27
27
|
|
28
28
|
def inspect
|
29
|
-
vars =
|
29
|
+
vars = instance_variables.map { |v| "#{v}=#{instance_variable_get(v).inspect}" }.join(', ')
|
30
30
|
"<#{self.class}: #{vars}>"
|
31
31
|
end
|
32
32
|
|
@@ -37,7 +37,11 @@ module Spotify
|
|
37
37
|
end
|
38
38
|
|
39
39
|
def me
|
40
|
-
run(:get,
|
40
|
+
run(:get, '/v1/me', [200])
|
41
|
+
end
|
42
|
+
|
43
|
+
def me_tracks
|
44
|
+
run(:get, '/v1/me/tracks', [200])
|
41
45
|
end
|
42
46
|
|
43
47
|
def user(user_id)
|
@@ -53,16 +57,16 @@ module Spotify
|
|
53
57
|
end
|
54
58
|
|
55
59
|
def user_playlist_tracks(user_id, playlist_id, params = {})
|
56
|
-
tracks = {
|
60
|
+
tracks = { 'items' => [] }
|
57
61
|
path = "/v1/users/#{user_id}/playlists/#{playlist_id}/tracks"
|
58
62
|
|
59
63
|
while path
|
60
64
|
response = run(:get, path, [200], params)
|
61
|
-
tracks[
|
65
|
+
tracks['items'].concat(response.delete('items'))
|
62
66
|
tracks.merge!(response)
|
63
67
|
|
64
|
-
path = if response[
|
65
|
-
response[
|
68
|
+
path = if response['next']
|
69
|
+
response['next'].gsub(BASE_URI, '')
|
66
70
|
else
|
67
71
|
nil
|
68
72
|
end
|
@@ -76,7 +80,7 @@ module Spotify
|
|
76
80
|
# Requires playlist-modify-public for a public playlist.
|
77
81
|
# Requires playlist-modify-private for a private playlist.
|
78
82
|
def create_user_playlist(user_id, name, is_public = true)
|
79
|
-
run(:post, "/v1/users/#{user_id}/playlists", [201], JSON.dump(
|
83
|
+
run(:post, "/v1/users/#{user_id}/playlists", [201], JSON.dump(name: name, public: is_public), false)
|
80
84
|
end
|
81
85
|
|
82
86
|
# Add an Array of track uris to an existing playlist.
|
@@ -86,9 +90,9 @@ module Spotify
|
|
86
90
|
#
|
87
91
|
# client.add_user_tracks_to_playlist('1181346016', '7i3thJWDtmX04dJhFwYb0x', %w(spotify:track:4iV5W9uYEdYUVa79Axb7Rh spotify:track:2lzEz3A3XIFyhMDqzMdcss))
|
88
92
|
def add_user_tracks_to_playlist(user_id, playlist_id, uris = [], position = nil)
|
89
|
-
params = { :
|
93
|
+
params = { uris: Array.wrap(uris)[0..99].join(',') }
|
90
94
|
if position
|
91
|
-
params.merge!(:
|
95
|
+
params.merge!(position: position)
|
92
96
|
end
|
93
97
|
run(:post, "/v1/users/#{user_id}/playlists/#{playlist_id}/tracks", [201], params, false)
|
94
98
|
end
|
@@ -97,14 +101,14 @@ module Spotify
|
|
97
101
|
#
|
98
102
|
# client.remove_user_tracks_from_playlist('1181346016', '7i3thJWDtmX04dJhFwYb0x', [{ uri: spotify:track:4iV5W9uYEdYUVa79Axb7Rh, positions: [0]}])
|
99
103
|
def remove_user_tracks_from_playlist(user_id, playlist_id, tracks)
|
100
|
-
run(:delete, "/v1/users/#{user_id}/playlists/#{playlist_id}/tracks", [200], JSON.dump(
|
104
|
+
run(:delete, "/v1/users/#{user_id}/playlists/#{playlist_id}/tracks", [200], JSON.dump(tracks: tracks))
|
101
105
|
end
|
102
106
|
|
103
107
|
# Replaces all occurrences of tracks with what's in the playlist
|
104
108
|
#
|
105
109
|
# client.replace_user_tracks_in_playlist('1181346016', '7i3thJWDtmX04dJhFwYb0x', %w(spotify:track:4iV5W9uYEdYUVa79Axb7Rh spotify:track:2lzEz3A3XIFyhMDqzMdcss))
|
106
110
|
def replace_user_tracks_in_playlist(user_id, playlist_id, tracks)
|
107
|
-
run(:put, "/v1/users/#{user_id}/playlists/#{playlist_id}/tracks", [201], JSON.dump(
|
111
|
+
run(:put, "/v1/users/#{user_id}/playlists/#{playlist_id}/tracks", [201], JSON.dump(uris: tracks))
|
108
112
|
end
|
109
113
|
|
110
114
|
# Removes all tracks in playlist
|
@@ -123,8 +127,8 @@ module Spotify
|
|
123
127
|
end
|
124
128
|
|
125
129
|
def albums(album_ids)
|
126
|
-
params = { :
|
127
|
-
run(:get,
|
130
|
+
params = { ids: Array.wrap(album_ids).join(',') }
|
131
|
+
run(:get, '/v1/albums', [200], params)
|
128
132
|
end
|
129
133
|
|
130
134
|
def track(track_id)
|
@@ -132,8 +136,8 @@ module Spotify
|
|
132
136
|
end
|
133
137
|
|
134
138
|
def tracks(track_ids)
|
135
|
-
params = { :
|
136
|
-
run(:get,
|
139
|
+
params = { ids: Array.wrap(track_ids).join(',') }
|
140
|
+
run(:get, '/v1/tracks', [200], params)
|
137
141
|
end
|
138
142
|
|
139
143
|
def artist(artist_id)
|
@@ -141,8 +145,8 @@ module Spotify
|
|
141
145
|
end
|
142
146
|
|
143
147
|
def artists(artist_ids)
|
144
|
-
params = { :
|
145
|
-
run(:get,
|
148
|
+
params = { ids: Array.wrap(artist_ids).join(',') }
|
149
|
+
run(:get, '/v1/tracks', [200], params)
|
146
150
|
end
|
147
151
|
|
148
152
|
def artist_albums(artist_id)
|
@@ -151,57 +155,70 @@ module Spotify
|
|
151
155
|
|
152
156
|
def search(entity, term)
|
153
157
|
unless [:artist, :album, :track].include?(entity.to_sym)
|
154
|
-
|
158
|
+
fail(ImplementationError, "entity needs to be either artist, album or track, got: #{entity}")
|
155
159
|
end
|
156
|
-
run(:get,
|
160
|
+
run(:get, '/v1/search', [200], q: term.to_s, type: entity)
|
157
161
|
end
|
158
162
|
|
159
|
-
# Get Spotify catalog information about an artist
|
163
|
+
# Get Spotify catalog information about an artist's top 10 tracks by country.
|
160
164
|
#
|
161
165
|
# +country_id+ is required. An ISO 3166-1 alpha-2 country code.
|
162
166
|
def artist_top_tracks(artist_id, country_id)
|
163
|
-
run(:get, "/v1/artists/#{artist_id}/top-tracks", [200],
|
167
|
+
run(:get, "/v1/artists/#{artist_id}/top-tracks", [200], country: country_id)
|
164
168
|
end
|
165
|
-
|
169
|
+
|
166
170
|
def related_artists(artist_id)
|
167
|
-
run(:get, "/v1/artists/#{artist_id}/related-artists", [200])
|
171
|
+
run(:get, "/v1/artists/#{artist_id}/related-artists", [200])
|
172
|
+
end
|
173
|
+
|
174
|
+
# Follow artists or users
|
175
|
+
#
|
176
|
+
# client.follow('artist', ['0BvkDsjIUla7X0k6CSWh1I'])
|
177
|
+
def follow(type, ids)
|
178
|
+
params = { type: type, ids: Array.wrap(ids).join(',') }
|
179
|
+
run(:put, "/v1/me/following", [204], params)
|
180
|
+
end
|
181
|
+
|
182
|
+
# Follow a playlist
|
183
|
+
#
|
184
|
+
# client.follow_playlist('lukebryan', '0obRj9nNySESpFelMCLSya')
|
185
|
+
def follow_playlist(user_id, playlist_id, is_public = true)
|
186
|
+
run(:put, "/v1/users/#{user_id}/playlists/#{playlist_id}/followers", [200], { public: is_public })
|
168
187
|
end
|
169
188
|
|
170
189
|
protected
|
171
190
|
|
172
191
|
def run(verb, path, expected_status_codes, params = {}, idempotent = true)
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
false
|
180
|
-
end
|
192
|
+
run!(verb, path, expected_status_codes, params, idempotent)
|
193
|
+
rescue Error => e
|
194
|
+
if @raise_errors
|
195
|
+
raise e
|
196
|
+
else
|
197
|
+
false
|
181
198
|
end
|
182
199
|
end
|
183
200
|
|
184
201
|
def run!(verb, path, expected_status_codes, params_or_body = nil, idempotent = true)
|
185
202
|
packet = {
|
186
|
-
:
|
187
|
-
:
|
188
|
-
:
|
189
|
-
:
|
190
|
-
:
|
191
|
-
:
|
192
|
-
:
|
193
|
-
:
|
203
|
+
idempotent: idempotent,
|
204
|
+
expects: expected_status_codes,
|
205
|
+
method: verb,
|
206
|
+
path: path,
|
207
|
+
read_timeout: @read_timeout,
|
208
|
+
write_timeout: @write_timeout,
|
209
|
+
retry_limit: @retries,
|
210
|
+
headers: {
|
194
211
|
'Content-Type' => 'application/json',
|
195
212
|
'User-Agent' => 'Spotify Ruby Client'
|
196
213
|
}
|
197
214
|
}
|
198
215
|
if params_or_body.is_a?(Hash)
|
199
|
-
packet.merge!(:
|
216
|
+
packet.merge!(query: params_or_body)
|
200
217
|
else
|
201
|
-
packet.merge!(:
|
218
|
+
packet.merge!(body: params_or_body)
|
202
219
|
end
|
203
220
|
|
204
|
-
if
|
221
|
+
if !@access_token.nil? && @access_token != ''
|
205
222
|
packet[:headers].merge!('Authorization' => "Bearer #{@access_token}")
|
206
223
|
end
|
207
224
|
|
@@ -220,10 +237,10 @@ module Spotify
|
|
220
237
|
rescue Excon::Errors::Error => exception
|
221
238
|
# Catch all others errors. Samples:
|
222
239
|
#
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
240
|
+
# <Excon::Errors::SocketError: Connection refused - connect(2) (Errno::ECONNREFUSED)>
|
241
|
+
# <Excon::Errors::InternalServerError: Expected([200, 204, 404]) <=> Actual(500 InternalServerError)>
|
242
|
+
# <Excon::Errors::Timeout: read timeout reached>
|
243
|
+
# <Excon::Errors::BadGateway: Expected([200]) <=> Actual(502 Bad Gateway)>
|
227
244
|
raise(HTTPError, "Error: #{exception.message}")
|
228
245
|
end
|
229
246
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spotify-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Claudio Poli
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-06-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: excon
|
@@ -64,6 +64,7 @@ files:
|
|
64
64
|
- lib/spotify/utils.rb
|
65
65
|
- lib/spotify/version.rb
|
66
66
|
- lib/spotify_client.rb
|
67
|
+
- lib/spotify_client/version.rb
|
67
68
|
homepage: https://github.com/icoretech/spotify-client
|
68
69
|
licenses: []
|
69
70
|
metadata: {}
|
@@ -83,9 +84,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
83
84
|
version: '0'
|
84
85
|
requirements: []
|
85
86
|
rubyforge_project: "[none]"
|
86
|
-
rubygems_version: 2.
|
87
|
+
rubygems_version: 2.4.6
|
87
88
|
signing_key:
|
88
89
|
specification_version: 4
|
89
90
|
summary: Ruby client for the Spotify Web API
|
90
91
|
test_files: []
|
91
|
-
has_rdoc:
|