WebService::Audioscrobbler::Track - An object-oriented interface to the Audioscrobbler WebService API


WebService-Audioscrobbler documentation Contained in the WebService-Audioscrobbler distribution.

Index


Code Index:

NAME

Top

WebService::Audioscrobbler::Track - An object-oriented interface to the Audioscrobbler WebService API

SYNOPSIS

Top

This module implements an object oriented abstraction of a track within the Audioscrobbler database.

    use WebService::Audioscrobbler::Track;

    my $ws = WebService::Audioscrobbler->new;

    # get a track object for the track titled 'bar' by 'foo'
    my $track = $ws->track('foo', 'bar');

    # retrieves the track's tags
    my @tags = $track->tags;

    # prints url for viewing aditional tag info
    print $track->url;

    # prints the tag's artist name
    print $track->artist->name;

This module inherits from WebService::Audioscrobbler::Base.

FIELDS

Top

artist

The track's performing artist.

name =head2 title

The name (title) of a given track.

mbid

MusicBrainz ID as provided by the Audioscrobbler database.

url

URL for aditional info about the track.

METHODS

Top

new($artist, $title, $data_fetcher)

new(\%fields)

Creates a new object using either the given $artist and $title or the \%fields hashref. The data fetcher object is a mandatory parameter and must be provided either as the second parameter or inside the \%fields hashref.

tags

Retrieves the track's top tags as available on Audioscrobbler's database.

Returns either a list of tags or a reference to an array of tags when called in list context or scalar context, respectively. The tags are returned as WebService::Audioscrobbler::Tag objects by default.

resource_path

Returns the URL from which other URLs used for fetching track info will be derived from.

AUTHOR

Top

Nilson Santos Figueiredo Júnior, <nilsonsfj at cpan.org>

COPYRIGHT & LICENSE

Top


WebService-Audioscrobbler documentation Contained in the WebService-Audioscrobbler distribution.
package WebService::Audioscrobbler::Track;
use warnings;
use strict;
use CLASS;

use base 'WebService::Audioscrobbler::Base';

our $VERSION = '0.07';

# postfix related accessors
CLASS->mk_classaccessor("base_resource_path"  => "track");

# requiring stuff
CLASS->tags_class->require or die($@);

# object accessors
CLASS->mk_accessors(qw/artist name mbid url streamable/);

*title = \&name;

sub new {
    my $class = shift;
    my ($artist_or_fields, $title, $data_fetcher) = @_;

    my $self = $class->SUPER::new( 
        ref $artist_or_fields eq 'HASH' ? 
            $artist_or_fields : { artist => $artist_or_fields, name => $title, data_fetcher => $data_fetcher } 
    );

    $class->croak("No data fetcher provided")
        unless $self->data_fetcher;

    return $self;
}

sub tracks {
    shift->croak("Audioscrobbler doesn't provide data regarding tracks which are related to other tracks");
}

sub artists {
    shift->croak("Audioscrobbler doesn't provide data regarding artists related to specific tracks");
}

sub resource_path {
    my $self = shift;
    $self->uri_builder( $self->artist->name, $self->name );
}

1; # End of WebService::Audioscrobbler::Track