###################################################################### 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 is derived from C 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 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 internally to initialize objects for on backcoming data. =back Check out L for all-purpose accessors, like C, C, C, etc. =head1 SEE ALSO =head1 AUTHOR Mike Schilli, Em@perlmeister.comE =head1 THANKS Thanks to Padraic Renaghan Epadraic@renaghan.com for adding the upc/media/nummedia fields. =head1 COPYRIGHT AND LICENSE Copyright 2003 by Mike Schilli Em@perlmeister.comE This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut