
Net::LastFM::Submission - simple Perl interface to the Last.fm Submissions Protocol (v1.2.1)

use Net::LastFM::Submission;
my $submit = Net::LastFM::Submission->new(
'user' => 'XXX',
'password' => 'YYY',
);
$submit->handshake;
$submit->submit(
'artist' => 'Artist name',
'title' => 'Track title',
'time' => time - 10*60, # 10 minutes ago
);
$submit->now_playing(
'artist' => 'Artist name',
'title' => 'Track title',
);

The module provides a simple Perl interface to the Last.fm Submissions Protocol (current version is 1.2.1).
The Last.fm Submissions Protocol is designed for the submission of now-playing and recent historical track data to Last.fm user profiles (aka 'Scrobbling').
http://www.lastfm.ru/api/submissions

This is a constructor for Net::LastFM::Submission object. It takes list of parameters or hashref parameter.
# list
my $submit = Net::LastFM::Submission->new(
'user' => 'XXX',
'password' => 'YYY',
);
# hashref
my $submit = Net::LastFM::Submission->new({
'user' => 'XXX',
'password' => 'YYY',
});
This is a list of support parameters:
The name of the Last.FM user. Required.
The password of the Last.FM user. Required for Standard authentication only. It is used for generate authentication token, see section 1.2 http://www.lastfm.ru/api/submissions#1.2.
The API key from your Web Services account. Required for Web Services authentication only.
The API secret from your Web Services account. Required for Web Services authentication only. It is used for generate authentication token, see section 1.3 http://www.lastfm.ru/api/submissions#1.3.
The Web Services session key generated via the authentication protocol. Required for Web Services authentication only.
Is an identifier for the client. Optional. Default value is tst, see section 1.1 http://www.lastfm.ru/api/submissions#1.1.
Is the version of the client being used. Optional. Default value is 1.0.
Is an user agent. Optional. Default is LWP::UserAgent with timeout 10 seconds.
Is the encoding of data, module try to encode a data (artist/title/album) unless data is UTF-8. See <Encode>. Optional. Default value is cp1251.
The initial negotiation with the submissions server to establish authentication and connection details for the session. See http://www.lastfm.ru/api/submissions#handshake.
$submit->handshake;
If the handshake was successful, the returned hashref has the format:
{
'status' => 'OK',
'sid' => 'Session ID', # the scrobble session id, to be used in all following now-playing and submission requests
'url' => {
'np' => 'Now-Playing URL',
'sm' => 'Submission URL'
}
}
If the handshake was break, the returned hashref has the format:
{
'error' => 'BANNED/BADAUTH/BADTIME/FAILED',
'code' => '200/500', # code of status line response
'reason' => '...' # reason of error
}
Optional lightweight notification of now-playing data at the start of the track for realtime information purposes. See http://www.lastfm.ru/api/submissions#np.
It takes list of parameters or hashref parameter.
# list
$submit->now_playing(
'artist' => 'Artist name',
'title' => 'Track title',
);
# hashref
$submit->now_playing({
'artist' => 'Artist name',
'title' => 'Track title',
});
This is a list of support parameters:
The artist name. Required.
The track name. Required.
The album title, or an empty string if not known.
The length of the track in seconds, or an empty string if not known.
The position of the track on the album, or an empty string if not known.
The MusicBrainz Track ID, or an empty string if not known.
Is the encoding of data, module try to encode a data (artist/title/album) unless data is UTF-8. Optional. Default value is parameter enc of self object.
If the notification was successful, the returned hashref has the format:
{
'status' => 'OK',
}
If the notification was break, the returned hashref has the format:
{
'error' => 'ERROR/BADSESSION',
'code' => '200/500', # code of status line response
'reason' => '...' # reason of error
}
Submission of full track data at the end of the track for statistical purposes. See http://www.lastfm.ru/api/submissions#subs.
It takes list of parameters (information about one track) or list of hashref parameters (limit of Last.FM is 50).
# list
$submit->submit(
'artist' => 'Artist name',
'title' => 'Track title',
);
# hashref
$submit->submit(
grep { $_->{'source'} = 'R';1 }
{
'artist' => 'Artist name 1',
'title' => 'Track title 1',
'time' => time - 10*60,
}
{
'artist' => 'Artist name 2',
'title' => 'Track title 2',
}
);
This is a list of support parameters:
The artist name. Required.
The track name. Required.
The time the track started playing, in UNIX timestamp format. Optional. Default value is current time.
The source of the track. Optional. Default value is R.
A single character denoting the rating of the track. Empty if not applicable.
The length of the track in seconds. Required when the source is P, optional otherwise.
The album title, or an empty string if not known.
The position of the track on the album, or an empty string if not known.
The MusicBrainz Track ID, or an empty string if not known.
Is the encoding of data, module try to encode a data (artist/title/album) unless data is UTF-8. Optional. Default value is parameter enc of self object.
If the submit was successful, the returned hashref has the format:
{
'status' => 'OK',
}
If the submit was break, the returned hashref has the format:
{
'error' => 'ERROR/BADSESSION/FAILED',
'code' => '200/500', # code of status line response
'reason' => '...' # reason of error
}

Module supports debug mode.
BEGIN { $ENV{SUBMISSION_DEBUG}++ };
use Net::LastFM::Submission;

A simple interface to the Last.fm API. Moose-like interface. Very simple and powerful.
Perl interface to audioscrobbler.com/last.fm. Old interface for submit.
Module providing routines to submit songs to last.fm using 1.2 protocol. Use path to a track or Music::Tag or hashref. Very big :).

Anatoly Sharifulin, <sharifulin at gmail.com>

Please report any bugs or feature requests to bug-net-lastfm-submission at rt.cpan.org, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Net-LastFM-Submission. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

You can find documentation for this module with the perldoc command.
perldoc Net::LastFM::Submission
You can also look for information at:
http://rt.cpan.org/NoAuth/Bugs.html?Dist=Net-LastFM-Submission

Copyright 2009 Anatoly Sharifulin, all rights reserved.
This module is free software; you can redistribute it or modify it under the same terms as Perl itself.