###################################################################### package Net::Amazon::Property::Book; ###################################################################### use warnings; use strict; use base qw(Net::Amazon::Property); __PACKAGE__->make_accessor($_) for qw(publisher binding isbn dewey_decimal numpages edition ean publication_date); __PACKAGE__->make_array_accessor($_) for qw(authors); ################################################## 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); my $ref = $xmlref->{ItemAttributes}; $self->authors($ref->{Author}); $self->binding($ref->{Binding}); $self->dewey_decimal($ref->{DeweyDecimalNumber}); $self->numpages($ref->{NumberOfPages}); $self->publisher($ref->{Publisher}); $self->isbn($ref->{ISBN}); $self->edition($ref->{Edition}); $self->ean($ref->{EAN}); my $year = 0; if (defined $ref->{PublicationDate}) { $year = (split(/\-/, $ref->{PublicationDate}))[0]; } $self->year($year); $self->publication_date($ref->{PublicationDate}); } ################################################## sub author { ################################################## my($self, $nameref) = @_; # Only return the first author return ($self->authors($nameref))[0]; } ################################################## sub as_string { ################################################## my($self) = @_; my @a = (defined $self->authors) ? $self->authors : qw(); return join('/', @a) . ", " . '"' . $self->title . '"' . ", " . $self->year . ", " . $self->_best_effort_price() . ", " . $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 is derived from C 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 method which just returns the I 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 edition() Returns the book's edition. =item ean() Returns the book's EAN number. =item numpages() Returns the number of pages. =item dewey_decimal() Returns the Dewey decimal number, this is for non-fiction only. This method is deprecated (2011-10-28) as it does not appear to be returned by Amazon any more. =item publication_date() Returns the publication date. =item ReleaseDate() Returns the release date. For historical reasons, this method used to return the publication date. However, as of version Net::Amazon 0.44 the release date is returned, and a separate L method is available. =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 AUTHOR Mike Schilli, Em@perlmeister.comE =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