Revision 116 (by dpavlin, 2006/01/10 09:08:08) new link URI (which uniques drifting trans), debug output goes to STDERR
#!/usr/bin/perl -w

use strict;
use HTML::TreeBuilder;
use Data::Dumper;
use XML::RSS;
use LWP::Simple;
use CGI::Simple;
use POSIX qw/strftime/;

my $debug = 0;

my $q = new CGI::Simple;

print $q->header( 'text/xml' );

my ($od, $do) = ('Zagreb+Gl.+kol.','Kusto%9Aija');

if ($q->param('r')) {
	my $t = $od; $od = $do; $do = $t;
}

sub _s {
	my $v = shift || return;
	$v =~ s/\s+/ /g;
	$v =~ s/^\s+//;
	$v =~ s/\s+$//;
	return $v;
}

sub hhmm2m {
	my $t = shift || return;
	my ($h,$m) = split(/:/,$t,2) or return;
	return $h * 60 + $m;
}

my $tree = HTML::TreeBuilder->new;

# on-line
my $url = 'http://vred.hznet.hr/hzinfo/Default.asp?KO=' . $od . '&Category=hzinfo&Service=PANO&LANG=HR&OD1=D&SCREEN=2';

$tree->parse( get($url) );

my $online;

foreach my $tr ($tree->look_down('_tag','tr')) {
	my @line;
	foreach my $td ($tr->look_down('_tag','td')) {
		push @line, _s( $td->as_text );
	}
	#print STDERR "$#line : ",join(",",@line),"\n" if ($debug);
	$online->{ $line[0] } = {
		redoviti_dolazak => $line[1],
		kasni => $line[2],
	} if ($#line >= 5);
}

print STDERR Dumper($online) if ($debug);

$tree->delete; # clear memory!

$tree = HTML::TreeBuilder->new;

# vozni red
$url = 'http://vred.hznet.hr/hzinfo/Default.asp?NKOD1=' . $od . '&ODH=&NKDO1=' . $do . '&DOH=&K1=&K2=&DT=' . strftime("%d.%m.%y", localtime) . '&DV=D&Category=hzinfo&Service=vred3&LANG=hr&SCREEN=2';
$tree->parse( get($url) );

my $rss = new XML::RSS (version => '2.0');


$od =~ s/\+/ /g; $do =~ s/\+/ /g;
$od =~ s/%9A/s/g; $do =~ s/%9A/s/g;

my $title = $od . ' -> ' . $do;
$title =~ s/\+/ /g;
$title =~ s/%9A/s/g;

$rss->channel(
	title => $title,
	link => $url,
	description => "vozni red $title",
	ttl => 5,
	minupdates => 5,
);

foreach my $tr ($tree->look_down('_tag','tr')) {
	my @line;
	foreach my $td ($tr->look_down('_tag','td')) {
		push @line, _s( $td->as_text ) if ($td->attr('class') && $td->attr('class') eq 'normalni_tekst_ul');
	}

	next unless (@line);

	print STDERR Dumper(\@line) if ($debug);

	my $title = $line[0] . " - " . $line[2];
	my $desc;
	if (my $ovaj = $online->{$line[1]} ) {
		my $kasni = hhmm2m( $ovaj->{redoviti_dolazak} ) + $ovaj->{kasni} - hhmm2m( $line[0] );
		$title .= " [$kasni]";
		$desc = "redoviti dolazak: " . $ovaj->{redoviti_dolazak} . " kasni " . $ovaj->{kasni} . " redoviti polazak: " . $line[0] . " razmak: $kasni";
	}

	$rss->add_item(
		title => $title,
		link => 'http://localhost/' . $line[1] . '/' . $line[0] . '/' . $line[2],
		description => $desc,
	);
}

$tree->delete; # clear memory!

print $rss->as_string;