From 71a319f6dd40d6766317e3f102e4950b8ef02bae 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 --- .../lib/OpenILS/WWW/AddedContent/OpenLibrary.pm | 43 ++++++++++++++-------- 1 file changed, 27 insertions(+), 16 deletions(-) diff --git a/Open-ILS/src/perlmods/lib/OpenILS/WWW/AddedContent/OpenLibrary.pm b/Open-ILS/src/perlmods/lib/OpenILS/WWW/AddedContent/OpenLibrary.pm index 7d3ae812fe..11bd7ba2f2 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/WWW/AddedContent/OpenLibrary.pm +++ b/Open-ILS/src/perlmods/lib/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