summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Friesel <derf@finalrewind.org>2011-06-24 10:10:35 +0200
committerDaniel Friesel <derf@finalrewind.org>2011-06-24 10:10:35 +0200
commit86c3e3526179429c5fa12ecb9aa2eb7d2c0a7a9b (patch)
treec84ef324d7010766c061b359a6aab83539aa2353
parentc1edc66f2c9951f9075f91c209ccf51b7ab319ee (diff)
Add support for means of transport filtering
-rwxr-xr-xbin/db-ris17
-rw-r--r--lib/Travel/Status/DE/DeutscheBahn.pm47
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<mot> => I<\%hashref>
+
+Modes of transport to show. Accepted keys are: B<ice> (ICE trains), B<ic_ec>
+(IC and EC trains), B<d> (InterRegio and similarly fast trains), B<nv>
+("Nahverkehr", mostly RegionalExpress trains), B<s> ("S-Bahn"), B<bus>,
+B<ferry>, B<u> ("U-Bahn") and B<tram>.
+
+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()