summaryrefslogtreecommitdiff
path: root/lib/Net/Amazon/Property
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Net/Amazon/Property')
-rw-r--r--lib/Net/Amazon/Property/Book.pm152
-rw-r--r--lib/Net/Amazon/Property/DVD.pm156
-rw-r--r--lib/Net/Amazon/Property/Music.pm161
3 files changed, 469 insertions, 0 deletions
diff --git a/lib/Net/Amazon/Property/Book.pm b/lib/Net/Amazon/Property/Book.pm
new file mode 100644
index 0000000..8a01756
--- /dev/null
+++ b/lib/Net/Amazon/Property/Book.pm
@@ -0,0 +1,152 @@
+######################################################################
+package Net::Amazon::Property::Book;
+######################################################################
+use warnings;
+use strict;
+use base qw(Net::Amazon::Property);
+
+__PACKAGE__->make_accessor($_) for qw(title publisher binding isbn);
+
+##################################################
+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 init_via_xmlref {
+##################################################
+ my($self, $xmlref) = @_;
+
+ $self->SUPER::init_via_xmlref($xmlref);
+
+ $self->authors($xmlref->{Authors}->{Author});
+ $self->title($xmlref->{ProductName});
+ $self->publisher($xmlref->{Manufacturer});
+ $self->binding($xmlref->{Media});
+ $self->isbn($xmlref->{Isbn});
+}
+
+##################################################
+sub author {
+##################################################
+ my($self, $nameref) = @_;
+
+ # Only return the first author
+ return ($self->authors($nameref))[0];
+}
+
+##################################################
+sub authors {
+##################################################
+ my($self, $nameref) = @_;
+
+ if(defined $nameref) {
+ if(ref $nameref eq "ARRAY") {
+ $self->{authors} = $nameref;
+ } else {
+ $self->{authors} = [$nameref];
+ }
+ }
+
+ # Return a list
+ return $self->{authors} ? @{$self->{authors}} : ();
+}
+
+##################################################
+sub as_string {
+##################################################
+ my($self) = @_;
+
+ return join('/', $self->authors) . ", " .
+ '"' . $self->title . '"' . ", " .
+ $self->year . ", " .
+ $self->OurPrice . ", " .
+ $self->Asin;
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+Net::Amazon::Property::Book - Class for books on amazon.com
+
+=head1 SYNOPSIS
+
+ use Net::Amazon;
+
+ # ...
+
+ if($resp->is_success()) {
+ for my $prop ($resp->properties) {
+ print join("/", $prop->authors(), " ",
+ $prop->title(), " ",
+ $prop->publisher(), " ",
+ $prop->year(), "\n";
+ }
+
+=head1 DESCRIPTION
+
+C<Net::Amazon::Property::Book> is derived from
+C<Net::Amazon::Property> and on top of the all-purpose
+methods the base class provides, it offers specialized accessors for
+book parameters.
+
+=head2 METHODS
+
+=over 4
+
+=item authors()
+
+Returns a list of the book's authors. There's also a C<author()> method
+which just returns the I<first> author.
+
+=item publisher()
+
+Returns the book's publishing company as a string.
+
+=item title()
+
+Returns the book's title as a string.
+
+=item isbn()
+
+Returns the book's ISBN number.
+
+=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 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
diff --git a/lib/Net/Amazon/Property/DVD.pm b/lib/Net/Amazon/Property/DVD.pm
new file mode 100644
index 0000000..dc7fd5a
--- /dev/null
+++ b/lib/Net/Amazon/Property/DVD.pm
@@ -0,0 +1,156 @@
+######################################################################
+package Net::Amazon::Property::DVD;
+######################################################################
+use warnings;
+use strict;
+use base qw(Net::Amazon::Property);
+
+__PACKAGE__->make_accessor($_) for qw(title studio theatrical_release_date
+ media nummedia upc mpaa_rating);
+__PACKAGE__->make_array_accessor($_) for qw(directors starring features);
+
+##################################################
+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 director {
+##################################################
+ my($self, $nameref) = @_;
+
+ # Only return the first director
+ return ($self->directors($nameref))[0];
+}
+
+##################################################
+sub init_via_xmlref {
+##################################################
+ my($self, $xmlref) = @_;
+
+ $self->SUPER::init_via_xmlref($xmlref);
+
+ $self->title($xmlref->{ProductName});
+ $self->studio($xmlref->{Manufacturer});
+ $self->directors($xmlref->{Directors}->{Director});
+ $self->starring($xmlref->{Starring}->{Actor});
+ $self->media($xmlref->{Media});
+ $self->nummedia($xmlref->{NumMedia});
+ $self->upc($xmlref->{Upc});
+ $self->theatrical_release_date($xmlref->{TheatricalReleaseDate});
+ $self->mpaa_rating($xmlref->{MpaaRating});
+ $self->features($xmlref->{Features}->{Feature});
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+Net::Amazon::Property::DVD - Class for DVDs on amazon.com
+
+=head1 SYNOPSIS
+
+ use Net::Amazon;
+
+ # ...
+
+ if($resp->is_success()) {
+ for my $prop ($resp->properties) {
+ print $_->title(), " ",
+ $_->studio(), " ",
+ $_->year(), "\n";
+ }
+
+=head1 DESCRIPTION
+
+C<Net::Amazon::Property::DVD> is derived from
+C<Net::Amazon::Property> and on top of the all-purpose
+methods the base class provides, it offers specialized accessors for
+DVD parameters.
+
+=head2 METHODS
+
+=over 4
+
+=item title()
+
+Returns the title of the DVD.
+
+=item studio()
+
+Returns the studio.
+
+=item directors()
+
+Returns a list of directors. Note that there's also a director() method
+only returning the first director.
+
+=item starring()
+
+Returns a list of actors starring in the movie.
+
+=item upc()
+
+Returns the DVD's UPC as a string.
+
+=item media()
+
+Returns the DVD's media type as a string.
+
+=item nummedia()
+
+Returns the DVD'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 theatrical_release_date()
+
+Returns the DVD's theatrical release date.
+
+=item mpaa_rating()
+
+Returns the DVD's MPAA rating.
+
+=item features()
+
+Returns the DVD's features as a list of strings. Examples:
+"Color", "Closed-captioned", "Widescreen".
+
+=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 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
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
+