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 # --------------------------------------------------------------------------
33 my( $self, $keys ) = @_;
34 return $self->send_img(
35 $self->fetch_response('sc.gif', $keys, 1));
39 my( $self, $keys ) = @_;
40 return $self->send_img(
41 $self->fetch_response('mc.gif', $keys, 1));
45 my( $self, $keys ) = @_;
46 return $self->send_img(
47 $self->fetch_response('lc.gif', $keys, 1));
50 # --------------------------------------------------------------------------
53 my( $self, $key ) = @_;
54 return $self->send_html(
55 $self->fetch_content('toc.html', $key));
59 my( $self, $key ) = @_;
60 return $self->send_xml(
61 $self->fetch_content('toc.xml', $key));
65 my( $self, $key ) = @_;
66 return $self->send_json(
67 $self->fetch_content('toc.xml', $key));
70 # --------------------------------------------------------------------------
73 my( $self, $key ) = @_;
74 return $self->send_html(
75 $self->fetch_content('anotes.html', $key));
79 my( $self, $key ) = @_;
80 return $self->send_xml(
81 $self->fetch_content('anotes.xml', $key));
85 my( $self, $key ) = @_;
86 return $self->send_json(
87 $self->fetch_content('anotes.xml', $key));
91 # --------------------------------------------------------------------------
94 my( $self, $key ) = @_;
95 return $self->send_html(
96 $self->fetch_content('dbchapter.html', $key));
100 my( $self, $key ) = @_;
101 return $self->send_xml(
102 $self->fetch_content('dbchapter.xml', $key));
106 my( $self, $key ) = @_;
107 return $self->send_json(
108 $self->fetch_content('dbchapter.xml', $key));
111 # --------------------------------------------------------------------------
114 my( $self, $key ) = @_;
118 $reviews{ljreview} = $self->fetch_content('ljreview.html', $key); # Library Journal
119 $reviews{pwreview} = $self->fetch_content('pwreview.html', $key); # Publishers Weekly
120 $reviews{sljreview} = $self->fetch_content('sljreview.html', $key); # School Library Journal
121 $reviews{chreview} = $self->fetch_content('chreview.html', $key); # CHOICE Review
122 $reviews{blreview} = $self->fetch_content('blreview.html', $key); # Booklist Review
123 $reviews{hbreview} = $self->fetch_content('hbreview.html', $key); # Horn Book Review
124 $reviews{kireview} = $self->fetch_content('kireview.html', $key); # Kirkus Reviews
125 #$reviews{abreview} = $self->fetch_content('abreview.html', $key); # Bookseller+Publisher
126 #$reviews{criticasreview} = $self->fetch_content('criticasreview.html', $key); # Criticas
127 $reviews{nyreview} = $self->fetch_content('nyreview.html', $key); # New York Times
128 #$reviews{gdnreview} = $self->fetch_content('gdnreview.html', $key); # Guardian Review
129 #$reviews{doodysreview} = $self->fetch_content('doodysreview.html', $key); # Doody's Reviews
132 if( ! $self->data_exists($reviews{$_}) ) {
136 $reviews{$_} =~ s/<!.*?>//og; # Strip any doctype declarations
139 return 0 if scalar(keys %reviews) == 0;
143 $html .= $reviews{$_} for keys %reviews;
146 return $self->send_html($html);
149 # we have to aggregate the reviews
151 my( $self, $key ) = @_;
154 $reviews{ljreview} = $self->fetch_content('ljreview.xml', $key);
155 $reviews{pwreview} = $self->fetch_content('pwreview.xml', $key);
156 $reviews{sljreview} = $self->fetch_content('sljreview.xml', $key);
157 $reviews{chreview} = $self->fetch_content('chreview.xml', $key);
158 $reviews{blreview} = $self->fetch_content('blreview.xml', $key);
159 $reviews{hbreview} = $self->fetch_content('hbreview.xml', $key);
160 $reviews{kireview} = $self->fetch_content('kireview.xml', $key);
161 #$reviews{abreview} = $self->fetch_content('abreview.xml', $key);
162 #$reviews{criticasreview} = $self->fetch_content('criticasreview.xml', $key);
163 $reviews{nyreview} = $self->fetch_content('nyreview.xml', $key);
164 #$reviews{gdnreview} = $self->fetch_content('gdnreview.xml', $key);
165 #$reviews{doodysreview} = $self->fetch_content('doodysreview.xml', $key);
168 if( ! $self->data_exists($reviews{$_}) ) {
172 # Strip the xml and doctype declarations
173 $reviews{$_} =~ s/<\?xml.*?>//og;
174 $reviews{$_} =~ s/<!.*?>//og;
177 return 0 if scalar(keys %reviews) == 0;
179 my $xml = "<reviews>";
180 $xml .= $reviews{$_} for keys %reviews;
181 $xml .= "</reviews>";
183 return $self->send_xml($xml);
188 my( $self, $key ) = @_;
189 return $self->send_json(
190 $self->fetch_content('dbchapter.xml', $key));
193 # --------------------------------------------------------------------------
196 my( $self, $key ) = @_;
197 return $self->send_html(
198 $self->fetch_content('summary.html', $key));
202 my( $self, $key ) = @_;
203 return $self->send_xml(
204 $self->fetch_content('summary.xml', $key));
208 my( $self, $key ) = @_;
209 return $self->send_json(
210 $self->fetch_content('summary.xml', $key));
213 # --------------------------------------------------------------------------
216 my( $self, $data ) = @_;
217 return 0 if $data =~ m/<title>No Data Available<\/title>/iog;
218 return 0 if $data =~ m/<title>error<\/title>/iog;
224 my( $self, $xml ) = @_;
225 return 0 unless $self->data_exists($xml);
229 $doc = XML::LibXML->new->parse_string($xml);
232 $logger->error("added content XML parser error: $err\n\n$xml");
236 return 0 unless $doc;
237 my $perl = OpenSRF::Utils::SettingsParser::XML2perl($doc->documentElement);
238 my $json = OpenSRF::Utils::JSON->perl2JSON($perl);
239 return { content_type => 'text/plain', content => $json };
243 my( $self, $xml ) = @_;
244 return 0 unless $self->data_exists($xml);
245 return { content_type => 'application/xml', content => $xml };
249 my( $self, $content ) = @_;
250 return 0 unless $self->data_exists($content);
252 # Hide anything that might contain a link since it will be broken
253 my $HTML = <<" HTML";
255 <style type='text/css'>
256 div.ac input, div.ac a[href],div.ac img, div.ac button { display: none; visibility: hidden }
264 return { content_type => 'text/html', content => $HTML };
268 my($self, $response) = @_;
270 content_type => $response->header('Content-type'),
271 content => $response->content,
276 # returns the raw content returned from the URL fetch
278 my( $self, $page, $key ) = @_;
279 return $self->fetch_response($page, $key)->content;
282 # returns the HTTP response object from the URL fetch
284 my( $self, $page, $keys, $notype ) = @_;
285 my $uname = $self->userid;
287 # Fetch single isbn and single upc
288 my $isbn = $keys->{isbn}[0];
289 my $upc = $keys->{upc}[0];
291 $isbn = '' if !defined($isbn);
292 $upc = '' if !defined($upc);
294 my $url = $self->base_url . "?isbn=$isbn/$page&upc=$upc&client=$uname" . (($notype) ? '' : "&type=rw12");
295 return $AC->get_url($url);