diff options
Diffstat (limited to 'lib/Net/Amazon/Property/Music.pm')
| -rw-r--r-- | lib/Net/Amazon/Property/Music.pm | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/lib/Net/Amazon/Property/Music.pm b/lib/Net/Amazon/Property/Music.pm new file mode 100644 index 0000000..59807be --- /dev/null +++ b/lib/Net/Amazon/Property/Music.pm @@ -0,0 +1,161 @@ +###################################################################### +package Net::Amazon::Property::Music; +###################################################################### +use warnings; +use strict; +use base qw(Net::Amazon::Property); + +__PACKAGE__->make_accessor($_) for qw(album label media nummedia upc); +__PACKAGE__->make_array_accessor($_) for qw(artists tracks); + +################################################## +sub new { +################################################## + my($class, %options) = @_; + + my $self = $class->SUPER::new(%options); + bless $self, $class; # Bless into this class + + if(exists $options{xmlref}) { + $self->init_via_xmlref($options{xmlref}); + } + + return $self; +} + +################################################## +sub artist { +################################################## + my($self, $nameref) = @_; + + # Only return the first artist + return ($self->artists($nameref))[0]; +} + +################################################## +sub init_via_xmlref { +################################################## + my($self, $xmlref) = @_; + + $self->SUPER::init_via_xmlref($xmlref); + + $self->artists($xmlref->{Artists}->{Artist}); + $self->tracks($xmlref->{Tracks}->{Track}); + $self->album($xmlref->{ProductName}); + $self->label($xmlref->{Manufacturer}); + $self->upc($xmlref->{Upc}); + $self->media($xmlref->{Media}); + $self->nummedia($xmlref->{NumMedia}); +} + +################################################## +sub as_string { +################################################## + my($self) = @_; + + return join('/', $self->artists) . ", " . + '"' . $self->album . '"' . ", " . + $self->year . ", " . + $self->OurPrice . ", " . + $self->Asin; +} + +1; + +__END__ + +=head1 NAME + +Net::Amazon::Property::Music - Class for pop CDs on amazon.com + +=head1 SYNOPSIS + + use Net::Amazon; + + # ... + + if($resp->is_success()) { + for my $prop ($resp->properties) { + print join("/", $_->artists(), " ", + $_->album(), " ", + $_->label(), " ", + $_->year(), " "; + $_->upc(), " "; + $_->media(), " "; + $_->nummedia(), "\n"; + } + +=head1 DESCRIPTION + +C<Net::Amazon::Property::Music> is derived from +C<Net::Amazon::Property> and on top of the all-purpose +methods the base class provides, it offers specialized accessors for +popular music CD parameters. + +=head2 METHODS + +=over 4 + +=item artists() + +Returns a list of the CD's artists. There's also a C<artist()> method +which just returns the first artist. + +=item tracks() + +Returns a list of the CD's track titles. + +=item label() + +Returns the music label as a string. + +=item album() + +Returns the CD's title as a string. + +=item upc() + +Returns the CD's UPC as a string. + +=item media() + +Returns the CD's media type as a string. + +=item nummedia() + +Returns the CD's number of media (number of discs) as a string. +Amazon doesn't always send this back, so if you get undef assume it +is 1. + +=item new(xmlref => $xmlref) + +Initializes an object by passing a hash of hashes structure containing +the XML data returned from the service. Usually, this is just used by +C<Net::Amazon> internally to initialize objects for on backcoming +data. + +=back + +Check out L<Net::Amazon::Property> for all-purpose accessors, like +C<year>, C<OurPrice>, C<ListPrice>, etc. + +=head1 SEE ALSO + +=head1 AUTHOR + +Mike Schilli, E<lt>m@perlmeister.comE<gt> + +=head1 THANKS + +Thanks to Padraic Renaghan E<lt>padraic@renaghan.com<gt> for adding +the upc/media/nummedia fields. + +=head1 COPYRIGHT AND LICENSE + +Copyright 2003 by Mike Schilli E<lt>m@perlmeister.comE<gt> + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself. + +=cut + |
