1 package OpenILS::WWW::AddedContent::Syndetic;
2 use strict; use warnings;
3 use OpenSRF::Utils::Logger qw/$logger/;
4 use OpenSRF::Utils::SettingsParser;
5 use OpenSRF::Utils::JSON;
6 use OpenSRF::EX qw/:try/;
7 use OpenILS::WWW::AddedContent;
11 my $AC = 'OpenILS::WWW::AddedContent';
15 my( $class, $args ) = @_;
16 $class = ref $class || $class;
17 return bless($args, $class);
22 return $self->{base_url};
27 return $self->{userid};
31 # we expect a keyhash as opposed to a simple scalar containing an ISBN
35 # --------------------------------------------------------------------------
37 my( $self, $keys ) = @_;
38 return $self->send_img(
39 $self->fetch_response('sc.gif', $keys, 1));
43 my( $self, $keys ) = @_;
44 return $self->send_img(
45 $self->fetch_response('mc.gif', $keys, 1));
49 my( $self, $keys ) = @_;
50 return $self->send_img(
51 $self->fetch_response('lc.gif', $keys, 1));
54 # --------------------------------------------------------------------------
57 my( $self, $key ) = @_;
58 return $self->send_html(
59 $self->fetch_content('toc.html', $key));
63 my( $self, $key ) = @_;
64 return $self->send_xml(
65 $self->fetch_content('toc.xml', $key));
69 my( $self, $key ) = @_;
70 return $self->send_json(
71 $self->fetch_content('toc.xml', $key));
74 # --------------------------------------------------------------------------
77 my( $self, $key ) = @_;
78 return $self->send_html(
79 $self->fetch_content('anotes.html', $key));
83 my( $self, $key ) = @_;
84 return $self->send_xml(
85 $self->fetch_content('anotes.xml', $key));
89 my( $self, $key ) = @_;
90 return $self->send_json(
91 $self->fetch_content('anotes.xml', $key));
95 # --------------------------------------------------------------------------
98 my( $self, $key ) = @_;
99 return $self->send_html(
100 $self->fetch_content('dbchapter.html', $key));
104 my( $self, $key ) = @_;
105 return $self->send_xml(
106 $self->fetch_content('dbchapter.xml', $key));
110 my( $self, $key ) = @_;
111 return $self->send_json(
112 $self->fetch_content('dbchapter.xml', $key));
115 # --------------------------------------------------------------------------
118 my( $self, $key ) = @_;
122 $reviews{ljreview} = $self->fetch_content('ljreview.html', $key); # Library Journal
123 $reviews{pwreview} = $self->fetch_content('pwreview.html', $key); # Publishers Weekly
124 $reviews{sljreview} = $self->fetch_content('sljreview.html', $key); # School Library Journal
125 $reviews{chreview} = $self->fetch_content('chreview.html', $key); # CHOICE Review
126 $reviews{blreview} = $self->fetch_content('blreview.html', $key); # Booklist Review
127 $reviews{hbreview} = $self->fetch_content('hbreview.html', $key); # Horn Book Review
128 $reviews{kireview} = $self->fetch_content('kireview.html', $key); # Kirkus Reviews
129 #$reviews{abreview} = $self->fetch_content('abreview.html', $key); # Bookseller+Publisher
130 #$reviews{criticasreview} = $self->fetch_content('criticasreview.html', $key); # Criticas
131 $reviews{nyreview} = $self->fetch_content('nyreview.html', $key); # New York Times
132 #$reviews{gdnreview} = $self->fetch_content('gdnreview.html', $key); # Guardian Review
133 #$reviews{doodysreview} = $self->fetch_content('doodysreview.html', $key); # Doody's Reviews
136 if( ! $self->data_exists($reviews{$_}) ) {
140 $reviews{$_} =~ s/<!.*?>//og; # Strip any doctype declarations
143 return 0 if scalar(keys %reviews) == 0;
147 $html .= $reviews{$_} for keys %reviews;
150 return $self->send_html($html);
153 # we have to aggregate the reviews
155 my( $self, $key ) = @_;
158 $reviews{ljreview} = $self->fetch_content('ljreview.xml', $key);
159 $reviews{pwreview} = $self->fetch_content('pwreview.xml', $key);
160 $reviews{sljreview} = $self->fetch_content('sljreview.xml', $key);
161 $reviews{chreview} = $self->fetch_content('chreview.xml', $key);
162 $reviews{blreview} = $self->fetch_content('blreview.xml', $key);
163 $reviews{hbreview} = $self->fetch_content('hbreview.xml', $key);
164 $reviews{kireview} = $self->fetch_content('kireview.xml', $key);
165 #$reviews{abreview} = $self->fetch_content('abreview.xml', $key);
166 #$reviews{criticasreview} = $self->fetch_content('criticasreview.xml', $key);
167 $reviews{nyreview} = $self->fetch_content('nyreview.xml', $key);
168 #$reviews{gdnreview} = $self->fetch_content('gdnreview.xml', $key);
169 #$reviews{doodysreview} = $self->fetch_content('doodysreview.xml', $key);
172 if( ! $self->data_exists($reviews{$_}) ) {
176 # Strip the xml and doctype declarations
177 $reviews{$_} =~ s/<\?xml.*?>//og;
178 $reviews{$_} =~ s/<!.*?>//og;
181 return 0 if scalar(keys %reviews) == 0;
183 my $xml = "<reviews>";
184 $xml .= $reviews{$_} for keys %reviews;
185 $xml .= "</reviews>";
187 return $self->send_xml($xml);
192 my( $self, $key ) = @_;
193 return $self->send_json(
194 $self->fetch_content('dbchapter.xml', $key));
197 # --------------------------------------------------------------------------
200 my( $self, $key ) = @_;
201 return $self->send_html(
202 $self->fetch_content('summary.html', $key));
206 my( $self, $key ) = @_;
207 return $self->send_xml(
208 $self->fetch_content('summary.xml', $key));
212 my( $self, $key ) = @_;
213 return $self->send_json(
214 $self->fetch_content('summary.xml', $key));
217 # --------------------------------------------------------------------------
220 my( $self, $data ) = @_;
221 return 0 if $data =~ m/<title>No Data Available<\/title>/iog;
222 return 0 if $data =~ m/<title>error<\/title>/iog;
228 my( $self, $xml ) = @_;
229 return 0 unless $self->data_exists($xml);
233 $doc = XML::LibXML->new->parse_string($xml);
236 $logger->error("added content XML parser error: $err\n\n$xml");
240 return 0 unless $doc;
241 my $perl = OpenSRF::Utils::SettingsParser::XML2perl($doc->documentElement);
242 my $json = OpenSRF::Utils::JSON->perl2JSON($perl);
243 return { content_type => 'text/plain', content => $json };
247 my( $self, $xml ) = @_;
248 return 0 unless $self->data_exists($xml);
249 return { content_type => 'application/xml', content => $xml };
253 my( $self, $content ) = @_;
254 return 0 unless $self->data_exists($content);
256 # Hide anything that might contain a link since it will be broken
257 my $HTML = <<" HTML";
259 <style type='text/css'>
260 div.ac input, div.ac a[href],div.ac img, div.ac button { display: none; visibility: hidden }
268 return { content_type => 'text/html', content => $HTML };
272 my($self, $response) = @_;
274 content_type => $response->header('Content-type'),
275 content => $response->content,
280 # returns the raw content returned from the URL fetch
282 my( $self, $page, $key ) = @_;
283 return $self->fetch_response($page, $key)->content;
286 # returns the HTTP response object from the URL fetch
288 my( $self, $page, $keys, $notype ) = @_;
289 my $uname = $self->userid;
291 # Fetch single isbn, upc, and issn
292 my $isbn = $keys->{isbn}[0];
293 my $upc = $keys->{upc}[0];
294 my $issn = $keys->{issn}[0];
296 $isbn = '' if !defined($isbn);
297 $upc = '' if !defined($upc);
298 $issn = '' if !defined($issn);
300 my $url = $self->base_url . "?isbn=$isbn/$page&upc=$upc&issn=$issn&client=$uname" . (($notype) ? '' : "&type=rw12");
301 return $AC->get_url($url);