grooveshark 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/grooveshark.rb +1 -0
- data/lib/grooveshark/client.rb +19 -3
- data/lib/grooveshark/errors.rb +1 -0
- data/lib/grooveshark/playlist.rb +7 -7
- data/lib/grooveshark/request.rb +2 -1
- data/lib/grooveshark/song.rb +12 -10
- data/lib/grooveshark/user.rb +27 -10
- data/lib/grooveshark/utils.rb +26 -0
- metadata +6 -5
data/lib/grooveshark.rb
CHANGED
data/lib/grooveshark/client.rb
CHANGED
@@ -18,7 +18,6 @@ module Grooveshark
|
|
18
18
|
|
19
19
|
# Get communication token
|
20
20
|
def get_comm_token
|
21
|
-
puts "Grooveshark::Client.get_comm_token"
|
22
21
|
@comm_token = nil # so that it doesn't send a token
|
23
22
|
@comm_token = request('getCommunicationToken', {:secretKey => Digest::MD5.hexdigest(@session)}, true)
|
24
23
|
end
|
@@ -38,7 +37,24 @@ module Grooveshark
|
|
38
37
|
raise InvalidAuthentication, 'Wrong username or password!' if @user.id == 0
|
39
38
|
return @user
|
40
39
|
end
|
41
|
-
|
40
|
+
|
41
|
+
# Find user by ID
|
42
|
+
def get_user_by_id(id)
|
43
|
+
resp = request('getUserByID', {:userID => id})['user']
|
44
|
+
resp['username'].empty? ? nil : User.new(self, resp)
|
45
|
+
end
|
46
|
+
|
47
|
+
# Find user by username
|
48
|
+
def get_user_by_username(name)
|
49
|
+
resp = request('getUserByUsername', {:username => name})['user']
|
50
|
+
resp['username'].empty? ? nil : User.new(self, resp)
|
51
|
+
end
|
52
|
+
|
53
|
+
# Get recently active users
|
54
|
+
def recent_users
|
55
|
+
request('getRecentlyActiveUsers', {})['users'].map { |u| User.new(self, u) }
|
56
|
+
end
|
57
|
+
|
42
58
|
# Perform search request for query
|
43
59
|
def search(type, query)
|
44
60
|
results = request('getSearchResults', {:type => type, :query => query})
|
@@ -73,7 +89,7 @@ module Grooveshark
|
|
73
89
|
# Get song stream url by ID
|
74
90
|
def get_song_url_by_id(id)
|
75
91
|
resp = get_stream_auth_by_songid(id)
|
76
|
-
"http://#{resp['ip']}/stream.php?streamKey=#{resp['
|
92
|
+
"http://#{resp['ip']}/stream.php?streamKey=#{resp['stream_key']}"
|
77
93
|
end
|
78
94
|
|
79
95
|
# Get song stream
|
data/lib/grooveshark/errors.rb
CHANGED
data/lib/grooveshark/playlist.rb
CHANGED
@@ -9,18 +9,18 @@ module Grooveshark
|
|
9
9
|
@songs = []
|
10
10
|
|
11
11
|
if data
|
12
|
-
@id = data['
|
13
|
-
@name = data['
|
14
|
-
@about = data['
|
15
|
-
@picture = data['
|
16
|
-
@user_id = data['
|
17
|
-
@username = data['
|
12
|
+
@id = data['playlist_id']
|
13
|
+
@name = data['name']
|
14
|
+
@about = data['about']
|
15
|
+
@picture = data['picture']
|
16
|
+
@user_id = data['user_id'] || user_id
|
17
|
+
@username = data['user_name']
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
21
|
# Fetch playlist songs
|
22
22
|
def load_songs
|
23
|
-
@songs = @client.request('playlistGetSongs', :playlistID => @id)['
|
23
|
+
@songs = @client.request('playlistGetSongs', :playlistID => @id)['songs']
|
24
24
|
@songs.map! { |s| Song.new(s) }
|
25
25
|
end
|
26
26
|
|
data/lib/grooveshark/request.rb
CHANGED
@@ -12,7 +12,7 @@ module Grooveshark
|
|
12
12
|
}
|
13
13
|
|
14
14
|
# Perform API request
|
15
|
-
def request(method, params, secure=false)
|
15
|
+
def request(method, params={}, secure=false)
|
16
16
|
agent = METHOD_CLIENTS.key?(method) ? METHOD_CLIENTS[method] : CLIENT
|
17
17
|
url = "#{secure ? 'https' : 'http'}://#{API_BASE}/more.php?#{method}"
|
18
18
|
body = {
|
@@ -40,6 +40,7 @@ module Grooveshark
|
|
40
40
|
end
|
41
41
|
|
42
42
|
data = JSON.parse(data)
|
43
|
+
data = data.normalize if data.kind_of?(Hash)
|
43
44
|
return data['result'] unless data['fault']
|
44
45
|
end
|
45
46
|
end
|
data/lib/grooveshark/song.rb
CHANGED
@@ -8,23 +8,25 @@ module Grooveshark
|
|
8
8
|
def initialize(data=nil)
|
9
9
|
unless data.nil?
|
10
10
|
@data = data
|
11
|
-
@id = data['
|
12
|
-
@name = data['
|
13
|
-
@artist = data['
|
14
|
-
@artist_id = data['
|
15
|
-
@album = data['
|
16
|
-
@album_id = data['
|
17
|
-
@track = data['
|
18
|
-
@duration = data['
|
19
|
-
@artwork = data['
|
20
|
-
@playcount = data['
|
11
|
+
@id = data['song_id']
|
12
|
+
@name = data['song_name'] || data['name']
|
13
|
+
@artist = data['artist_name']
|
14
|
+
@artist_id = data['artist_id']
|
15
|
+
@album = data['album_name']
|
16
|
+
@album_id = data['album_id']
|
17
|
+
@track = data['track_num']
|
18
|
+
@duration = data['estimate_duration']
|
19
|
+
@artwork = data['cover_art_filename']
|
20
|
+
@playcount = data['song_plays']
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
+
# Presentable format
|
24
25
|
def to_s
|
25
26
|
[@id, @name, @artist].join(' - ')
|
26
27
|
end
|
27
28
|
|
29
|
+
# Hash export for API usage
|
28
30
|
def to_hash
|
29
31
|
{
|
30
32
|
'songID' => @id,
|
data/lib/grooveshark/user.rb
CHANGED
@@ -1,17 +1,33 @@
|
|
1
1
|
module Grooveshark
|
2
2
|
class User
|
3
|
-
attr_reader :id, :username, :premium, :data
|
3
|
+
attr_reader :id, :username, :email, :premium, :data
|
4
|
+
attr_reader :city, :country, :sex
|
4
5
|
attr_reader :playlists, :favorites
|
5
6
|
|
6
7
|
# Init user account object
|
7
8
|
def initialize(client, data=nil)
|
8
9
|
if data
|
9
|
-
@data
|
10
|
-
@id
|
10
|
+
@data = data
|
11
|
+
@id = data['user_id']
|
11
12
|
@username = data['username']
|
12
|
-
@premium
|
13
|
+
@premium = data['is_premium']
|
14
|
+
@email = data['email']
|
15
|
+
@city = data['city']
|
16
|
+
@country = data['country']
|
17
|
+
@sex = data['sex']
|
13
18
|
end
|
14
|
-
@client
|
19
|
+
@client = client
|
20
|
+
end
|
21
|
+
|
22
|
+
# Get user avatar URL
|
23
|
+
def avatar
|
24
|
+
"http://beta.grooveshark.com/static/userimages/#{@id}.jpg"
|
25
|
+
end
|
26
|
+
|
27
|
+
# Get user activity for the date (COMES AS RAW RESPONSE)
|
28
|
+
def feed(date=nil)
|
29
|
+
date = Time.now if date.nil?
|
30
|
+
@client.request('getProcessedUserFeedData', {:userID => @id, :day => date.strftime("%Y%m%d")})
|
15
31
|
end
|
16
32
|
|
17
33
|
# --------------------------------------------------------------------------
|
@@ -20,19 +36,20 @@ module Grooveshark
|
|
20
36
|
|
21
37
|
# Fetch songs from library
|
22
38
|
def library(page=0)
|
23
|
-
resp = @client.request('userGetSongsInLibrary', {:userID => @id, :page => page.to_s})['
|
39
|
+
resp = @client.request('userGetSongsInLibrary', {:userID => @id, :page => page.to_s})['songs']
|
24
40
|
resp.map { |s| Song.new(s) }
|
25
41
|
end
|
26
42
|
|
27
|
-
# Add songs to user library
|
43
|
+
# Add songs to user's library
|
28
44
|
def library_add(songs=[])
|
29
45
|
@client.request('userAddSongsToLibrary', {:songs => songs.map { |s| s.to_hash }})
|
30
46
|
end
|
31
47
|
|
32
48
|
# Remove song from user library
|
33
49
|
def library_remove(song)
|
34
|
-
|
35
|
-
|
50
|
+
raise ArgumentError, 'Song object required' unless song.kind_of?(Song)
|
51
|
+
req = {:userID => @id, :songID => song.id, :albumID => song.album_id, :artistID => song.artist_id}
|
52
|
+
@client.request('userRemoveSongFromLibrary', req)
|
36
53
|
end
|
37
54
|
|
38
55
|
# --------------------------------------------------------------------------
|
@@ -43,7 +60,7 @@ module Grooveshark
|
|
43
60
|
def playlists
|
44
61
|
return @playlists if @playlists
|
45
62
|
results = @client.request('userGetPlaylists', :userID => @id)
|
46
|
-
@playlists = results['
|
63
|
+
@playlists = results['playlists'].map { |list| Playlist.new(@client, list, @id) }
|
47
64
|
end
|
48
65
|
|
49
66
|
# Get playlist by ID
|
@@ -0,0 +1,26 @@
|
|
1
|
+
class String
|
2
|
+
def normalize_attribute
|
3
|
+
self.gsub(/^.*::/, "").
|
4
|
+
gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
|
5
|
+
gsub(/([a-z\d])([A-Z])/,'\1_\2').
|
6
|
+
downcase
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
class Hash
|
11
|
+
def normalize
|
12
|
+
h = {}
|
13
|
+
self.each_pair do |k,v|
|
14
|
+
attr = k.to_s.normalize_attribute
|
15
|
+
case v
|
16
|
+
when Hash
|
17
|
+
h[attr] = v.normalize
|
18
|
+
when Array
|
19
|
+
h[attr] = v.map { |o| o.kind_of?(Hash) ? o.normalize : o }
|
20
|
+
else
|
21
|
+
h[attr] = v
|
22
|
+
end
|
23
|
+
end
|
24
|
+
h
|
25
|
+
end
|
26
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: grooveshark
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 2
|
9
|
+
- 0
|
10
|
+
version: 0.2.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Dan Sosedoff
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-01-
|
18
|
+
date: 2011-01-18 00:00:00 -06:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -60,6 +60,7 @@ extra_rdoc_files: []
|
|
60
60
|
|
61
61
|
files:
|
62
62
|
- lib/grooveshark.rb
|
63
|
+
- lib/grooveshark/utils.rb
|
63
64
|
- lib/grooveshark/client.rb
|
64
65
|
- lib/grooveshark/errors.rb
|
65
66
|
- lib/grooveshark/playlist.rb
|