• Stars
    star
    123
  • Rank 284,286 (Top 6 %)
  • Language
    Ruby
  • License
    MIT License
  • Created over 13 years ago
  • Updated about 9 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Grooveshark.com unofficial API library

Grooveshark

GROOVESHARK.COM HAS BEEN TERMINATED ON APRIL 30, 2015

Unofficial grooveshark API ruby library gives your ability to search and stream songs, manage playlists, media library and favorites. API was discovered using http proxy and does not pretend to be always valid due to website API changes.

Build Status Gem

Installation

Install gem from rubygems:

gem install grooveshark

Or add this line to your Gemfile:

gem "grooveshark"

And install bundle:

bundle install

Usage

First, you'll need to create a session. Grooveshark's session is a regular PHP session with expiration date of 7 days.

require 'grooveshark'

client = Grooveshark::Client.new

Now we can find some songs:

songs = client.search_songs('Nirvana')

songs.each do |s|
  s.id          # Song ID
  s.name        # Song name
  s.artist      # Song artist name
  s.album       # Song album name
  s.duration    # Song duration in seconds (not always present, 0 by default)
end

We got collection of songs. Check Song object for additional attributes. In order to stream song we need to get the authorization

song = songs.first
url = client.get_song_url(song)

Given url is valid only for current session and cannot be shared or stored permanently. Also, it probably violates terms of service.

User Authentication

To get your user account you need to provide username and password. If username or password is not valid InvalidAuthentication exception will be raised.

client = Grooveshark::Client.new

begin
  user = client.login('username', 'password')
rescue InvalidAuthentication
  puts "Oooops! Wrong username or password"
end

Playlists and favorites

Get all user playlists:

user.playlists.each do |p|
  p.id          # Playlist ID
  p.name        # Playlist name
  p.about       # Playlist description (empty by default)
end

Get user playlist:

playlist = user.get_playlist(PLAYLIST_ID)

Get all playlist songs:

playlist = user.get_playlist(ID)
playlist.load_songs
songs = playlist.songs

Rename existing playlist:

playlist = user.get_playlist(ID)
playlist.rename('NEW NAME', 'NEW DESCRIPTION')

Delete existing user playlist

playlist = user.get_playlist(ID)
playlist.delete

Create a new playlist. First parameter is mandatory, description and songs are optional. For songs you can provide array of Song objects or array of IDs.

songs = client.search_songs('Joe Satriani')
p = user.create_playlist('NAME', 'DESCRIPTION', songs)

Get user favorite songs:

songs = user.favorites

Add song to favorites:

user.add_favorite(song) # Song object or song ID

Remove song from favorites:

user.remove_favorite(song) # Song object or song ID

Broadcasts

Get top broadcasts:

client.top_broadcasts.each do |b|
  b.id                # Broadcast ID
  b.name              # Broadcast Name
end

To reload the current status of the broadcast (e.g. currently playing song, next song, etc.), call reload_status method:

broadcast.reload_status

Get the current and next song for a broadcast:

current_song = broadcast.active_song
next_song = broadcast.next_song

Check whether the broadcast is currently playing:

if broadcast.is_playing
  # Do something e.g. get the currently playing song.
end

User library

Get all songs from library as a collection of Song objects

songs = user.library

Add songs to library:

songs = client.search_songs('The Beatles')
user.library_add(songs)

Remove selected songs from library. Unfortunately mass-deletion is not supported by Grooveshark API. You will have to delete each song via separate method call.

song = user.library.first # Lest pick a first song in the library
user.library_remove(song)

Explore community

Get all recently active users:

client.recent_users

Find user by ID:

client.get_user_by_id('ID')

Find user by username:

client.get_user_by_username('username')

Fetch recent user activity:

user = client.get_user_by_username('user')
user.feed

Testing

Run test suite:

bundle exec rake

Contact

License

MIT License

Copyright (c) 2011-2015 Dan Sosedoff [email protected]

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

More Repositories

1

pgweb

Cross-platform client for PostgreSQL databases
Go
8,042
star
2

capistrano-unicorn

Capistrano integration for Unicorn! - NEEDS MAINTAINER
Ruby
403
star
3

gitkit

Git toolkit for Go: Smart HTTP server, SSH server, hook receiver
Go
260
star
4

goodreads

Goodreads API wrapper
Ruby
240
star
5

lunchy-go

OSX Launch Manager
Go
180
star
6

opentable

Unofficial OpenTable API
Ruby
147
star
7

slack-notify

Slack.com notifier
Ruby
94
star
8

musicbot

Play music from Slack: Raspberry Pi + Mopidy + Spotify
Go
93
star
9

lxc-ruby

Linux containers (LXC) ruby wrapper
Ruby
89
star
10

xml-sitemap

Easy XML sitemap generation for Ruby/Rails/Merb/Sinatra applications
Ruby
56
star
11

munin-ruby

Munin node client for Ruby
Ruby
41
star
12

omxremote

Web frontend and API for Raspberry Pi omxplayer media player
Go
38
star
13

ansible-vault-go

Go package to interact with Ansible Vault files
Go
37
star
14

wireguard-aws-gateway

Wireguard VPN gateway or AWS
HCL
29
star
15

mail_extract

Strip email message body from quotes and signatures
Ruby
25
star
16

net-ssh-session

Shell session for Net::SSH connections
Ruby
25
star
17

travis-github

Travis CI builds tab in Github
JavaScript
24
star
18

cloudwatchlogs

Web interface for AWS CloudWatch Logs
Go
23
star
19

