diff options
-rwxr-xr-x | bin/db-iris | 73 | ||||
-rw-r--r-- | lib/Travel/Status/DE/IRIS.pm | 2 | ||||
-rw-r--r-- | lib/Travel/Status/DE/IRIS/Result.pm | 20 |
3 files changed, 61 insertions, 34 deletions
diff --git a/bin/db-iris b/bin/db-iris index 467f211..06abdc5 100755 --- a/bin/db-iris +++ b/bin/db-iris @@ -12,6 +12,7 @@ use DateTime::Format::Strptime; use Encode qw(decode); use Getopt::Long qw(:config no_ignore_case); use List::Util qw(first max); +use List::MoreUtils qw(none); use Travel::Status::DE::IRIS; use Travel::Status::DE::IRIS::Stations; @@ -20,7 +21,7 @@ my $datetime = DateTime->now( time_zone => 'Europe/Berlin' ); my $arrivals = 0; my $filter_via; my $show_full_route = 0; -my ( @grep_traintypes, @grep_platforms ); +my ( @grep_class, @grep_type, @grep_platform ); my @output; @@ -29,14 +30,15 @@ binmode( STDOUT, ':encoding(utf-8)' ); @ARGV = map { decode( 'UTF-8', $_ ) } @ARGV; GetOptions( - 'd|date=s' => \$date, - 'f|full-route' => \$show_full_route, - 'h|help' => sub { show_help(0) }, - 'm|mot=s' => \@grep_traintypes, - 'p|platforms=s@' => \@grep_platforms, - 't|time=s' => \$time, - 'v|via=s' => \$filter_via, - 'V|version' => \&show_version, + 'c|class=s@' => \@grep_class, + 'd|date=s' => \$date, + 'f|full-route' => \$show_full_route, + 'h|help' => sub { show_help(0) }, + 'p|platform=s@' => \@grep_platform, + 't|time=s' => \$time, + 'T|type=s' => \@grep_type, + 'v|via=s' => \$filter_via, + 'V|version' => \&show_version, ) or show_help(1); @@ -45,8 +47,9 @@ if ( @ARGV != 1 ) { } # opt=foo,bar support -@grep_platforms = split( qr{,}, join( q{,}, @grep_platforms ) ); -@grep_traintypes = split( qr{,}, join( q{,}, @grep_traintypes ) ); +@grep_class = split( qr{,}, join( q{,}, @grep_class ) ); +@grep_platform = split( qr{,}, join( q{,}, @grep_platform ) ); +@grep_type = split( qr{,}, join( q{,}, @grep_type ) ); my ($station) = @ARGV; $station = get_station($station); @@ -149,8 +152,9 @@ for my $d ( $status->results() ) { @via = $d->route_post; if ( ( $filter_via and not( first { $_ =~ m{$filter_via}io } @via ) ) - or ( @grep_platforms and not( $d->platform ~~ \@grep_platforms ) ) - or ( @grep_traintypes and not( $d->type ~~ \@grep_traintypes ) ) ) + or ( @grep_class and none { $_ ~~ \@grep_class } $d->classes ) + or ( @grep_platform and not( $d->platform ~~ \@grep_platform ) ) + or ( @grep_type and not( $d->type ~~ \@grep_type ) ) ) { next; } @@ -203,6 +207,18 @@ the big departure screens installed at most main stations. =over +=item B<-c>, B<--class> I<classlist> + +Comma-separated list of train classes to filter by. Using this option +causes all trains whose class is not in I<classlist> to be discarded. + +Valid classes are: + + D Non-DB train. Usually local transport + F "Fernverkehr", long-distance transport + N "Nahverkehr", local and regional transport + S S-Bahn, rather slow local/regional transport + =item B<-d>, B<--date> I<date> Request results for I<date> in dd.mm. oder dd.mm.YYYY format. Note that only @@ -213,13 +229,23 @@ IRIS backend, larger ones will not return data. Show the entire route of all trains (both before and after I<station>). -=item B<-m>, B<--mot> I<motlist> +=item B<-p>, B<--platforms> I<platforms> + +Only show arrivals/departures at I<platforms> (comma-separated list, option may +be repeated). + +=item B<-t>, B<--time> I<time> + +Request results for I<time> in HH:MM oder HH:MM:SS format. Note that only +slight deviations (a few hours max) from the current time are supported by the +IRIS backend, larger ones will not return data. + +=item B<-T>, B<--type> I<typelist> -Comma-separated list of modes of transport to filter by. Using this option -causes all arrivals/departures whose mot not in I<motlist> to be discarded. +Comma-separated list of train types to filter by. Using this option +causes all arrivals/departures whose type is not in I<typelist> to be discarded. -The mot is based on the train type and accepts a superset of the following -values: +The following valid values are known: local transport: IR Inter-Regio (rare in Germany, mostly used in Switzerland) @@ -240,17 +266,6 @@ include "ABR" / "NWB" (private trains included in the local transport tariff system), "HKX" (private train not included in any DB tariffs) and "SBB" (unknown swiss train class) -=item B<-p>, B<--platforms> I<platforms> - -Only show arrivals/departures at I<platforms> (comma-separated list, option may -be repeated). - -=item B<-t>, B<--time> I<time> - -Request results for I<time> in HH:MM oder HH:MM:SS format. Note that only -slight deviations (a few hours max) from the current time are supported by the -IRIS backend, larger ones will not return data. - =item B<-v>, B<--via> I<viastation> Only show trains serving I<viastation> after I<station>. diff --git a/lib/Travel/Status/DE/IRIS.pm b/lib/Travel/Status/DE/IRIS.pm index 203c9bf..81c6797 100644 --- a/lib/Travel/Status/DE/IRIS.pm +++ b/lib/Travel/Status/DE/IRIS.pm @@ -88,7 +88,7 @@ sub add_result { my %data = ( raw_id => $id, - class => $e_tl->getAttribute('f'), # D N S F + classes => $e_tl->getAttribute('f'), # D N S F unknown_t => $e_tl->getAttribute('t'), # p train_no => $e_tl->getAttribute('n'), # dep number type => $e_tl->getAttribute('c'), # S/ICE/ERB/... diff --git a/lib/Travel/Status/DE/IRIS/Result.pm b/lib/Travel/Status/DE/IRIS/Result.pm index 016393d..4eb3096 100644 --- a/lib/Travel/Status/DE/IRIS/Result.pm +++ b/lib/Travel/Status/DE/IRIS/Result.pm @@ -16,10 +16,10 @@ use List::MoreUtils qw(uniq); our $VERSION = '0.00'; Travel::Status::DE::IRIS::Result->mk_ro_accessors( - qw(arrival date datetime delay departure is_cancelled line_no platform raw_id - realtime_xml route_start route_end - sched_arrival sched_departure sched_route_start sched_route_end - start stop_no time train_id train_no type unknown_t unknown_o) + qw(arrival classes date datetime delay departure is_cancelled line_no + platform raw_id realtime_xml route_start route_end sched_arrival + sched_departure sched_route_start sched_route_end start stop_no time + train_id train_no type unknown_t unknown_o) ); sub new { @@ -398,6 +398,18 @@ the platform, time, route and more. DateTime(3pm) object for the arrival date and time. undef if the train starts here. Contains realtime data if available. +=item $result->classes + +List of characters indicating the class(es) of this train, may be empty. This +is slighty related to B<type>, but more generic. At this time, the following +classes are known: + + D Non-DB train. Usually local transport + D,F Non-DB train, long distance transport + F "Fernverkehr", long-distance transport + N "Nahverkehr", local and regional transport + S S-Bahn, rather slow local/regional transport + =item $result->date Scheduled departure date if available, arrival date otherwise (e.g. if the |