spotify-search 0.0.2
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 +15 -0
- data/lib/spotify/api/base.rb +20 -0
- data/lib/spotify/api/lookup.rb +46 -0
- data/lib/spotify/api/search.rb +32 -0
- data/lib/spotify/api.rb +3 -0
- data/lib/spotify/client.rb +18 -0
- data/lib/spotify/resources/base.rb +16 -0
- data/lib/spotify/resources/info.rb +39 -0
- data/lib/spotify/resources/lookup/album/base.rb +41 -0
- data/lib/spotify/resources/lookup/album/details.rb +17 -0
- data/lib/spotify/resources/lookup/artist/base.rb +21 -0
- data/lib/spotify/resources/lookup/artist/details.rb +17 -0
- data/lib/spotify/resources/lookup/track/base.rb +50 -0
- data/lib/spotify/resources/search/album.rb +40 -0
- data/lib/spotify/resources/search/artist.rb +26 -0
- data/lib/spotify/resources/search/track.rb +51 -0
- data/lib/spotify/resources.rb +12 -0
- data/lib/spotify.rb +4 -0
- metadata +59 -0
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
NDFlNTE4NGVmNmFlZjUzZTllZjg4NzdlNDMyZTk2NTk5YTI3NTVmMg==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
ODdhNjRiMjgyOGU4M2FkOWU1ZTdiMDA3YWE0NGVkMjY5MTg2YWE5ZA==
|
7
|
+
!binary "U0hBNTEy":
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
ZmU0ZGQ5YzQyZjc0NzlkMzBhMTA1ODUwNzExMmIwOTYwYWM3YjIyNzg5NWJm
|
10
|
+
YWRlOTgwNmU1YjYxMjg3MjI4NWI4NGMxODE2NDk2ZWM2MTdhMTBjNWFhYmFj
|
11
|
+
N2U0YWM0Y2QwMWM2NWEwYjg1YjZkN2ViYjE2M2JkMmViMDZmYmI=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
OTI2MmFlMjViMjRlZmM1MWVmZTZiNDU5OGJhMGRiYTk5Nzc4MmVjMzYxZThi
|
14
|
+
YzQ0NWY3NjhmZjI2NThjYjY4NGU0MDAyYzQ3ZjI3NTRiMmM2ZGYyM2JhNTUx
|
15
|
+
NmE0Mjg2NWQ3MmNiZjUwMTEyNDhjNThlNDFhZmZkMWJiNjYwNDY=
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Spotify
|
2
|
+
module API
|
3
|
+
class Base
|
4
|
+
|
5
|
+
def initialize
|
6
|
+
raise(NotImplementedError, "Abstract class not meant to be instantiated directly.")
|
7
|
+
end
|
8
|
+
|
9
|
+
protected
|
10
|
+
def search(type, params)
|
11
|
+
request(type, params)
|
12
|
+
end
|
13
|
+
|
14
|
+
def request(base, params = {})
|
15
|
+
JSON.parse(RestClient.get("#{@uri}#{base}.json", {:params => params}).body)
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'rest_client'
|
3
|
+
|
4
|
+
module Spotify
|
5
|
+
module API
|
6
|
+
class Lookup < Spotify::API::Base
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
@uri = "http://ws.spotify.com/lookup/1/"
|
10
|
+
end
|
11
|
+
|
12
|
+
def artist(uri, level=nil)
|
13
|
+
params = level == nil ? {} : { :extras => 'albumdetail' }
|
14
|
+
results = search(nil, params.merge(:uri => "spotify:artist:#{uri}"))
|
15
|
+
|
16
|
+
case level
|
17
|
+
when :detailed
|
18
|
+
artist = Resources::Lookup::ArtistDetailed.new(results['artist'])
|
19
|
+
else
|
20
|
+
artist = Resources::Lookup::ArtistBase.new(results['artist'])
|
21
|
+
end
|
22
|
+
Resources::Base.new(results['info'], artist)
|
23
|
+
end
|
24
|
+
|
25
|
+
def album(uri, level=nil)
|
26
|
+
params = level == nil ? {} : { :extras => 'trackdetail' }
|
27
|
+
results = search(nil, params.merge(:uri => "spotify:album:#{uri}"))
|
28
|
+
|
29
|
+
case level
|
30
|
+
when :detailed
|
31
|
+
album = Resources::Lookup::AlbumDetailed.new(results['album'])
|
32
|
+
else
|
33
|
+
album = Resources::Lookup::AlbumBase.new(results['album'])
|
34
|
+
end
|
35
|
+
Resources::Base.new(results['info'], album)
|
36
|
+
end
|
37
|
+
|
38
|
+
def track(uri)
|
39
|
+
results = search(nil, :uri => "spotify:track:#{uri}")
|
40
|
+
track = Resources::Lookup::TrackBase.new(results['track'])
|
41
|
+
Resources::Base.new(results['info'], track)
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'rest_client'
|
3
|
+
|
4
|
+
module Spotify
|
5
|
+
module API
|
6
|
+
class Search < Spotify::API::Base
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
@uri = "http://ws.spotify.com/search/1/"
|
10
|
+
end
|
11
|
+
|
12
|
+
def artists(query, params = {})
|
13
|
+
results = search('artist', params.merge(:q => query))
|
14
|
+
artists = results['artists'].map { |artist| Resources::Search::Artist.new(artist) }
|
15
|
+
Resources::Base.new(results['info'], artists)
|
16
|
+
end
|
17
|
+
|
18
|
+
def tracks(query, params = {})
|
19
|
+
results = search('track', params.merge(:q => query))
|
20
|
+
tracks = results['tracks'].map { |track| Resources::Search::Track.new(track) }
|
21
|
+
Resources::Base.new(results['info'], tracks)
|
22
|
+
end
|
23
|
+
|
24
|
+
def albums(query, params = {})
|
25
|
+
results = search('album', params.merge(:q => query))
|
26
|
+
albums = results['albums'].map { |album| Resources::Search::Album.new(album) }
|
27
|
+
Resources::Base.new(results['info'], albums)
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/lib/spotify/api.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
module Spotify
|
2
|
+
module Resources
|
3
|
+
|
4
|
+
class Info
|
5
|
+
|
6
|
+
attr_reader :num_results, :limit, :offset, :query, :type, :page
|
7
|
+
|
8
|
+
def initialize(info)
|
9
|
+
@info = info
|
10
|
+
end
|
11
|
+
|
12
|
+
def num_results
|
13
|
+
@info['num_results']
|
14
|
+
end
|
15
|
+
|
16
|
+
def limit
|
17
|
+
@info['limit']
|
18
|
+
end
|
19
|
+
|
20
|
+
def offset
|
21
|
+
@info['offset']
|
22
|
+
end
|
23
|
+
|
24
|
+
def query
|
25
|
+
@info['query']
|
26
|
+
end
|
27
|
+
|
28
|
+
def type
|
29
|
+
@info['type']
|
30
|
+
end
|
31
|
+
|
32
|
+
def page
|
33
|
+
@info['page']
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Spotify
|
2
|
+
module Resources
|
3
|
+
module Lookup
|
4
|
+
class AlbumBase
|
5
|
+
|
6
|
+
def initialize(body)
|
7
|
+
@body = body
|
8
|
+
end
|
9
|
+
|
10
|
+
def artist_id
|
11
|
+
@body['artist-id']
|
12
|
+
end
|
13
|
+
|
14
|
+
def name
|
15
|
+
@body['name']
|
16
|
+
end
|
17
|
+
|
18
|
+
def artist
|
19
|
+
@body['artist']
|
20
|
+
end
|
21
|
+
|
22
|
+
def external_ids
|
23
|
+
@body['external-ids']
|
24
|
+
end
|
25
|
+
|
26
|
+
def released
|
27
|
+
@body['released']
|
28
|
+
end
|
29
|
+
|
30
|
+
def href
|
31
|
+
@body['href']
|
32
|
+
end
|
33
|
+
|
34
|
+
def availability
|
35
|
+
@body['availability']
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Spotify
|
2
|
+
module Resources
|
3
|
+
module Lookup
|
4
|
+
class AlbumDetails < Spotify::Resources::Lookup::AlbumBase
|
5
|
+
|
6
|
+
def initialize(body)
|
7
|
+
@body = body
|
8
|
+
end
|
9
|
+
|
10
|
+
def tracks
|
11
|
+
@body['tracks'].map { |track| Spotify::Resources::Lookup::TrackBase.new(track) }
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Spotify
|
2
|
+
module Resources
|
3
|
+
module Lookup
|
4
|
+
class ArtistDetailed < Spotify::Resources::Lookup::ArtistBase
|
5
|
+
|
6
|
+
def initialize(body)
|
7
|
+
@body = body
|
8
|
+
end
|
9
|
+
|
10
|
+
def albums
|
11
|
+
@body['albums'].map { |album| Spotify::Resources::Lookup::AlbumBase.new(album['album']) }
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module Spotify
|
2
|
+
module Resources
|
3
|
+
module Lookup
|
4
|
+
class TrackBase
|
5
|
+
|
6
|
+
# http://ws.spotify.com/lookup/1/.json?uri=spotify:track:6NmXV4o6bmp704aPGyTVVG
|
7
|
+
# and
|
8
|
+
# http://ws.spotify.com/lookup/1/.json?uri=spotify:album:6G9fHYDCoyEErUkHrFYfs4&extras=trackdetail
|
9
|
+
#
|
10
|
+
# do not returning the same 'track' object - We're leaving out 'disc-number', 'available', and
|
11
|
+
# 'availability.'
|
12
|
+
#
|
13
|
+
# TODO - Redefine the architecture where the correct values can be returned.
|
14
|
+
|
15
|
+
def initialize(body)
|
16
|
+
@body = body
|
17
|
+
end
|
18
|
+
|
19
|
+
def track_number
|
20
|
+
@body['track-number']
|
21
|
+
end
|
22
|
+
|
23
|
+
def popularity
|
24
|
+
@body['popularity']
|
25
|
+
end
|
26
|
+
|
27
|
+
def external_ids
|
28
|
+
@body['external-ids']
|
29
|
+
end
|
30
|
+
|
31
|
+
def length
|
32
|
+
@body['length']
|
33
|
+
end
|
34
|
+
|
35
|
+
def href
|
36
|
+
@body['href']
|
37
|
+
end
|
38
|
+
|
39
|
+
def artists
|
40
|
+
@body['artists'].map { |artist| Spotify::Resources::Lookup::ArtistBase.new(artist) }
|
41
|
+
end
|
42
|
+
|
43
|
+
def name
|
44
|
+
@body['name']
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Spotify
|
2
|
+
module Resources
|
3
|
+
module Search
|
4
|
+
|
5
|
+
class Album
|
6
|
+
|
7
|
+
def initialize(body)
|
8
|
+
@body = body
|
9
|
+
end
|
10
|
+
|
11
|
+
def name
|
12
|
+
@body['name']
|
13
|
+
end
|
14
|
+
|
15
|
+
def popularity
|
16
|
+
@body['popularity']
|
17
|
+
end
|
18
|
+
|
19
|
+
def external_ids
|
20
|
+
@body['external-ids']
|
21
|
+
end
|
22
|
+
|
23
|
+
def href
|
24
|
+
@body['href']
|
25
|
+
end
|
26
|
+
|
27
|
+
def artists
|
28
|
+
# Has no popularity!
|
29
|
+
@body['artists'].map { |a| Spotify::Resources::Search::Artist.new(a)}
|
30
|
+
end
|
31
|
+
|
32
|
+
def availability
|
33
|
+
@body['availability']
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Spotify
|
2
|
+
module Resources
|
3
|
+
module Search
|
4
|
+
|
5
|
+
class Artist
|
6
|
+
|
7
|
+
def initialize(body)
|
8
|
+
@body = body
|
9
|
+
end
|
10
|
+
|
11
|
+
def href
|
12
|
+
@body['href']
|
13
|
+
end
|
14
|
+
|
15
|
+
def name
|
16
|
+
@body['name']
|
17
|
+
end
|
18
|
+
|
19
|
+
def popularity
|
20
|
+
@body['popularity']
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module Spotify
|
2
|
+
module Resources
|
3
|
+
module Search
|
4
|
+
|
5
|
+
class Track
|
6
|
+
|
7
|
+
def initialize(body)
|
8
|
+
@body = body
|
9
|
+
end
|
10
|
+
|
11
|
+
def album
|
12
|
+
# Might want to default to lookup here.
|
13
|
+
# No released
|
14
|
+
Spotify::Resources::Search::Album.new(@body['album'])
|
15
|
+
end
|
16
|
+
|
17
|
+
def name
|
18
|
+
@body['name']
|
19
|
+
end
|
20
|
+
|
21
|
+
def popularity
|
22
|
+
@body['popularity']
|
23
|
+
end
|
24
|
+
|
25
|
+
def external_ids
|
26
|
+
# External ID resource?
|
27
|
+
@body['external-ids']
|
28
|
+
end
|
29
|
+
|
30
|
+
def length
|
31
|
+
@body['length']
|
32
|
+
end
|
33
|
+
|
34
|
+
def href
|
35
|
+
@body['href']
|
36
|
+
end
|
37
|
+
|
38
|
+
def artists
|
39
|
+
# Has href and name?
|
40
|
+
@body['artists'].map { |a| Spotify::Resources::Search::Artist.new(a)}
|
41
|
+
end
|
42
|
+
|
43
|
+
def trac_number
|
44
|
+
@body['trac-number']
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'spotify/resources/base'
|
2
|
+
require 'spotify/resources/info'
|
3
|
+
|
4
|
+
require 'spotify/resources/search/album'
|
5
|
+
require 'spotify/resources/search/artist'
|
6
|
+
require 'spotify/resources/search/track'
|
7
|
+
|
8
|
+
require 'spotify/resources/lookup/album/base'
|
9
|
+
require 'spotify/resources/lookup/album/details'
|
10
|
+
require 'spotify/resources/lookup/artist/base'
|
11
|
+
require 'spotify/resources/lookup/artist/details'
|
12
|
+
require 'spotify/resources/lookup/track/base'
|
data/lib/spotify.rb
ADDED
metadata
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: spotify-search
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- TJ Biddle
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-08-04 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: Spotify metadata API Wrapper.
|
14
|
+
email: biddle.thomas@gmail.com
|
15
|
+
executables: []
|
16
|
+
extensions: []
|
17
|
+
extra_rdoc_files: []
|
18
|
+
files:
|
19
|
+
- lib/spotify/api/base.rb
|
20
|
+
- lib/spotify/api/lookup.rb
|
21
|
+
- lib/spotify/api/search.rb
|
22
|
+
- lib/spotify/api.rb
|
23
|
+
- lib/spotify/client.rb
|
24
|
+
- lib/spotify/resources/base.rb
|
25
|
+
- lib/spotify/resources/info.rb
|
26
|
+
- lib/spotify/resources/lookup/album/base.rb
|
27
|
+
- lib/spotify/resources/lookup/album/details.rb
|
28
|
+
- lib/spotify/resources/lookup/artist/base.rb
|
29
|
+
- lib/spotify/resources/lookup/artist/details.rb
|
30
|
+
- lib/spotify/resources/lookup/track/base.rb
|
31
|
+
- lib/spotify/resources/search/album.rb
|
32
|
+
- lib/spotify/resources/search/artist.rb
|
33
|
+
- lib/spotify/resources/search/track.rb
|
34
|
+
- lib/spotify/resources.rb
|
35
|
+
- lib/spotify.rb
|
36
|
+
homepage: https://github.com/thomasbiddle/spotify-search
|
37
|
+
licenses: []
|
38
|
+
metadata: {}
|
39
|
+
post_install_message:
|
40
|
+
rdoc_options: []
|
41
|
+
require_paths:
|
42
|
+
- lib
|
43
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ! '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
49
|
+
requirements:
|
50
|
+
- - ! '>='
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '0'
|
53
|
+
requirements: []
|
54
|
+
rubyforge_project:
|
55
|
+
rubygems_version: 2.0.6
|
56
|
+
signing_key:
|
57
|
+
specification_version: 4
|
58
|
+
summary: Spotify metadata API Wrapper
|
59
|
+
test_files: []
|