| Revision 80 (by dpavlin, 2009/03/29 01:28:23) |
- use disk cache for Koha pages
- move sid to item mungling into meteor |
package Meteor::Koha;
use strict;
use warnings;
my $use_disk_cache = 1;
use LWP::UserAgent;
my $ua = LWP::UserAgent->new;
our $cache;
use HTML::Query qw/Query/;
use File::Slurp;
use Encode qw/decode/;
use Data::Dump qw/dump/;
sub item {
my ( $class, $client, $sid ) = @_;
my $item = unpack('h*', substr($sid,-8)) % 10000;
my $html;
my $status = 200;
my $path = "cache/$item.html";
if ( $html = $cache->{$item} ) {
warn "# koha item $item from cache\n";
} elsif ( $use_disk_cache && -e $path ) {
$html = $cache->{$item} = read_file( $path );
} else {
my $url = 'http://koha.ffzg.hr/cgi-bin/koha/opac-detail.pl?biblionumber=' . $item;
my $response = $ua->get( $url );
if ($response->is_success) {
$html = $response->content;
write_file( "cache/$item.koha.html", $html );
warn "## size before: ", length( $html );
$html = decode( 'utf-8', $html );
my $q = Query( text => $html, 'div.container' )
|| die;
$html = $q->as_HTML->[0];
warn "## size after: ", length( $html ), dump( $html );
$cache->{$item} = $html;
write_file( $path, $html );
} else {
$html = qq{Can't load $item } . $response->status_line;
# $status = 404;
}
}
my $len = length($html);
warn "# koha item $item [$len]\n";
$client->write(
"HTTP/1.1 $status OK\r\n" .
"Content-Type: text/html\r\n" .
"Content-length: $len\r\n" .
"Connection: close\r\n" .
"\r\n\r\n$html\r\n"
);
}
1;