| 1 |
114 |
dpavlin |
#!/usr/bin/perl -w |
| 2 |
|
|
|
| 3 |
|
|
use strict; |
| 4 |
|
|
use HTML::TreeBuilder; |
| 5 |
|
|
use Data::Dumper; |
| 6 |
|
|
use XML::RSS; |
| 7 |
|
|
use LWP::Simple; |
| 8 |
|
|
use CGI::Simple; |
| 9 |
115 |
dpavlin |
use POSIX qw/strftime/; |
| 10 |
114 |
dpavlin |
|
| 11 |
115 |
dpavlin |
my $debug = 0; |
| 12 |
|
|
|
| 13 |
114 |
dpavlin |
my $q = new CGI::Simple; |
| 14 |
|
|
|
| 15 |
|
|
print $q->header( 'text/xml' ); |
| 16 |
|
|
|
| 17 |
|
|
my ($od, $do) = ('Zagreb+Gl.+kol.','Kusto%9Aija'); |
| 18 |
|
|
|
| 19 |
|
|
if ($q->param('r')) { |
| 20 |
|
|
my $t = $od; $od = $do; $do = $t; |
| 21 |
|
|
} |
| 22 |
|
|
|
| 23 |
115 |
dpavlin |
sub _s { |
| 24 |
|
|
my $v = shift || return; |
| 25 |
|
|
$v =~ s/\s+/ /g; |
| 26 |
|
|
$v =~ s/^\s+//; |
| 27 |
|
|
$v =~ s/\s+$//; |
| 28 |
|
|
return $v; |
| 29 |
|
|
} |
| 30 |
114 |
dpavlin |
|
| 31 |
115 |
dpavlin |
sub hhmm2m { |
| 32 |
|
|
my $t = shift || return; |
| 33 |
|
|
my ($h,$m) = split(/:/,$t,2) or return; |
| 34 |
|
|
return $h * 60 + $m; |
| 35 |
|
|
} |
| 36 |
|
|
|
| 37 |
114 |
dpavlin |
my $tree = HTML::TreeBuilder->new; |
| 38 |
|
|
|
| 39 |
115 |
dpavlin |
# on-line |
| 40 |
|
|
my $url = 'http://vred.hznet.hr/hzinfo/Default.asp?KO=' . $od . '&Category=hzinfo&Service=PANO&LANG=HR&OD1=D&SCREEN=2'; |
| 41 |
|
|
|
| 42 |
114 |
dpavlin |
$tree->parse( get($url) ); |
| 43 |
|
|
|
| 44 |
115 |
dpavlin |
my $online; |
| 45 |
|
|
|
| 46 |
|
|
foreach my $tr ($tree->look_down('_tag','tr')) { |
| 47 |
|
|
my @line; |
| 48 |
|
|
foreach my $td ($tr->look_down('_tag','td')) { |
| 49 |
|
|
push @line, _s( $td->as_text ); |
| 50 |
|
|
} |
| 51 |
|
|
#print STDERR "$#line : ",join(",",@line),"\n" if ($debug); |
| 52 |
|
|
$online->{ $line[0] } = { |
| 53 |
|
|
redoviti_dolazak => $line[1], |
| 54 |
|
|
kasni => $line[2], |
| 55 |
|
|
} if ($#line >= 5); |
| 56 |
|
|
} |
| 57 |
|
|
|
| 58 |
|
|
print STDERR Dumper($online) if ($debug); |
| 59 |
|
|
|
| 60 |
|
|
$tree->delete; # clear memory! |
| 61 |
|
|
|
| 62 |
|
|
$tree = HTML::TreeBuilder->new; |
| 63 |
|
|
|
| 64 |
|
|
# vozni red |
| 65 |
|
|
$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'; |
| 66 |
|
|
$tree->parse( get($url) ); |
| 67 |
|
|
|
| 68 |
|
|
my $rss = new XML::RSS (version => '2.0'); |
| 69 |
|
|
|
| 70 |
|
|
|
| 71 |
114 |
dpavlin |
$od =~ s/\+/ /g; $do =~ s/\+/ /g; |
| 72 |
|
|
$od =~ s/%9A/s/g; $do =~ s/%9A/s/g; |
| 73 |
|
|
|
| 74 |
115 |
dpavlin |
my $title = $od . ' -> ' . $do; |
| 75 |
|
|
$title =~ s/\+/ /g; |
| 76 |
|
|
$title =~ s/%9A/s/g; |
| 77 |
|
|
|
| 78 |
114 |
dpavlin |
$rss->channel( |
| 79 |
115 |
dpavlin |
title => $title, |
| 80 |
114 |
dpavlin |
link => $url, |
| 81 |
115 |
dpavlin |
description => "vozni red $title", |
| 82 |
|
|
ttl => 5, |
| 83 |
|
|
minupdates => 5, |
| 84 |
114 |
dpavlin |
); |
| 85 |
|
|
|
| 86 |
|
|
foreach my $tr ($tree->look_down('_tag','tr')) { |
| 87 |
|
|
my @line; |
| 88 |
|
|
foreach my $td ($tr->look_down('_tag','td')) { |
| 89 |
115 |
dpavlin |
push @line, _s( $td->as_text ) if ($td->attr('class') && $td->attr('class') eq 'normalni_tekst_ul'); |
| 90 |
114 |
dpavlin |
} |
| 91 |
|
|
|
| 92 |
115 |
dpavlin |
next unless (@line); |
| 93 |
|
|
|
| 94 |
116 |
dpavlin |
print STDERR Dumper(\@line) if ($debug); |
| 95 |
115 |
dpavlin |
|
| 96 |
|
|
my $title = $line[0] . " - " . $line[2]; |
| 97 |
|
|
my $desc; |
| 98 |
|
|
if (my $ovaj = $online->{$line[1]} ) { |
| 99 |
|
|
my $kasni = hhmm2m( $ovaj->{redoviti_dolazak} ) + $ovaj->{kasni} - hhmm2m( $line[0] ); |
| 100 |
|
|
$title .= " [$kasni]"; |
| 101 |
|
|
$desc = "redoviti dolazak: " . $ovaj->{redoviti_dolazak} . " kasni " . $ovaj->{kasni} . " redoviti polazak: " . $line[0] . " razmak: $kasni"; |
| 102 |
|
|
} |
| 103 |
|
|
|
| 104 |
114 |
dpavlin |
$rss->add_item( |
| 105 |
115 |
dpavlin |
title => $title, |
| 106 |
116 |
dpavlin |
link => 'http://localhost/' . $line[1] . '/' . $line[0] . '/' . $line[2], |
| 107 |
115 |
dpavlin |
description => $desc, |
| 108 |
|
|
); |
| 109 |
114 |
dpavlin |
} |
| 110 |
|
|
|
| 111 |
|
|
$tree->delete; # clear memory! |
| 112 |
|
|
|
| 113 |
|
|
print $rss->as_string; |