| 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;