NAME
WebService::Lastfm - interact with Last.fm's API
SYNOPSIS
my $lastfm = WebService::Lastfm.new(:api-key<1234>, :api-secret<music>);
# Read request
say $lastfm.request('user.getInfo', :user<avuserow>);
# Update now playing
say $lastfm.write('track.updateNowPlaying',
:sk<SECRET KEY>,
:artist("Alan Parsons Project"),
:track<Time>,
:duration<360>,
);
DESCRIPTION
Bindings for Last.fm's API using the JSON format (instead of their default
XML). You must register for their API to get an API key and API secret.
METHODS
new($api-key, $api-secret)
Standard new method. All parameters are optional, but the API key is needed for
all known requests, and the secret is needed for write methods.
request($method, *%params)
Make an unsigned GET request, used for read-only operations.
write($method, *%params)
Make a signed POST request, used for writing operations, the most famous of
which is "scrobbling" (track.scrobble).
EXCEPTIONS
X::WebService::Lastfm is thrown on any error responses, with the decoded error
message from Last.fm. Check the method's documentation (or the API
documentation overall) for the meaning of the code.
CAVEATS
- No packaged tests -- testing things that require API keys is nontrivial
- The assumption about requests being either GET/unsigned or POST/signed may
not be true, in which case more methods may be needed.
- Undertested in general
TODO
- Switch to HTTP::UserAgent, which needs work to implement this
- Add tests somehow
- Example scripts. Ideas include a history exporter and a CLI scrobbler
- Optional caching mode
- Some sort of pagination helper for some API calls
REQUIREMENTS
- Rakudo Perl 6
- LWP::Simple
- JSON::Tiny
- URI::Encode
- Digest::MD5
SEE ALSO
Last.fm's API documentation