From 49b4999822d70d875b392903ad88d01068d2486e Mon Sep 17 00:00:00 2001 From: dbs Date: Sun, 1 May 2011 00:28:23 +0000 Subject: [PATCH] Add excerpt AC and avoid rate-limiting for OpenLibrary content OpenLibrary added rate-limiting (100 cover requests per 5 minutes) for cover images requested by ISBN; using the OpenLibrary book API to pull the list of direct cover URLs avoids the rate limit. Also, add excerpt added content calls for OpenLibrary. Signed-off-by: Dan Scott git-svn-id: svn://svn.open-ils.org/ILS/trunk@20354 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- .../OpenILS/WWW/AddedContent/OpenLibrary.pm | 69 +++++++++++++++++-- 1 file changed, 64 insertions(+), 5 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 7555223c31..2be38a0c6e 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/WWW/AddedContent/OpenLibrary.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/WWW/AddedContent/OpenLibrary.pm @@ -49,19 +49,19 @@ sub new { sub jacket_small { my( $self, $key ) = @_; return $self->send_img( - $self->fetch_cover_response('-S.jpg', $key)); + $self->fetch_cover_response('small', $key)); } sub jacket_medium { my( $self, $key ) = @_; return $self->send_img( - $self->fetch_cover_response('-M.jpg', $key)); + $self->fetch_cover_response('medium', $key)); } sub jacket_large { my( $self, $key ) = @_; return $self->send_img( - $self->fetch_cover_response('-L.jpg', $key)); + $self->fetch_cover_response('large', $key)); } # -------------------------------------------------------------------------- @@ -122,6 +122,47 @@ sub ebooks_html { $logger->debug("$key: $ebook_html"); $self->send_html(""); } + +sub excerpt_html { + my( $self, $key ) = @_; + my $book_details_json = $self->fetch_details_response($key)->content(); + + $logger->debug("$key: $book_details_json"); + + my $excerpt_html; + + my $book_details = OpenSRF::Utils::JSON->JSON2perl($book_details_json); + my $book_key = (keys %$book_details)[0]; + + # We didn't find a matching book; short-circuit our response + if (!$book_key) { + $logger->debug("$key: no found book"); + return 0; + } + + my $first_sentence = $book_details->{$book_key}->{first_sentence}; + if ($first_sentence) { + $excerpt_html .= "
$first_sentence
\n"; + } + + my $excerpts_json = $book_details->{$book_key}->{excerpts}; + if ($excerpts_json && scalar(@$excerpts_json)) { + # Load up excerpt text with comments in tooltip + foreach my $excerpt (@$excerpts_json) { + my $text = $excerpt->{text}; + my $cmnt = $excerpt->{comment}; + $excerpt_html .= "
$cmnt
\n"; + } + } + + if (!$excerpt_html) { + return 0; + } + + $logger->debug("$key: $excerpt_html"); + $self->send_html("
$excerpt_html
"); +} + =head1 OpenLibrary returns a JSON hash of zero or more book responses matching our @@ -241,8 +282,26 @@ sub fetch_details_response { # returns the HTTP response object from the URL fetch sub fetch_cover_response { my( $self, $size, $key ) = @_; - my $url = $cover_base_url . "$key$size"; - return $AC->get_url($url); + + my $response = $self->fetch_data_response($key)->content(); + + my $book_data = OpenSRF::Utils::JSON->JSON2perl($response); + my $book_key = (keys %$book_data)[0]; + + # We didn't find a matching book; short-circuit our response + if (!$book_key) { + $logger->debug("$key: no found book"); + return 0; + } + + my $covers_json = $book_data->{$book_key}->{cover}; + if (!$covers_json) { + $logger->debug("$key: no covers for this book"); + return 0; + } + + $logger->debug("$key: " . $covers_json->{$size}); + return $AC->get_url($covers_json->{$size}) || 0; } -- 2.43.2