rackspace-clouddns

Rackspace CloudDNS Ruby Wrapper
Ruby
20
star
20

github-events

Listen to Github repository events in real time
Go
18
star
21

shuttle

Minimalistic deployment tool
Ruby
17
star
22

heroku-vegeta

Using Heroku as a distributed stress-testing platform
Go
16
star
23

nginx2influxdb

Stream Nginx logs directly into InfluxDB
Go
14
star
24

rack-revision

Rack middleware for add code revision header X-REVISION
Ruby
14
star
25

pastie

Simplified API to Pastie.org
Ruby
12
star
26

markup-editor

Web-based markup editor with on-the-fly preview
JavaScript
12
star
27

app-config

Flexible and simple in-application settings for Rails/Sinatra applications
Ruby
11
star
28

docker-router

Reverse proxy for docker containers with automatic SSL
Go
11
star
29

envd

Serve application environment variables over HTTP
Go
11
star
30

bundle_cache

Cache bundle to Amazon S3
Go
10
star
31

docify

Render your favorite markup (RDoc, Markdown, Textile) into nice-looking html.
Ruby
10
star
32

apple_push

Sinatra-based API to send Apple Push Notifications
Ruby
10
star
33

proxie

HTTP proxy server with sqlite-powered storage and web interface for debugging.
Ruby
9
star
34

lxc-server

Web API for LXC container management
Ruby
9
star
35

cxml

Ruby implementation of cXML communication protocol
Ruby
9
star
36

fakemail

Sendmail replacement to debug email output, layouts, etc.
Ruby
8
star
37

hipache-api

HTTP interface for Hipache
Go
8
star
38

munin-plugins

Some useful munin plugins
Ruby
8
star
39

wg-registry

User and device self-service portal for WireGuard
Go
8
star
40

unfuddle-cli

Console-based tool to manage Unfuddle repositories
Ruby
8
star
41

cron2

Cron2 is cron scheduler on steroids: HCL, Docker, Logs, Notifications, Etc
Go
7
star
42

grit-http

Sinatra based API for Git repositories, powered by Grit
Ruby
7
star
43

zeroconf-beacon

Spawn a simple zeroconf service over the local network
Go
7
star
44

lxc-tools

Set of tools to work with LXC containers
Ruby
6
star
45

xtract

Simple data extraction tool
Go
6
star
46

go-craigslist

Craigslist.org wrapper for Go
HTML
6
star
47

snatch

Remote database downloader based on SSH
Ruby
6
star
48

docker-gateway

Stupid simple reverse proxy for Docker
Go
6
star
49

rack-norris

X-Chuck-Norris header with a joke in your Rack app!
Ruby
5
star
50

reeder

Experimental RSS reader
CSS
5
star
51

actions

Repo for Github Actions
Shell
4
star
52

howdy

Experimental YAML-based service monitoring thingy.
Go
4
star
53

unfuddle-services

Sinatra based hook server for Unfuddle. Similar to github-services.
Ruby
3
star
54

rscale

Image scaling wrapper based on ImageMagick console utils
Ruby
3
star
55

dep-cache

Parallel dependency cache helper for running in CI environments
Go
3
star
56

gitvault

Your personal git hosting
Ruby
3
star
57

arduino-rc-receiver

Script to troubleshoot RC receiver with Arduino
Arduino
3
star
58

dotfiles

Development environment configuration, scripts, etc
Ruby
3
star
59

shelly

Remote bash runner over HTTP
Go
2
star
60

debugserver

Debugging server for any console-less applications
Ruby
2
star
61

munin-dashboard

Sinatra based API and GUI for munin nodes
Ruby
2
star
62

ws

Websocket debugging tool
Go
2
star
63

spellcheck

Text spellcheck/correction based on Redis key-value storage server
Ruby
2
star
64

capistrano-payload

Capistrano plugin that delivers JSON payload to the specified URL
Ruby
2
star
65

dependenci

Client for http://dependenci.com
Ruby
2
star
66

irc2pusher

Send IRC messages to a Pusher channel
2
star
67

sqlembed

Parse out *.sql files and embed the queries as consts
Go
2
star
68

app-detective

Detect application type
Ruby
2
star
69

debugclient-php

DebugServer PHP client library
PHP
2
star
70

terminal_helpers

Various helpers for console-based applications
Ruby
2
star
71

crash_hook

Exception notifications via HTTP
Ruby
2
star
72

fpm-builder

Helpers for building packages with fpm
Shell
1
star
73

git-branches

A small tool to show current status of the git repository
Go
1
star
74

arrow_payments

ArrowPayments gateway for Ruby
Ruby
1
star
75

crash_server

Simple web application for crash_hook
Ruby
1
star
76

docker-sandbox

Docker quickstart and playground
1
star
77

bootstrap_navigation

Navigation helper for bootstap html/css framework
Ruby
1
star
78

git-handler

Control git flow
Ruby
1
star
79

server-configs

Set of various server configs and scripts
1
star
80

reckless

Ruby client to Chicago's records store Reckless.com
Ruby
1
star
81

helm-wireguard

Wireguard Helm Chart
Go
1
star
82

docker-http-proxy

Go
1
star
83

shuttle-go

Shuttle is a minimalisting application deployment tool
Go
1
star
84

heroku-addon

Heroku Addon SDK for Go
Go
1
star
85

dummy-service

This a service dummy for random testing
Ruby
1
star
86

dockerfiles

Collection of Dockerfiles
Shell
1
star