From 27953d93b6f0537958e91f9dde52ffd495661a57 Mon Sep 17 00:00:00 2001 From: Dan Scott Date: Thu, 2 Jun 2011 09:56:05 -0400 Subject: [PATCH] Get OpenLibrary covers from any related items Cover requests for exact matches sometimes fail to produce results, but covers from similar items (other editions of the same work) are often available. Take that! Signed-off-by: Dan Scott --- .../OpenILS/WWW/AddedContent/OpenLibrary.pm | 43 ++++++++++++++-------- 1 file changed, 27 insertions(+), 16 deletions(-) diff --git a/Open-ILS/src/perlmods/OpenILS/WWW/AddedContent/OpenLibrary.pm b/Open-ILS/src/perlmods/OpenILS/WWW/AddedContent/OpenLibrary.pm index 292cfd0e27..547d5b8455 100644 --- a/Open-ILS/src/perlmods/OpenILS/WWW/AddedContent/OpenLibrary.pm +++ b/Open-ILS/src/perlmods/OpenILS/WWW/AddedContent/OpenLibrary.pm @@ -124,12 +124,12 @@ sub excerpt_html { my $content = $self->fetch_details_response($key)->content(); - my $first_sentence = $content->{details}->{first_sentence}; + my $first_sentence = $content->{first_sentence}; if ($first_sentence) { $excerpt_html .= "
$first_sentence
\n"; } - my $excerpts_json = $content->{details}->{$book_key}->{excerpts}; + my $excerpts_json = $content->{excerpts}; if ($excerpts_json && scalar(@$excerpts_json)) { # Load up excerpt text with comments in tooltip foreach my $excerpt (@$excerpts_json) { @@ -279,29 +279,40 @@ sub fetch_details_response { return $book_results->{$book_key}->{details}; } -# returns the HTTP response object from the URL fetch -sub fetch_cover_response { - my( $self, $size, $key ) = @_; +sub fetch_items_response { + my ($self, $key) = @_; - my $response = $self->fetch_response($key)->content(); + my $book_results = $self->fetch_response($key)->content(); - my $book_data = OpenSRF::Utils::JSON->JSON2perl($response); - my $book_key = (keys %$book_data)[0]; + $logger->debug("$key: items $book_results"); + + my $items = $book_results->{items}; # We didn't find a matching book; short-circuit our response - if (!$book_key) { - $logger->debug("$key: no found book"); + if (!$items || scalar(@$items) == 0) { + $logger->debug("$key: no found items"); return 0; } - my $covers_json = $book_data->{$book_key}->{cover}; - if (!$covers_json) { - $logger->debug("$key: no covers for this book"); - return 0; + return $book_results->{items}; +} + + +# returns a cover image from the list of associated items +# TODO: Look for the best match in the array of items +sub fetch_cover_response { + my( $self, $size, $key ) = @_; + + my $items = $self->fetch_items_response($key); + + foreach my $item (@$items) { + if ($item->{covers}) { + return $AC->get_url($item->{covers}->{$size}) || 0; + } } - $logger->debug("$key: " . $covers_json->{$size}); - return $AC->get_url($covers_json->{$size}) || 0; + $logger->debug("$key: no covers for this book"); + return 0; } 1; -- 2.11.0