diff options
Diffstat (limited to 'bin/mris')
-rwxr-xr-x | bin/mris | 127 |
1 files changed, 28 insertions, 99 deletions
@@ -1,130 +1,55 @@ #!/usr/bin/env perl -## Copyright © 2010 by Daniel Friesel <derf@finalrewind.org> -## License: WTFPL <http://sam.zoy.org/wtfpl> -## 0. You just DO WHAT THE FUCK YOU WANT TO. use strict; use warnings; use 5.010; -use LWP::UserAgent; -use XML::LibXML; - -my @now = localtime(time()); -my $date = sprintf("%d.%d.%d", $now[3], $now[4] + 1 , $now[5] + 1900); -my $time = sprintf("%d:%d", $now[2], $now[1]); - -my $post = { - input => $ARGV[0], - inputRef => '#', - date => $date, - time => $time, - productsFilter => '1111101000000000', - REQTrain_name => q{}, - maxJourneys => 20, - delayedJourney => undef, - start => 'Suchen', - boardType => 'Abfahrt', - ao => 'yes', -}; - -my $ua = LWP::UserAgent->new(); -my $reply = $ua->post('http://mobile.bahn.de/bin/mobil/bhftafel.exe/dn?rt=1', $post)->content(); - -my $tree = XML::LibXML->load_html( - string => $reply, - recover => 2, - suppress_errors => 1, - suppress_warnings => 1, -); - -my $xp_element = XML::LibXML::XPathExpression->new('//table[@class="result stboard dep"]/tr'); -my $xp_time = XML::LibXML::XPathExpression->new('./td[@class="time"]'); -my $xp_train = XML::LibXML::XPathExpression->new('./td[@class="train"]'); -my $xp_route = XML::LibXML::XPathExpression->new('./td[@class="route"]'); -my $xp_dest = XML::LibXML::XPathExpression->new('./td[@class="route"]//a'); -my $xp_platform = XML::LibXML::XPathExpression->new('./td[@class="platform"]'); -my $xp_info = XML::LibXML::XPathExpression->new('./td[@class="ris"]'); - -my $re_via = qr{ - ^ (.+) \n - \d{1,2}:\d{1,2} -}mx; - -for my $tr (@{$tree->findnodes($xp_element)}) { - - my ($n_time) = $tr->findnodes($xp_time); - my (undef, $n_train) = $tr->findnodes($xp_train); - my ($n_route) = $tr->findnodes($xp_route); - my ($n_dest) = $tr->findnodes($xp_dest); - my ($n_platform)= $tr->findnodes($xp_platform); - my ($n_info) = $tr->findnodes($xp_info); - my $first = 1; - - if (not ($n_time and $n_dest)) - { - next; - } +our $VERSION = '0.0'; - my $time = $n_time->textContent(); - my $train = $n_train->textContent(); - my $route = $n_route->textContent(); - my $dest = $n_dest->textContent(); - my $platform = $n_platform->textContent(); - my $info = $n_info->textContent(); - my $via_str; - my (@via, @via_main, @via_show); - - for my $str ($time, $train, $dest, $platform, $info) { - $str =~ s/\n//mg; - $str =~ tr/ //s; - } +use Travel::Status::DE::DeutscheBahn; - $info =~ s/,Grund//; +my $status = Travel::Status::DE::DeutscheBahn->new( station => shift, ); - while ($route =~ m{$re_via}g) { - if ($first) { - $first = 0; - next; - } - my $stop = $1; - push(@via, $stop); - if ($stop =~ /Hbf$/) { - push(@via_main, $stop); +for my $d ( $status->departures() ) { + + my ( @via, @via_main, @via_show ); + + @via = $d->route; + + for my $stop (@via) { + if ( $stop =~ m{ ?Hbf} ) { + push( @via_main, $stop ); } } pop(@via); - if (@via_main and @via and $via[0] eq $via_main[0]) { + if ( @via_main and @via and $via[0] eq $via_main[0] ) { shift(@via_main); } - if (@via < 3) { + if ( @via < 3 ) { @via_show = @via; } else { - @via_show = splice(@via, 0, (@via_main > 2 ? 1 : 3 - @via_main)); + @via_show = splice( @via, 0, ( @via_main > 2 ? 1 : 3 - @via_main ) ); - while (@via_show < 3 and @via_main) { + while ( @via_show < 3 and @via_main ) { my $stop = shift(@via_main); - if ($stop ~~ \@via_show) { + if ( $stop ~~ \@via_show or $stop eq $d->destination ) { next; } - push(@via_show, $stop); + push( @via_show, $stop ); } } - + for my $stop (@via_show) { + $stop =~ s{ ?Hbf}{}; + } printf( "%5s %-10s %-80s %-20s %-2d %s\n", - $time, - $train, - join(' ', @via_show), - $dest, - $platform, - $info, + $d->time, $d->train, join( q{ }, @via_show ), + $d->destination, $d->platform, $d->info ); - } __END__ @@ -133,6 +58,10 @@ __END__ =head1 SYNOPSIS +=head1 VERSION + +version 0.0 + =head1 DESCRIPTION =head1 OPTIONS @@ -151,4 +80,4 @@ Copyright (C) 2010 by Daniel Friesel E<lt>derf@finalrewind.orgE<gt> =head1 LICENSE - 0. You just DO WHAT THE FUCK YOU WANT TO. +This program is licensed under the same terms as Perl itself. |