Line # Revision Author
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;