$VERSION = 0.03;
@ISA = qw(Exporter);
@EXPORT = qw(
- &get_amazon_details
- &check_search_inside
- &get_amazon_tld
+ get_amazon_details
+ get_amazon_tld
);
}
C4::External::Amazon - Functions for retrieving Amazon.com content in Koha
-=head1 FUNCTIONS
+=head2 FUNCTIONS
This module provides facilities for retrieving Amazon.com content in Koha
-=head2 get_amazon_details
+=over
-=over 4
+=item get_amazon_detail( $isbn, $record, $marcflavour, $services )
-my $amazon_details = &get_amazon_details( $xisbn, $record, $marcflavour );
+Get editorial reviews, customer reviews, and similar products using Amazon Web Services.
+
+Parameters:
+
+=over
+
+=item $isbn
+
+Biblio record isbn
+
+=item $record
+
+Biblio MARC record
+
+=item $marcflavour
+
+MARC flavor, MARC21 or UNIMARC
+
+=item $services
+
+Requested Amazon services: A ref to an array. For example,
+[ 'Similarities', 'EditorialReviews', 'Reviews' ].
+No other service will be accepted. Services must be spelled exactly.
+If no sercice is requested, AWS isn't called.
=back
-Get editorial reviews, customer reviews, and similar products using Amazon Web Services.
+=item get_amazon_tld()
+
+Get Amazon Top Level Domain depending on Amazon local preference: AmazonLocal.
+For example, if AmazonLocal is 'UK', returns '.co.uk'.
+
+=back
=cut
+
sub get_amazon_details {
- my ( $isbn, $record, $marcflavour ) = @_;
+ my ( $isbn, $record, $marcflavour, $aws_ref ) = @_;
+
+ return unless defined $aws_ref;
+ my @aws = @$aws_ref;
+ return if $#aws == -1;
# Normalize the fields
$isbn = GetNormalizedISBN($isbn);
return undef;
}
- my $format = substr $record->leader(), 6, 1; # grab the item format to determine Amazon search index
+ # grab the item format to determine Amazon search index
+ # FIXME: This is MARC21 specific
+ my $format = substr $record->leader(), 6, 1;
my $formats;
$formats->{'a'} = 'Books';
$formats->{'g'} = 'Video';
#grab the associates tag: mine is 'kadabox-20'
my $af_tag=C4::Context->preference('AmazonAssocTag');
- my $response_group = "Similarities,EditorialReview,Reviews,ItemAttributes,Images";
+ my $response_group = join( ',', @aws );
my $url = "http://ecs.amazonaws$tld/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=$aws_access_key_id&Operation=ItemLookup&AssociateTag=$af_tag&Version=2007-01-15&ItemId=$item_id&IdType=$id_type&ResponseGroup=$response_group";
if ($id_type ne 'ASIN') {
$url .= "&SearchIndex=$search_index";
}
- # warn $url;
+ #warn $url;
my $content = get($url);
warn "could not retrieve $url" unless $content;
my $xmlsimple = XML::Simple->new();
# Amazon.com Stuff
if ( C4::Context->preference("OPACAmazonEnabled") ) {
$template->param( AmazonTld => get_amazon_tld() );
- $template->param( OPACAmazonReviews => C4::Context->preference("OPACAmazonReviews") );
-}
-if ( C4::Context->preference("OPACAmazonEnabled") && C4::Context->preference("OPACAmazonSimilarItems") ) {
+ my $amazon_reviews = C4::Context->preference("OPACAmazonReviews");
+ my $amazon_similars = C4::Context->preference("OPACAmazonSimilarItems");
+ my @services;
+ if ( $amazon_reviews ) {
+ $template->param( OPACAmazonReviews => 1 );
+ push( @services, 'EditorialReview', 'Reviews' );
+ }
+ if ( $amazon_similars ) {
+ $template->param( OPACAmazonSimilarItems => 1 );
+ push( @services, 'Similarities' );
+ }
+ my $amazon_details = &get_amazon_details( $isbn, $record, $marcflavour, \@services );
my $similar_products_exist;
- my $amazon_details = &get_amazon_details( $isbn, $record, $marcflavour );
- my $item_attributes = \%{$amazon_details->{Items}->{Item}->{ItemAttributes}};
- my $customer_reviews = \@{$amazon_details->{Items}->{Item}->{CustomerReviews}->{Review}};
- for my $one_review (@$customer_reviews) {
- $one_review->{Date} = format_date($one_review->{Date});
+ if ( $amazon_reviews ) {
+ my $item = $amazon_details->{Items}->{Item};
+ my $customer_reviews = \@{ $item->{CustomerReviews}->{Review} };
+ for my $one_review ( @$customer_reviews ) {
+ $one_review->{Date} = format_date($one_review->{Date});
+ }
+ my $editorial_reviews = \@{ $item->{EditorialReviews}->{EditorialReview} };
+ my $average_rating = $item->{CustomerReviews}->{AverageRating} || 0;
+ $template->param( amazon_average_rating => $average_rating * 20);
+ $template->param( AMAZON_CUSTOMER_REVIEWS => $customer_reviews );
+ $template->param( AMAZON_EDITORIAL_REVIEWS => $editorial_reviews );
}
- my @similar_products;
- for my $similar_product (@{$amazon_details->{Items}->{Item}->{SimilarProducts}->{SimilarProduct}}) {
- # do we have any of these isbns in our collection?
- my $similar_biblionumbers = get_biblionumber_from_isbn($similar_product->{ASIN});
- # verify that there is at least one similar item
- if (scalar(@$similar_biblionumbers)){
- $similar_products_exist++ if ($similar_biblionumbers && $similar_biblionumbers->[0]);
- push @similar_products, +{ similar_biblionumbers => $similar_biblionumbers, title => $similar_product->{Title}, ASIN => $similar_product->{ASIN} };
+ if ( $amazon_similars ) {
+ my $item = $amazon_details->{Items}->{Item};
+ my @similar_products;
+ for my $similar_product (@{ $item->{SimilarProducts}->{SimilarProduct} }) {
+ # do we have any of these isbns in our collection?
+ my $similar_biblionumbers = get_biblionumber_from_isbn($similar_product->{ASIN});
+ # verify that there is at least one similar item
+ if (scalar(@$similar_biblionumbers)){
+ $similar_products_exist++ if ($similar_biblionumbers && $similar_biblionumbers->[0]);
+ push @similar_products, +{ similar_biblionumbers => $similar_biblionumbers, title => $similar_product->{Title}, ASIN => $similar_product->{ASIN} };
+ }
}
+ $template->param( OPACAmazonSimilarItems => $similar_products_exist );
+ $template->param( AMAZON_SIMILAR_PRODUCTS => \@similar_products );
}
- my $editorial_reviews = \@{$amazon_details->{Items}->{Item}->{EditorialReviews}->{EditorialReview}};
- my $average_rating = $amazon_details->{Items}->{Item}->{CustomerReviews}->{AverageRating} || 0;
- $template->param( OPACAmazonSimilarItems => $similar_products_exist );
- $template->param( amazon_average_rating => $average_rating * 20);
- $template->param( AMAZON_CUSTOMER_REVIEWS => $customer_reviews );
- $template->param( AMAZON_SIMILAR_PRODUCTS => \@similar_products );
- $template->param( AMAZON_EDITORIAL_REVIEWS => $editorial_reviews );
}
my $syndetics_elements;