diff options
| author | Andreas Brachold <vdr07@deltab.de> | 2007-08-13 18:41:27 +0000 |
|---|---|---|
| committer | Andreas Brachold <vdr07@deltab.de> | 2007-08-13 18:41:27 +0000 |
| commit | bcbf441e09fb502cf64924ff2530fa144bdf52c5 (patch) | |
| tree | f377707a2dac078db8cd0c7d7abfe69ac1006d71 /lib/Net/Amazon/Attribute | |
| download | xxv-bcbf441e09fb502cf64924ff2530fa144bdf52c5.tar.gz xxv-bcbf441e09fb502cf64924ff2530fa144bdf52c5.tar.bz2 | |
* Move files to trunk
Diffstat (limited to 'lib/Net/Amazon/Attribute')
| -rw-r--r-- | lib/Net/Amazon/Attribute/Review.pm | 104 | ||||
| -rw-r--r-- | lib/Net/Amazon/Attribute/ReviewSet.pm | 137 |
2 files changed, 241 insertions, 0 deletions
diff --git a/lib/Net/Amazon/Attribute/Review.pm b/lib/Net/Amazon/Attribute/Review.pm new file mode 100644 index 0000000..5a5d094 --- /dev/null +++ b/lib/Net/Amazon/Attribute/Review.pm @@ -0,0 +1,104 @@ +###################################################################### +package Net::Amazon::Attribute::Review; +###################################################################### +use warnings; +use strict; +use Log::Log4perl qw(:easy); +use base qw(Net::Amazon); + +__PACKAGE__->make_accessor($_) for qw(rating summary comment); + +################################################## +sub new { +################################################## + my($class, %options) = @_; + + my $self = { + rating => "", + summary => "", + comment => "", + %options, + }; + + bless $self, $class; +} + +################################################## +sub init_via_xmlref { +################################################## + my($self, $xmlref) = @_; + + for(qw(Rating Summary Comment)) { + my $method = lc($_); + if($xmlref->{$_}) { + $self->$method($xmlref->{$_}); + } else { + #LOGWARN "No '$_'"; + return undef; + } + } +} + +1; + +__END__ + +=head1 NAME + +Net::Amazon::Attribute::Review - Customer Review Class + +=head1 SYNOPSIS + + use Net::Amazon::Attribute::Review; + my $rev = Net::Amazon::Attribute::Review->new( + 'rating' => $rating, + 'summary' => $summary, + 'comment' => $comment, + ); + +=head1 DESCRIPTION + +C<Net::Amazon::Attribute::Review> holds customer reviews. + +=head2 METHODS + +=over 4 + +=item rating() + +Accessor for the numeric value of the rating. + +=item summary() + +Accessor for the string value of the summary. + +=item comment() + +Accessor for the string value of the customer comment. + +=back + +=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 + +__END__ + <Reviews> + <AvgCustomerRating>4.33</AvgCustomerRating> + <TotalCustomerReviews>6</TotalCustomerReviews> + <CustomerReview> + <Rating>4</Rating> + <Summary>Good introduction to Perl, and great reference</Summary> + <Comment>From its corny title you might expect another one of those + diff --git a/lib/Net/Amazon/Attribute/ReviewSet.pm b/lib/Net/Amazon/Attribute/ReviewSet.pm new file mode 100644 index 0000000..29a34e6 --- /dev/null +++ b/lib/Net/Amazon/Attribute/ReviewSet.pm @@ -0,0 +1,137 @@ +###################################################################### +package Net::Amazon::Attribute::ReviewSet; +###################################################################### +use warnings; +use strict; +use Log::Log4perl qw(:easy); +use Net::Amazon::Attribute::Review; +use base qw(Net::Amazon); + +__PACKAGE__->make_accessor($_) for qw(average_customer_rating total_reviews); + +################################################## +sub new { +################################################## + my($class, %options) = @_; + + my $self = { + reviews => [], # list of reviews + }; + + bless $self, $class; +} + +########################################### +sub add_review { +########################################### + my($self, $review) = @_; + + if(ref $review ne "Net::Amazon::Attribute::Review") { + warn "add_review called with type ", ref $review; + return undef; + } + + push @{$self->{reviews}}, $review; +} + +########################################### +sub reviews { +########################################### + my($self) = @_; + + return @{$self->{reviews}}; +} + +################################################## +sub init_via_xmlref { +################################################## + my($self, $xmlref) = @_; + + my @pairs = qw(AvgCustomerRating average_customer_rating + TotalCustomerReviews total_reviews); + + while(my($field, $method) = splice @pairs, 0, 2) { + + if(defined $xmlref->{$field}) { + DEBUG "Setting $field via $method to $xmlref->{$field}"; + $self->$method($xmlref->{$field}); + } else { + LOGWARN "No '$field'"; + return undef; + } + } + + if(ref $xmlref->{CustomerReview} ne "ARRAY") { + $xmlref->{CustomerReview} = [$xmlref->{CustomerReview}]; + } + + for my $review_xmlref (@{$xmlref->{CustomerReview}}) { + my $review = Net::Amazon::Attribute::Review->new(); + $review->init_via_xmlref($review_xmlref); + DEBUG "Adding review ", $review->summary(); + $self->add_review($review); + } +} + +1; + +__END__ + +=head1 NAME + +Net::Amazon::Attribute::ReviewSet - A set of customer reviews + +=head1 SYNOPSIS + + use Net::Amazon::Attribute::ReviewSet; + my $rev = Net::Amazon::Attribute::Review->new( + average_customer_rating => $avg, + total_reviews => $total, + ); + +=head1 DESCRIPTION + +C<Net::Amazon::Attribute::ReviewSet> holds a list of customer +reviews, each of type C<Net::Amazon::Attribute::Review>. + +=head2 METHODS + +=over 4 + +=item C<< $self->reviews() >> + +Returns a list of C<Net::Amazon::Attribute::Review> objects. + +=item C<< $self->average_customer_rating() >> + +Accessor for the average customer rating, a numeric value. + +=item C<< $self->total_reviews() >> + +Accessor for the total number of reviews. Please note that this +might not be equal to the number of reviews held in the list, since +there might be less customer reviews than total reviews (reviews +can also be non-customer-reviews, but they're not available by +the web service as of Aug 2003). + +=item C<< $self->add_review($rev) >> + +Add a C<Net::Amazon::Attribute::Review> object to the list. +(Used internally only). + +=back + +=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 |
