summaryrefslogtreecommitdiff
path: root/lib/Net/Amazon/Attribute
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Net/Amazon/Attribute')
-rw-r--r--lib/Net/Amazon/Attribute/Review.pm104
-rw-r--r--lib/Net/Amazon/Attribute/ReviewSet.pm137
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