WebService::Lastfm

interact with the Last.fm API

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-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

The Camelia image is copyright 2009 by Larry Wall. "Raku" is trademark of the Yet Another Society. All rights reserved.