]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/perlmods/OpenILS/WWW/AddedContent/Syndetic.pm
adding generalize added content handlers
[Evergreen.git] / Open-ILS / src / perlmods / OpenILS / WWW / AddedContent / Syndetic.pm
1 package OpenILS::WWW::AddedContent::Syndetic;
2 use strict; use warnings;
3 use LWP::UserAgent;
4 use OpenSRF::Utils::Logger qw/$logger/;
5 use OpenSRF::Utils::SettingsParser;
6 use JSON;
7
8
9 sub new {
10         my( $class, $args ) = @_;
11         $class = ref $class || $class;
12         return bless($args, $class);
13 }
14
15 sub base_url {
16         my $self = shift;
17         return $self->{base_url};
18 }
19
20 sub userid {
21         my $self = shift;
22         return $self->{userid};
23 }
24
25
26 # --------------------------------------------------------------------------
27
28 sub toc_html {
29         my( $self, $key ) = @_;
30         return $self->handle_html(
31                 $self->fetch_content('toc.html', $key));
32 }
33
34 sub toc_xml {
35         my( $self, $key ) = @_;
36         return $self->handle_xml(
37                 $self->fetch_content('toc.xml', $key));
38 }
39
40 sub toc_json {
41         my( $self, $key ) = @_;
42         return $self->handle_json(
43                 $self->fetch_content('toc.xml', $key));
44 }
45
46
47 # --------------------------------------------------------------------------
48
49 sub excerpt_html {
50         my( $self, $key ) = @_;
51         return $self->handle_html(
52                 $self->fetch_content('dbchapter.html', $key));
53 }
54
55 sub excerpt_xml {
56         my( $self, $key ) = @_;
57         return $self->handle_xml(
58                 $self->fetch_content('dbchapter.xml', $key));
59 }
60
61 sub excerpt_json {
62         my( $self, $key ) = @_;
63         return $self->handle_json(
64                 $self->fetch_content('dbchapter.xml', $key));
65 }
66
67
68 # --------------------------------------------------------------------------
69
70 sub handle_json {
71         my( $self, $xml ) = @_;
72         return 0 if $xml =~ m/<title>error<\/title>/og;
73         my $doc = XML::LibXML->new->parse_string($xml);
74         return 0 unless $doc;
75         my $perl = OpenSRF::Utils::SettingsParser::XML2perl($doc->documentElement);
76         my $json = JSON->perl2JSON($perl);
77         print "Content-type: text/plain\n\n";
78         print $json;
79         return 1;
80 }
81
82 sub handle_xml {
83         my( $self, $xml ) = @_;
84         return 0 if $xml =~ m/<title>error<\/title>/og;
85         print "Content-Type: application/xml\n\n";
86         print $xml;
87         return 1;
88 }
89
90
91 sub handle_html {
92         my( $self, $content ) = @_;
93         return 0 if $content =~ m/<title>error<\/title>/og;
94
95         # Strip images because they lead to broken links
96         $content =~ s#<img.*?>.*?</img>##iog;
97         $content =~ s#<img.*?/>##iog;
98         $content =~ s#<img.*?>##iog; # - it may not be valid xml
99
100         print "Content-type: text/html\n\n";
101         print $content;
102
103         return 1;
104 }
105
106 sub fetch_content {
107         my( $self, $page, $key ) = @_;
108         my $uname = $self->userid;
109         my $url = $self->base_url . "?isbn=$key/$page&client=$uname&type=rw12";
110         $logger->info("added content URL = $url");
111         my $agent = LWP::UserAgent->new;
112         my $res = $agent->get($url);
113         die "added content request failed: $res->status_line\n" unless $res->is_success;
114         return $res->content;
115 }
116
117
118 1;