From 86c3e3526179429c5fa12ecb9aa2eb7d2c0a7a9b Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Fri, 24 Jun 2011 10:10:35 +0200 Subject: Add support for means of transport filtering --- bin/db-ris | 17 ++++++++++++- lib/Travel/Status/DE/DeutscheBahn.pm | 47 +++++++++++++++++++++++++++--------- 2 files changed, 52 insertions(+), 12 deletions(-) diff --git a/bin/db-ris b/bin/db-ris index c2c76d1..80d3d0f 100755 --- a/bin/db-ris +++ b/bin/db-ris @@ -9,14 +9,29 @@ use Getopt::Long; use Travel::Status::DE::DeutscheBahn; my ( $date, $time ); +my $types = q{}; +my %train_type; + +binmode( STDOUT, ':encoding(utf-8)' ); GetOptions( 'd|date=s' => \$date, + 'm|mot=s' => \$types, 't|time=s' => \$time, ); +for my $type ( split( qr{,}, $types ) ) { + if ( substr( $type, 0, 1 ) eq q{!} ) { + $train_type{ substr( $type, 1 ) } = 0; + } + else { + $train_type{$type} = 1; + } +} + my $status = Travel::Status::DE::DeutscheBahn->new( date => $date, + mot => \%train_type, station => shift, time => $time, ); @@ -58,7 +73,7 @@ for my $d ( $status->departures() ) { } printf( - "%5s %-10s %-80s %-20s %-2d %s\n", + "%5s %-10s %-80s %-20s %-2s %s\n", $d->time, $d->train, join( q{ }, @via_show ), $d->destination, $d->platform, $d->info ); diff --git a/lib/Travel/Status/DE/DeutscheBahn.pm b/lib/Travel/Status/DE/DeutscheBahn.pm index 32c017d..8407394 100644 --- a/lib/Travel/Status/DE/DeutscheBahn.pm +++ b/lib/Travel/Status/DE/DeutscheBahn.pm @@ -24,21 +24,34 @@ sub new { } my $ref = { + mot_filter => [ + $conf{mot}->{ice} // 1, + $conf{mot}->{ic_ec} // 1, + $conf{mot}->{d} // 1, + $conf{mot}->{nv} // 1, + $conf{mot}->{s} // 1, + $conf{mot}->{bus} // 0, + $conf{mot}->{ferry} // 0, + $conf{mot}->{u} // 0, + $conf{mot}->{tram} // 0, + ], post => { - input => $conf{station}, - inputRef => q{#}, - date => $conf{date} || $date, - time => $conf{time} || $time, - productsFilter => '1111101000000000', - REQTrain_name => q{}, - maxJourneys => 20, - delayedJourney => undef, - start => 'Suchen', - boardType => 'Abfahrt', - ao => 'yes', + advancedProductMode => q{}, + input => $conf{station}, + date => $conf{date} || $date, + time => $conf{time} || $time, + REQTrain_name => q{}, + start => 'Suchen', + boardType => 'dep', }, }; + for my $i ( 0 .. @{ $ref->{mot_filter} } ) { + if ( $ref->{mot_filter}->[$i] ) { + $ref->{post}->{"GUIREQProduct_$i"} = 'on'; + } + } + $ref->{html} = $ua->post( 'http://reiseauskunft.bahn.de/bin/bhftafel.exe/dn?rt=1', $ref->{post} )->content(); @@ -204,6 +217,18 @@ Date to report for. Defaults to the current day. Time to report for. Defaults to now. +=item B => I<\%hashref> + +Modes of transport to show. Accepted keys are: B (ICE trains), B +(IC and EC trains), B (InterRegio and similarly fast trains), B +("Nahverkehr", mostly RegionalExpress trains), B ("S-Bahn"), B, +B, B ("U-Bahn") and B. + +Setting a mode (as hash key) to 1 includes it, 0 excludes it. undef leaves it +at the default. + +By default, the following are shown: ice, ic_ec, d, nv, s. + =back =item $status->departures() -- cgit v1.2.3