Jah'Spotify is a Java wrapper built on top of the Spotify native APIs (libspotify) exposed both as an HTML5 UI and a JSON REST based API
Currently supports:
- retrieving library (all user playlists/folders)
- retrieve a playlist
- retrieve a folder (including/excluding sub-folders and playlists)
- retrieve an album
- retrieve a track
- retrieve an image
- add tracks to a queue (single queue currently supported)
- play tracks
- pause/skip functions
- dynamic playlist using echonest apis
- basic historical track list view
- very basic android app for remote control
- JSON reset based API
- web-ui based on JQuery Mobile
In addition, all the above functions are accessible over a JSON based RESTful API (provided by the services and web modules).
Note: Currently, JahSpotify relies on existing playlists created from Spotify - there is currently no option to add playlists/folders using the API or UI - it is being worked on ;)
Jah'Spotify supports the Linux and Windows versions of libspotify (see below for more details on building on Windows).
The following prerequisites are required in order to build Jah'Spotify
- libspotify
- Spotify API key
- OpenAL
To build the sources first check them out from git
git clone git://github.com/johanlindquist/jahspotify.git
cd jahspotify
Next, you need to download and install libspotify & request an API key from Spotify. This can be done on the libspotify website or via your OS package provider (Homebrew for OS X for example)
Generate the key and download the C code version of it. Place this in a file called AppKey.h in the
native/src/main/native/inc
directory. You may want to place some #ifndef APPKEY statements in this to prevent linking problems.
Ensure that your JAVA_HOME environment variable points to the JDK (v1.6.x) you want to use.
export JAVA_HOME=<path/to/your/jdk>
Finally, execute the Maven build
mvn clean install
- Download MinGW and put the bin folder in your PATH.
- Download the OpenAL SDK from and copy the include folder to the MinGW include folder and rename it to AL
- The native pom.xml has a reference to a local LibSpotify folder. Change this to your own Spotify folder. You'll get an error that the api.h file can't be found if you don't.
- Add a reference to your OpenAL installation folder
You can find the OpenAL SDK at:
http://connect.creativelabs.com/developer/Wiki/OpenAL%20SDK%20for%20Windows.aspx
Next, define the following environment properties:
JAHSPOTIFY_SPOTIFY_DIR=c:\path\to\spotify\installation\LibSpotify\
JAHSPOTIFY_OPENAL_DIR=c:\path\to\openal\installation\OpenAL 1.1 SDK\
To build, simply execute maven build
mvn clean install
Depending on your
Jah'Spotity will run both from within Maven (using Jetty) and in a web container such as Tomcat.
Jah'Spotify uses MongoDB for storing the historical statistics and tracks played. This can be downloaded from MongoDB. As long as MongoDB is running when Jah'Spotify is started (and the connection does not require credentials), it should work.
TDB
For windows, you will need to download a few more dependencies:
- pthreads (http://sources.redhat.com/pthreads-win32/). pthreadGC2.dll needs to be in your path.
- Install the OpenAL SDK for Windows
To run up the Jah'Spotify with Maven/Jetty
mvn jetty:run -Djahspotify.spotify.username=<your username> -Djahspotify.spotify.password=<your password>
NOTE: The username and password can also be specified in your Maven settings.xml
TBD
TBD
To access the HTML5 UI of JahSpotify, simply point your browser to:
http://localhost:8080/jahspotify/index.html
Once running, Jah'Spotify exposes it's RESTful API
http://localhost:8080/jahspotify/system/status
All media can be retrieved using the Media Controller URL
http://localhost:8080/jahspotify/media/<URI>
Where the URI is any of the URIs specified below, in the more specialized controllers:
Library retrieval
http://localhost:8080/jahspotify/library/
Folder retrieval
http://localhost:8080/jahspotify/folder/jahspotify:folder:9594c66fa67e43ca
Playlist retrieval
http://localhost:8080/jahspotify/playlist/spotify:user:dummy-user:playlist:0s8KIfDTmZz5zupnkqF6FO
Album retrieval
http://localhost:8080/jahspotify/album/spotify:album:3PogVmhNucYNfyywZvTd7F
Artist retrieval
http://localhost:8080/jahspotify/artist/spotify:artist:7dGJo4pcD2V6oG8kP0tJRR
Track retrieval
http://localhost:8080/jahspotify/track/spotify:track:7mliwEVqxIuwLmHdTXlBrx
Image retrieval
http://localhost:8080/jahspotify/image/spotify:image:e99e74261d120029fecfde36ab1c07a0eb99e54d
Adding a track to the play queue
Retrieving play queue
http://localhost:8080/jahspotify/queue/jahspotify:queue:default
Searching
http://localhost:8080/jahspotify/search/?query=alika&numTracks=1
Skip to next track in queue
http://localhost:8080/jahspotify/player/skip
Pause playback
http://localhost:8080/jahspotify/player/pause
Resume play
http://localhost:8080/jahspotify/player/resume
Stop play
http://localhost:8080/jahspotify/player/stop
Play
http://localhost:8080/jahspotify/player/play
Seek
http://localhost:8080/jahspotify/player/seek?offset=43
Volume Up
http://localhost:8080/jahspotify/player/volume-up
Volume Down
http://localhost:8080/jahspotify/player/volume-down
There are other URLs - please examine the web module for them.
-
android
provides a simple app for browsing playlists and queueing tracks
-
api
provides the basic operations for interacting with Jah'Spotify (and in turn libspotify)
-
native
contains all native & JNI code interacting with libspotify
-
native-jar
contains wrapper code to load libjahspotify from a jar
-
services
provides all Jah'Spotify Spring services
-
web
provides the RESTful API (json based)
-
web-client
provides java client for interacting with the RESTful API
-
web-common
provides the java beans which are serialized over the RESTful API
-
storage
provides basic storage implementations for caching media objects (tracks/images/etc)
-
executable-war
provides a single, executable Jah'Spotify war file
For now, there is nothing concrete setup but try the issues page on github, contacting me on github. Also found at times on freenode - #jahspotify. Or try Twitter @nahojkap
All Jah'Spotify code is released under the Apache 2.0 license
Niels vd Weem
Thanks!
Yourkit is kindly supporting open source projects with its full-featured Java Profiler.
YourKit, LLC is the creator of innovative and intelligent tools for profiling Java and .NET applications.
Take a look at YourKit's leading software products: YourKit Java Profiler and YourKit .NET Profiler.