#!/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;