From: Dan Scott <dan@coffeecode.net> Date: Thu, 2 Jun 2011 13:56:05 +0000 (-0400) Subject: Get OpenLibrary covers from any related items X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=a00f47c67a7606be5575e43997a848c6c97d1ac5;p=evergreen%2Fmasslnc.git 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 <dscott@laurentian.ca> Signed-off-by: Bill Erickson <berick@esilibrary.com> --- 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 292cfd0e27..547d5b8455 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 .= "<div class='sentence1'>$first_sentence</div>\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;