$VERSION = 0.03;
@ISA = qw(Exporter);
@EXPORT = qw(
+ &get_syndetics_index
&get_syndetics_summary
&get_syndetics_toc
- &get_syndetics_editions
- &get_syndetics_excerpt
- &get_syndetics_reviews
+ &get_syndetics_editions
+ &get_syndetics_excerpt
+ &get_syndetics_reviews
+ &get_syndetics_anotes
);
}
=cut
+sub get_syndetics_index {
+ my ( $isbn ) = @_;
+
+ #normalize the ISBN
+ $isbn = _normalize_match_point ($isbn);
+
+ # grab the AWSAccessKeyId: mine is '0V5RRRRJZ3HR2RQFNHR2'
+ my $syndetics_client_code = C4::Context->preference('SyndeticsClientCode');
+
+ my $url = "http://syndetics.com/index.aspx?isbn=$isbn/INDEX.XML&client=$syndetics_client_code&type=xw10";
+ my $ua = LWP::UserAgent->new;
+ $ua->timeout(10);
+ $ua->env_proxy;
+ my $response = $ua->get($url);
+ unless ($response->content_type =~ /xml/) {
+ return;
+ }
+
+ my $content = $response->content;
+ warn "could not retrieve $url" unless $content;
+ my $xmlsimple = XML::Simple->new();
+ $response = $xmlsimple->XMLin(
+ $content,
+ ) unless !$content;
+
+ my $syndetics_elements;
+ for my $available_type ('SUMMARY','TOC','FICTION','AWARDS1','SERIES1','SPSUMMARY','SPREVIEW','AVSUMMARY','DBCHAPTER','LJREVIEW','PWREVIEW','SLJREVIEW','CHREVIEW','BLREVIEW','HBREVIEW','KIREVIEW','CRITICASREVIEW','ANOTES') {
+ if (exists $response->{$available_type} && $response->{$available_type} =~ /$available_type/) {
+ $syndetics_elements->{$available_type} = $available_type;
+ #warn "RESPONSE: $available_type : $response->{$available_type}";
+ }
+ }
+ return $syndetics_elements if $syndetics_elements;
+}
+
sub get_syndetics_summary {
my ( $isbn ) = @_;
my $syndetics_client_code = C4::Context->preference('SyndeticsClientCode');
my $url = "http://syndetics.com/index.aspx?isbn=$isbn/SUMMARY.XML&client=$syndetics_client_code&type=xw10";
- my $ua = LWP::UserAgent->new;
+ my $ua = LWP::UserAgent->new;
$ua->timeout(10);
$ua->env_proxy;
- my $response = $ua->get($url);
- unless ($response->content_type =~ /xml/) {
- return;
+ my $response = $ua->get($url);
+ unless ($response->content_type =~ /xml/) {
+ return;
}
my $content = $response->content;
$content,
forcearray => [ qw(Fld520) ],
) unless !$content;
- # manipulate response USMARC VarFlds VarDFlds Notes Fld520 a
- my $summary;
- $summary = \@{$response->{VarFlds}->{VarDFlds}->{Notes}->{Fld520}} if $response;
+ # manipulate response USMARC VarFlds VarDFlds Notes Fld520 a
+ my $summary;
+ $summary = \@{$response->{VarFlds}->{VarDFlds}->{Notes}->{Fld520}} if $response;
return $summary if $summary;
}
my $syndetics_client_code = C4::Context->preference('SyndeticsClientCode');
my $url = "http://syndetics.com/index.aspx?isbn=$isbn/TOC.XML&client=$syndetics_client_code&type=xw10";
- my $ua = LWP::UserAgent->new;
+ my $ua = LWP::UserAgent->new;
$ua->timeout(10);
$ua->env_proxy;
- my $response = $ua->get($url);
- unless ($response->content_type =~ /xml/) {
- return;
- }
+ my $response = $ua->get($url);
+ unless ($response->content_type =~ /xml/) {
+ return;
+ }
- my $content = $response->content;
+ my $content = $response->content;
warn "could not retrieve $url" unless $content;
my $xmlsimple = XML::Simple->new();
$response = $xmlsimple->XMLin(
) unless !$content;
# manipulate response USMARC VarFlds VarDFlds Notes Fld520 a
my $toc;
- $toc = \@{$response->{VarFlds}->{VarDFlds}->{SSIFlds}->{Fld970}} if $response;
+ $toc = \@{$response->{VarFlds}->{VarDFlds}->{SSIFlds}->{Fld970}} if $response;
return $toc if $toc;
}
my $syndetics_client_code = C4::Context->preference('SyndeticsClientCode');
my $url = "http://syndetics.com/index.aspx?isbn=$isbn/DBCHAPTER.XML&client=$syndetics_client_code&type=xw10";
- my $ua = LWP::UserAgent->new;
+ my $ua = LWP::UserAgent->new;
$ua->timeout(10);
$ua->env_proxy;
my $response = $ua->get($url);
unless ($response->content_type =~ /xml/) {
- return;
- }
+ return;
+ }
- my $content = $response->content;
+ my $content = $response->content;
warn "could not retrieve $url" unless $content;
my $xmlsimple = XML::Simple->new();
$response = $xmlsimple->XMLin(
}
sub get_syndetics_reviews {
- my ( $isbn ) = @_;
+ my ( $isbn, $syndetics_elements ) = @_;
#normalize the ISBN
$isbn = _normalize_match_point ($isbn);
# grab the AWSAccessKeyId: mine is '0V5RRRRJZ3HR2RQFNHR2'
my $syndetics_client_code = C4::Context->preference('SyndeticsClientCode');
- my @reviews;
- my $review_sources = [
- {title => 'Library Journal Review', file => 'LJREVIEW.XML'},
- {title => 'Publishers Weekly Review', file => 'PWREVIEW.XML'},
- {title => 'School Library Journal Review', file => 'SLJREVIEW.XML'},
- {title => 'CHOICE Review', file => 'CHREVIEW.XML'},
- {title => 'Booklist Review', file => 'BLREVIEW.XML'},
- {title => 'Horn Book Review', file => 'HBREVIEW.XML'},
- {title => 'Kirkus Book Review', file => 'KIRKREVIEW.XML'},
- {title => 'Criticas Review', file => 'CRITICASREVIEW.XML'}
- ];
-
- for my $source (@$review_sources) {
- my $url = "http://syndetics.com/index.aspx?isbn=$isbn/$source->{file}&client=$syndetics_client_code&type=xw10";
-
- my $ua = LWP::UserAgent->new;
- $ua->timeout(10);
- $ua->env_proxy;
+ my @reviews;
+ my $review_sources = [
+ {title => 'Library Journal Review', file => 'LJREVIEW.XML', element => 'LJREVIEW'},
+ {title => 'Publishers Weekly Review', file => 'PWREVIEW.XML', element => 'PWREVIEW'},
+ {title => 'School Library Journal Review', file => 'SLJREVIEW.XML', element => 'SLJREVIEW'},
+ {title => 'CHOICE Review', file => 'CHREVIEW.XML', element => 'CHREVIEW'},
+ {title => 'Booklist Review', file => 'BLREVIEW.XML', element => 'BLREVIEW'},
+ {title => 'Horn Book Review', file => 'HBREVIEW.XML', element => 'HBREVIEW'},
+ {title => 'Kirkus Book Review', file => 'KIREVIEW.XML', element => 'KIREVIEW'},
+ {title => 'Criticas Review', file => 'CRITICASREVIEW.XML', element => 'CRITICASREVIEW'},
+ {title => 'Spanish Review', file => 'SPREVIEW.XML', element => 'SPREVIEW'},
+ ];
+
+ for my $source (@$review_sources) {
+ if ($syndetics_elements->{$source->{element}} and $source->{element} =~ $syndetics_elements->{$source->{element}}) {
+
+ } else {
+ #warn "Skipping $source->{element} doesn't match $syndetics_elements->{$source->{element}} \n";
+ next;
+ }
+ my $url = "http://syndetics.com/index.aspx?isbn=$isbn/$source->{file}&client=$syndetics_client_code&type=xw10";
+
+ my $ua = LWP::UserAgent->new;
+ $ua->timeout(10);
+ $ua->env_proxy;
- my $response = $ua->get($url);
- unless ($response->content_type =~ /xml/) {
- next;
- }
-
- my $content = $response->content;
- warn "could not retrieve $url" unless $content;
- my $xmlsimple = XML::Simple->new();
- eval {
- $response = $xmlsimple->XMLin(
- $content,
- forcearray => [ qw(Fld520) ],
- ) unless !$content;
- };
-
- # This particular review deserializes differently
- if ($source->{file} =~ /BLREVIEW.XML/) {
- for my $subfield_a (@{$response->{VarFlds}->{VarDFlds}->{Notes}->{Fld520}}) {
- my @content;
- for my $content (@{$subfield_a->{a}->{content}}) {
- push @content, {content => $content};
- }
- push @reviews, {title => $source->{title}, reviews => \@content}; #[ {content => $content} ]};
- }
- }
- else {
- push @reviews, {title => $source->{title}, reviews => \@{$response->{VarFlds}->{VarDFlds}->{Notes}->{Fld520}}} unless $@;
- }
-
- }
- return \@reviews;
+ my $response = $ua->get($url);
+ unless ($response->content_type =~ /xml/) {
+ next;
+ }
+
+ my $content = $response->content;
+ warn "could not retrieve $url" unless $content;
+ my $xmlsimple = XML::Simple->new();
+ eval {
+ $response = $xmlsimple->XMLin(
+ $content,
+ ForceContent => 1,
+ forcearray => [ qw(Fld520) ]
+ ) unless !$content;
+ };
+
+ for my $subfield_a (@{$response->{VarFlds}->{VarDFlds}->{Notes}->{Fld520}}) {
+ my @content;
+ # this is absurd, but sometimes this data serializes differently
+ if(ref($subfield_a->{a}->{content}) eq 'ARRAY') {
+ for my $content (@{$subfield_a->{a}->{content}}) {
+ push @content, {content => $content};
+ }
+ }
+ else {
+ push @content, {content => $subfield_a->{a}->{content}};
+ }
+ push @reviews, {title => $source->{title}, reviews => \@content};
+ }
+ }
+ return \@reviews;
}
sub get_syndetics_editions {
my $syndetics_client_code = C4::Context->preference('SyndeticsClientCode');
my $url = "http://syndetics.com/index.aspx?isbn=$isbn/FICTION.XML&client=$syndetics_client_code&type=xw10";
- my $ua = LWP::UserAgent->new;
+ my $ua = LWP::UserAgent->new;
$ua->timeout(10);
$ua->env_proxy;
) unless !$content;
# manipulate response USMARC VarFlds VarDFlds Notes Fld520 a
my $similar_items;
- $similar_items = \@{$response->{VarFlds}->{VarDFlds}->{NumbCode}->{Fld020}} if $response;
+ $similar_items = \@{$response->{VarFlds}->{VarDFlds}->{NumbCode}->{Fld020}} if $response;
return $similar_items if $similar_items;
}
+sub get_syndetics_anotes {
+ my ( $isbn ) = @_;
+
+ #normalize the ISBN
+ $isbn = _normalize_match_point ($isbn);
+
+ # grab the AWSAccessKeyId: mine is '0V5RRRRJZ3HR2RQFNHR2'
+ my $syndetics_client_code = C4::Context->preference('SyndeticsClientCode');
+
+ my $url = "http://syndetics.com/index.aspx?isbn=$isbn/ANOTES.XML&client=$syndetics_client_code&type=xw10";
+ my $ua = LWP::UserAgent->new;
+ $ua->timeout(10);
+ $ua->env_proxy;
+
+ my $response = $ua->get($url);
+ unless ($response->content_type =~ /xml/) {
+ return;
+ }
+
+ my $content = $response->content;
+
+ warn "could not retrieve $url" unless $content;
+ my $xmlsimple = XML::Simple->new();
+ $response = $xmlsimple->XMLin(
+ $content,
+ forcearray => [ qw(Fld980) ],
+ ForceContent => 1,
+ ) unless !$content;
+ my @anotes;
+ for my $fld980 (@{$response->{VarFlds}->{VarDFlds}->{SSIFlds}->{Fld980}}) {
+ # this is absurd, but sometimes this data serializes differently
+ if(ref($fld980->{a}->{content}) eq 'ARRAY') {
+ for my $content (@{$fld980->{a}->{content}}) {
+ push @anotes, {content => $content};
+
+ }
+ }
+ else {
+ push @anotes, {content => $fld980->{a}->{content}};
+ }
+ }
+ return \@anotes;
+}
+
sub _normalize_match_point {
- my $match_point = shift;
- (my $normalized_match_point) = $match_point =~ /([\d-]*[X]*)/;
- $normalized_match_point =~ s/-//g;
+ my $match_point = shift;
+ (my $normalized_match_point) = $match_point =~ /([\d-]*[X]*)/;
+ $normalized_match_point =~ s/-//g;
- return $normalized_match_point;
+ return $normalized_match_point;
}
1;
</div>
<!-- /TMPL_IF -->
+ <!-- TMPL_IF NAME="SyndeticsEnabled" --><!-- TMPL_IF NAME="SyndeticsSeries" --><!-- TMPL_IF NAME="SyndeticsSERIES1Exists" -->
+ <span class="results_summary">
+ <span class="label">Series Information:</span> <a target="_blank" href="http://syndetics.com/ffseries.aspx?isbn=<!-- TMPL_VAR NAME="amazonisbn" -->&type=series&num=1&client=<!-- TMPL_VAR NAME="SyndeticsClientCode" -->">Click to open in new window</a>
+ </span>
+ <!-- /TMPL_IF --><!-- /TMPL_IF -->
+ <!-- TMPL_IF NAME="SyndeticsAwards" --><!-- TMPL_IF NAME="SyndeticsAWARDS1Exists" -->
+ <span class="results_summary">
+ <span class="label">Awards:</span> <a target="_blank" href="http://syndetics.com/ffawards.aspx?isbn=<!-- TMPL_VAR NAME="amazonisbn" -->&type=awards&client=<!-- TMPL_VAR NAME="SyndeticsClientCode" -->">Click to open in new window</a>
+ </span>
+ <!-- /TMPL_IF --><!-- /TMPL_IF --><!-- /TMPL_IF -->
+
<!-- TMPL_IF NAME="BakerTaylorContentURL" -->
<span class="results_summary">
<span class="label">Enhanced Content:</span><!-- TMPL_IF NAME="OPACURLOpenInNewWindow" --><a href="<!-- TMPL_VAR NAME="BakerTaylorContentURL" ESCAPE="HTML" -->" target="_blank">Content Cafe</a><!-- TMPL_ELSE --><a href="<!-- TMPL_VAR NAME="BakerTaylorContentURL" ESCAPE="HTML" -->">Content Cafe</a><!-- /TMPL_IF -->
<!-- TMPL_IF NAME="SYNDETICS_TOC" -->
<li> <a href="/cgi-bin/koha/opac-detail.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->#toc">TOC</a></li>
<!-- /TMPL_IF -->
+<!-- TMPL_IF NAME="SyndeticsEnabled" -->
<!-- TMPL_IF NAME="SyndeticsExcerpt" --><!-- TMPL_IF NAME="SYNDETICS_EXCERPT" -->
<li> <a href="/cgi-bin/koha/opac-detail.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->#excerpt">Excerpt</a></li>
<!-- /TMPL_IF --><!-- /TMPL_IF -->
<!-- TMPL_IF NAME="SyndeticsReviews" --><!-- TMPL_IF NAME="SYNDETICS_REVIEWS" -->
<li> <a href="/cgi-bin/koha/opac-detail.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->#reviews">Reviews</a></li>
<!-- /TMPL_IF --><!-- /TMPL_IF -->
+<!-- TMPL_IF NAME="SyndeticsAuthorNotes" --><!-- TMPL_IF NAME="SYNDETICS_ANOTES" -->
+ <li> <a href="/cgi-bin/koha/opac-detail.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->#anotes">About the Author</a></li>
+<!-- /TMPL_IF --><!-- /TMPL_IF -->
+<!-- /TMPL_IF -->
<!-- TMPL_IF name="subscriptionsnumber" --><li>
<a href="/cgi-bin/koha/opac-detail.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->#subscriptions">Subscriptions</a>
</li><!-- /TMPL_IF -->
<!-- /TMPL_IF -->
<!-- /TMPL_LOOP -->
<!-- /TMPL_IF-->
-
-<!-- TMPL_IF NAME="SyndeticsSummary" -->
+<!-- TMPL_IF NAME="SyndeticsEnabled" -->
+<!-- TMPL_IF NAME="SyndeticsSummary" --><!-- TMPL_IF NAME="SyndeticsSUMMARYExists" -->
<!-- TMPL_LOOP NAME="SYNDETICS_SUMMARY" -->
<!-- TMPL_IF NAME="a" -->
- <h4>From Syndetics:</h4>
+ <h4>Enhanced Description:</h4>
<p><!-- TMPL_VAR NAME="a" --></p>
<!-- /TMPL_IF -->
<!-- /TMPL_LOOP -->
+<!-- /TMPL_IF --><!-- /TMPL_IF -->
<!-- /TMPL_IF -->
<!-- TMPL_IF name="MARCNOTES" -->
<!-- /TMPL_IF -->
</div>
</div>
-
+<!-- TMPL_IF NAME="SyndeticsEnabled" -->
<div id="toc">
<div class="content_set">
<!-- TMPL_IF NAME="SyndeticsTOC" --><!-- TMPL_IF NAME="SYNDETICS_TOC" -->
</div>
</div>
+<div id="anotes">
+<div class="content_set">
+<!-- TMPL_IF NAME="SyndeticsAuthorNotes" --><!-- TMPL_IF NAME="SYNDETICS_ANOTES" -->
+<!-- TMPL_LOOP NAME="SYNDETICS_ANOTES" -->
+ <!-- TMPL_IF NAME="content" -->
+ <!-- TMPL_VAR NAME="content" -->
+ <!-- /TMPL_IF -->
+<!-- /TMPL_LOOP -->
+<!-- /TMPL_IF --><!-- /TMPL_IF -->
+</div>
+</div>
+
+<!-- /TMPL_IF -->
<!-- TMPL_IF name="subscriptionsnumber" -->
<div id="subscriptions">
<h2>This is a serial subscription</h2>
use C4::Dates qw/format_date/;
use C4::XISBN qw(get_xisbns get_biblionumber_from_isbn get_biblio_from_xisbn);
use C4::External::Amazon;
-use C4::External::Syndetics qw(get_syndetics_summary get_syndetics_toc get_syndetics_excerpt get_syndetics_reviews );
+use C4::External::Syndetics qw(get_syndetics_index get_syndetics_summary get_syndetics_toc get_syndetics_excerpt get_syndetics_reviews get_syndetics_anotes );
use C4::Review;
use C4::Serials;
use C4::Members;
$template->param( AMAZON_EDITORIAL_REVIEWS => $editorial_reviews );
}
-if ( C4::Context->preference("SyndeticsEnabled") && C4::Context->preference("SyndeticsSummary") ) {
+my $syndetics_elements;
+if ( C4::Context->preference("SyndeticsEnabled") ) {
+ eval {
+ $syndetics_elements = &get_syndetics_index($xisbn);
+ for my $element (values %$syndetics_elements) {
+ $template->param("Syndetics$element"."Exists" => 1 );
+ #warn "Exists: "."Syndetics$element"."Exists";
+ }
+ };
+ warn $@ if $@;
+}
+
+if ( C4::Context->preference("SyndeticsEnabled")
+ && C4::Context->preference("SyndeticsSummary")
+ && $syndetics_elements->{'SUMMARY'} =~ /SUMMARY/) {
eval {
my $syndetics_summary = &get_syndetics_summary($xisbn);
$template->param( SYNDETICS_SUMMARY => $syndetics_summary );
}
-if ( C4::Context->preference("SyndeticsEnabled") && C4::Context->preference("SyndeticsTOC") ) {
+if ( C4::Context->preference("SyndeticsEnabled")
+ && C4::Context->preference("SyndeticsTOC")
+ && $syndetics_elements->{'TOC'} =~ /TOC/) {
eval {
my $syndetics_toc = &get_syndetics_toc($xisbn);
$template->param( SYNDETICS_TOC => $syndetics_toc );
warn $@ if $@;
}
-if ( C4::Context->preference("SyndeticsEnabled") && C4::Context->preference("SyndeticsExcerpt") ) {
+if ( C4::Context->preference("SyndeticsEnabled")
+ && C4::Context->preference("SyndeticsExcerpt")
+ && $syndetics_elements->{'DBCHAPTER'} =~ /DBCHAPTER/ ) {
eval {
my $syndetics_excerpt = &get_syndetics_excerpt($xisbn);
$template->param( SYNDETICS_EXCERPT => $syndetics_excerpt );
warn $@ if $@;
}
-if ( C4::Context->preference("SyndeticsEnabled") && C4::Context->preference("SyndeticsReviews") ) {
+if ( C4::Context->preference("SyndeticsEnabled")
+ && C4::Context->preference("SyndeticsReviews")) {
eval {
- my $syndetics_reviews = &get_syndetics_reviews($xisbn);
+ my $syndetics_reviews = &get_syndetics_reviews($xisbn,$syndetics_elements);
$template->param( SYNDETICS_REVIEWS => $syndetics_reviews );
};
warn $@ if $@;
}
+if ( C4::Context->preference("SyndeticsEnabled")
+ && C4::Context->preference("SyndeticsAuthorNotes")
+ && $syndetics_elements->{'ANOTES'} =~ /ANOTES/ ) {
+ eval {
+ my $syndetics_anotes = &get_syndetics_anotes($xisbn);
+ $template->param( SYNDETICS_ANOTES => $syndetics_anotes );
+ };
+ warn $@ if $@;
+}
+
# Shelf Browser Stuff
if (C4::Context->preference("OPACShelfBrowser")) {
# pick the first itemnumber unless one was selected by the user