WiMP
Ruby bindings for WiMP. The library uses WiMPs internal RPC API. Take a look at the FAQ for frequently asked questions and how to port this library to any language using thrift.
Installation
$ gem install wimp
Usage
Keep in mind that you need premium acount for this to work.
WiMP.configure do |config|
config.username = "email@example.com"
config.password = "my-password"
end
WiMP::Track
Search
tracks = WiMP::Track.search(query, {
limit: 10
})
WiMP::Playlist
Note that you can only read and update your own playlists, not someone else's.
Find a playlist
playlist = WiMP::Playlist.find(uuid)
Create a playlist
playlist = WiMP::Playlist.create(title)
Add tracks to playlist
status = playlist.add_tracks(tracks, {
start_position: 1
})
Add tracks to playlist using Track#id
status = playlist.add_tracks_by_id(track_ids, {
start_position: 1
})
Remove tracks from playlist
status = playlist.remove_tracks_by_indices(tracks)
Containers
WiMP::Track
- title String
- album_id Integer
- duration Integer
- id Integer
- popularity Integer
- artist WiMP::SimpleArtist
- url String
WiMP::Playlist
- count Integer
- url String
- tracks Array< WiMP::Track >
- uuid String
- id Integer
WiMP::SimpleArtist
- id Integer
- name String
- url String
FAQ
Can I port this library to language X?
Probably. WiMP uses thrift behind the scene,
which means that code for C++, C#, Erlang, Haskell, Java, Objective
C/Cocoa, OCaml, Perl, PHP, Python, and Squeak can be generated. Take a look
at the resources/thrift
folder and the Rakefile
file for more
information on how this could be done.
Here is a good thrift tutorial that explains the basics.
Can I stream music using this library?
The WiMP API has support for streaming, but I've chosen not to include those methods.
Where is the rest of the implementation?
Take a look at the lib/gen
folder for more, undocumented code. Code
exists for all 50 some methods in the thrift directory, but only a few are
ported to a Ruby-friendly syntax and documented above. You're more than
welcome to help me migrate all these methods.
Some methods from the offical API isn't ported to thrift. You'll find a list
of these in the resources/skipped-methods.md
file.
I'm get an Thrift::ApplicationException
error, why?
The Thrift::ApplicationException
error indicates that the returning data
from WiMP isn't what we think it is. It's usually caused by invalid data being passed
to thrift.
In other words; check the data being passed from this library. Is it correct?
Notes
- Not all methods existing in the offical API are documented above, but
the code for all of them exists. Navigate the
lib
folder for more information. - The first request to the API will be slower than the rest. That's because a session is created.
- None of the credentials in this project are my own. They're only created to be used in the specs. They might therefore already be expired when you read this.
- This library has been created for educational purposes. You shouldn't use it without first consulting WiMP.
Contributing
- Fork it ( http://github.com/oleander/wimp-rb/fork )
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request