rspotify 0.7.1 → 0.8.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 +52 -4
- data/lib/rspotify.rb +7 -5
- data/lib/rspotify/album.rb +4 -4
- data/lib/rspotify/artist.rb +4 -4
- data/lib/rspotify/base.rb +9 -4
- data/lib/rspotify/oauth.rb +19 -0
- data/lib/rspotify/track.rb +4 -4
- data/lib/rspotify/user.rb +21 -3
- data/lib/rspotify/version.rb +1 -1
- data/rspotify.gemspec +1 -0
- metadata +17 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 64b0804e1886e1ffa8bb5d5df377e8d25ddfeb50
|
4
|
+
data.tar.gz: 462a1211c106279de90490fa58ef1c7340122019
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b1d02142eacd40743e3681e7b87858f4390738e12a2fc3383f48dcf977ca705f985ac101195de3411f6627a609f308b523e787b54e9010910fadd09e9ad9526c
|
7
|
+
data.tar.gz: 4819abd8af5a198e89c4fce6f781d33c2051b25817f8f2122d50976e31b1d44017ef026dd9099bf574d4dbea331a69bd448174e8304569ee30e8459ce8196883
|
data/README.md
CHANGED
@@ -2,6 +2,12 @@
|
|
2
2
|
|
3
3
|
This is a ruby wrapper for the [new Spotify Web API](https://developer.spotify.com/web-api), released in June 17, 2014.
|
4
4
|
|
5
|
+
## Features
|
6
|
+
|
7
|
+
* [Full documentation](http://rdoc.info/github/guilhermesad/rspotify/master/frames)
|
8
|
+
* Full API Endpoint coverage
|
9
|
+
* OAuth and other authorization flows
|
10
|
+
|
5
11
|
## Installation
|
6
12
|
|
7
13
|
Add this line to your application's Gemfile:
|
@@ -97,13 +103,55 @@ RSpotify focuses on objects behaviour so you can forget the API and worry about
|
|
97
103
|
|
98
104
|
It is possible to write things like `playlist.tracks.sort_by(&:popularity).last.album` without having to think what API calls must be done. RSpotify fills the gaps for you.
|
99
105
|
|
100
|
-
|
106
|
+
Check the [documentation](http://rdoc.info/github/guilhermesad/rspotify/master/frames) for all attributes and methods of albums, artists, etc.
|
107
|
+
|
108
|
+
## Rails + OAuth
|
109
|
+
|
110
|
+
You'll may want your application to access an user's Spotify account.
|
111
|
+
|
112
|
+
For instance, suppose you want your app to create playlists for the user based on his taste, or to add a feature that syncs user's playlists with some external app.
|
113
|
+
|
114
|
+
If so, just add the following to `config/initializers/omniauth.rb` (Remember to [get your credentials](https://developer.spotify.com/my-applications))
|
115
|
+
|
116
|
+
```ruby
|
117
|
+
Rails.application.config.middleware.use OmniAuth::Builder do
|
118
|
+
provider :spotify, "<your_client_id>", "<your_client_secret>", scope: 'user-read-email playlist-modify'
|
119
|
+
end
|
120
|
+
```
|
121
|
+
|
122
|
+
You should replace the scope values for the ones your own app will require from the user. You can see the list of available scopes in [here](https://developer.spotify.com/web-api/using-scopes).
|
123
|
+
|
124
|
+
Then just make a link so the user can log in with his Spotify account:
|
101
125
|
|
102
|
-
|
126
|
+
```ruby
|
127
|
+
<%= link_to 'Sign in with Spotify', '/auth/spotify' %>
|
128
|
+
```
|
129
|
+
|
130
|
+
And create a route to receive the callback:
|
103
131
|
|
104
|
-
|
132
|
+
```ruby
|
133
|
+
# config/routes.rb
|
134
|
+
|
135
|
+
get '/auth/spotify/callback', to: 'users#spotify'
|
136
|
+
```
|
137
|
+
|
138
|
+
Remember you need to tell Spotify this address is white-listed. You can do this by adding it to the Redirect URIs list in your [application page](https://developer.spotify.com/my-applications). An example of Redirect URI would be http://localhost:3000/auth/spotify/callback.
|
139
|
+
|
140
|
+
Finally, create a new RSpotify User with the token received:
|
141
|
+
|
142
|
+
```ruby
|
143
|
+
class UsersController < ApplicationController
|
144
|
+
def spotify
|
145
|
+
spotify_user = RSpotify::User.new(request.env['omniauth.auth'])
|
146
|
+
# Now you can create playlists for the user and much more!
|
147
|
+
|
148
|
+
spotify_user.create_playlist!('my-awesome-playlist')
|
149
|
+
# Directly creates playlist in user's Spotify account
|
150
|
+
end
|
151
|
+
end
|
152
|
+
```
|
105
153
|
|
106
|
-
|
154
|
+
**Note**: You might also like to add `RSpotify::authenticate("<your_client_id>", "<your_client_secret>")` to your `config/application.rb`. This will allow extra calls to be made.
|
107
155
|
|
108
156
|
## Contributing
|
109
157
|
|
data/lib/rspotify.rb
CHANGED
@@ -1,14 +1,13 @@
|
|
1
|
-
require 'rspotify/version'
|
2
|
-
|
3
1
|
require 'base64'
|
4
2
|
require 'json'
|
5
3
|
require 'restclient'
|
6
4
|
|
7
5
|
module RSpotify
|
8
6
|
|
9
|
-
API_URI
|
10
|
-
|
11
|
-
|
7
|
+
API_URI = 'https://api.spotify.com/v1/'
|
8
|
+
AUTHORIZE_URI = 'https://accounts.spotify.com/authorize'
|
9
|
+
TOKEN_URI = 'https://accounts.spotify.com/api/token'
|
10
|
+
VERBS = %w(get post put delete)
|
12
11
|
|
13
12
|
autoload :Album, 'rspotify/album'
|
14
13
|
autoload :Artist, 'rspotify/artist'
|
@@ -40,3 +39,6 @@ module RSpotify
|
|
40
39
|
end
|
41
40
|
end
|
42
41
|
end
|
42
|
+
|
43
|
+
require 'rspotify/oauth'
|
44
|
+
require 'rspotify/version'
|
data/lib/rspotify/album.rb
CHANGED
@@ -15,7 +15,7 @@ module RSpotify
|
|
15
15
|
|
16
16
|
# Returns Album object(s) with id(s) provided
|
17
17
|
#
|
18
|
-
# @param ids [String, Array]
|
18
|
+
# @param ids [String, Array] Maximum: 20 IDs
|
19
19
|
# @return [Album, Array<Album>]
|
20
20
|
#
|
21
21
|
# @example
|
@@ -33,9 +33,9 @@ module RSpotify
|
|
33
33
|
|
34
34
|
# Returns array of Album objects matching the query, ordered by popularity
|
35
35
|
#
|
36
|
-
# @param query
|
37
|
-
# @param limit
|
38
|
-
# @param offset [Integer]
|
36
|
+
# @param query [String] The search query's keywords.
|
37
|
+
# @param limit [Integer] Maximum number of albums to return. Minimum: 1. Maximum: 50.
|
38
|
+
# @param offset [Integer] The index of the first album to return. Use with limit to get the next set of albums.
|
39
39
|
# @return [Array<Album>]
|
40
40
|
#
|
41
41
|
# @example
|
data/lib/rspotify/artist.rb
CHANGED
@@ -8,7 +8,7 @@ module RSpotify
|
|
8
8
|
|
9
9
|
# Returns Artist object(s) with id(s) provided
|
10
10
|
#
|
11
|
-
# @param ids [String, Array]
|
11
|
+
# @param ids [String, Array] Maximum: 50 IDs
|
12
12
|
# @return [Artist, Array<Artist>]
|
13
13
|
#
|
14
14
|
# @example
|
@@ -26,9 +26,9 @@ module RSpotify
|
|
26
26
|
|
27
27
|
# Returns array of Artist objects matching the query, ordered by popularity
|
28
28
|
#
|
29
|
-
# @param query
|
30
|
-
# @param limit
|
31
|
-
# @param offset [Integer]
|
29
|
+
# @param query [String] The search query's keywords.
|
30
|
+
# @param limit [Integer] Maximum number of artists to return. Minimum: 1. Maximum: 50.
|
31
|
+
# @param offset [Integer] The index of the first artist to return. Use with limit to get the next set of artists.
|
32
32
|
# @return [Array<Artist>]
|
33
33
|
#
|
34
34
|
# @example
|
data/lib/rspotify/base.rb
CHANGED
@@ -23,14 +23,19 @@ module RSpotify
|
|
23
23
|
# tracks.class #=> Array
|
24
24
|
# tracks.first.class #=> RSpotify::Track
|
25
25
|
def self.find(ids, type)
|
26
|
-
case ids
|
27
|
-
when
|
26
|
+
case ids
|
27
|
+
when Array
|
28
28
|
if type == 'user'
|
29
29
|
warn 'Spotify API does not support finding several users simultaneously'
|
30
30
|
return false
|
31
31
|
end
|
32
|
+
limit = (type == 'album' ? 20 : 50)
|
33
|
+
if ids.size > limit
|
34
|
+
warn "Too many ids requested. Maximum: #{limit} for #{type}"
|
35
|
+
return false
|
36
|
+
end
|
32
37
|
find_many(ids, type)
|
33
|
-
when
|
38
|
+
when String
|
34
39
|
id = ids
|
35
40
|
find_one(id, type)
|
36
41
|
end
|
@@ -74,7 +79,7 @@ module RSpotify
|
|
74
79
|
# albums.size #=> 10
|
75
80
|
def self.search(query, type, limit = 20, offset = 0)
|
76
81
|
if limit < 1 || limit > 50
|
77
|
-
warn
|
82
|
+
warn 'Limit must be between 1 and 50'
|
78
83
|
return false
|
79
84
|
end
|
80
85
|
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'omniauth-oauth2'
|
2
|
+
|
3
|
+
module OmniAuth
|
4
|
+
module Strategies
|
5
|
+
class Spotify < OmniAuth::Strategies::OAuth2
|
6
|
+
option :name, 'spotify'
|
7
|
+
|
8
|
+
option :client_options, {
|
9
|
+
site: RSpotify::API_URI,
|
10
|
+
authorize_url: RSpotify::AUTHORIZE_URI,
|
11
|
+
token_url: RSpotify::TOKEN_URI,
|
12
|
+
}
|
13
|
+
|
14
|
+
info do
|
15
|
+
access_token.get('me').parsed
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/lib/rspotify/track.rb
CHANGED
@@ -15,7 +15,7 @@ module RSpotify
|
|
15
15
|
|
16
16
|
# Returns Track object(s) with id(s) provided
|
17
17
|
#
|
18
|
-
# @param ids [String, Array]
|
18
|
+
# @param ids [String, Array] Maximum: 50 IDs
|
19
19
|
# @return [Track, Array<Track>]
|
20
20
|
#
|
21
21
|
# @example
|
@@ -33,9 +33,9 @@ module RSpotify
|
|
33
33
|
|
34
34
|
# Returns array of Track objects matching the query, ordered by popularity
|
35
35
|
#
|
36
|
-
# @param query
|
37
|
-
# @param limit
|
38
|
-
# @param offset [Integer]
|
36
|
+
# @param query [String] The search query's keywords.
|
37
|
+
# @param limit [Integer] Maximum number of tracks to return. Minimum: 1. Maximum: 50.
|
38
|
+
# @param offset [Integer] The index of the first track to return. Use with limit to get the next set of tracks.
|
39
39
|
# @return [Array<Track>]
|
40
40
|
#
|
41
41
|
# @example
|
data/lib/rspotify/user.rb
CHANGED
@@ -4,7 +4,7 @@ module RSpotify
|
|
4
4
|
|
5
5
|
# Returns User object with id provided
|
6
6
|
#
|
7
|
-
# @param
|
7
|
+
# @param id [String]
|
8
8
|
# @return [User]
|
9
9
|
#
|
10
10
|
# @example
|
@@ -22,9 +22,28 @@ module RSpotify
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def initialize(options = {})
|
25
|
+
@credentials ||= options['credentials']
|
26
|
+
options = options['info'] if options['info']
|
27
|
+
|
28
|
+
@country ||= options['country']
|
29
|
+
@display_name ||= options['display_name']
|
30
|
+
@email ||= options['email']
|
31
|
+
@images ||= options['images']
|
32
|
+
@product ||= options['product']
|
33
|
+
|
25
34
|
super(options)
|
26
35
|
end
|
27
36
|
|
37
|
+
def create_playlist!(name, public: true)
|
38
|
+
headers = {
|
39
|
+
'Authorization' => "Bearer #{@credentials['token']}",
|
40
|
+
'Content-Type' => 'application/json'
|
41
|
+
}
|
42
|
+
request_data = %Q({"name":"#{name}", "public":#{public}})
|
43
|
+
|
44
|
+
RSpotify.post("users/#{@id}/playlists", request_data, headers)
|
45
|
+
end
|
46
|
+
|
28
47
|
# Returns all playlists from user
|
29
48
|
#
|
30
49
|
# @return [Array<Playlist>]
|
@@ -35,9 +54,8 @@ module RSpotify
|
|
35
54
|
# playlists.first.class #=> RSpotify::Playlist
|
36
55
|
# playlists.first.name #=> "Movie Soundtrack Masterpieces"
|
37
56
|
def playlists
|
38
|
-
return @playlists unless @playlists.nil?
|
39
57
|
playlists = RSpotify.auth_get("users/#{@id}/playlists")['items']
|
40
|
-
|
58
|
+
playlists.map { |p| Playlist.new p }
|
41
59
|
end
|
42
60
|
end
|
43
61
|
end
|
data/lib/rspotify/version.rb
CHANGED
data/rspotify.gemspec
CHANGED
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspotify
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Guilherme Sad
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-07-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: omniauth-oauth2
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.1'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.1'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: rest_client
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -112,6 +126,7 @@ files:
|
|
112
126
|
- lib/rspotify/album.rb
|
113
127
|
- lib/rspotify/artist.rb
|
114
128
|
- lib/rspotify/base.rb
|
129
|
+
- lib/rspotify/oauth.rb
|
115
130
|
- lib/rspotify/playlist.rb
|
116
131
|
- lib/rspotify/track.rb
|
117
132
|
- lib/rspotify/user.rb
|