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;