summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Friesel <derf@finalrewind.org>2014-01-10 21:56:26 +0100
committerDaniel Friesel <derf@finalrewind.org>2014-01-10 21:56:26 +0100
commit57c364c44bc177569ded124c4b710f052942e943 (patch)
treeba43997f1332a57c8524079d79555a5b59c17561
parenta7491a345f71b7805d2141424e505408e46e1297 (diff)
db-iris: Add -c / --class option, rename -m/--mot to -T/--type
-rwxr-xr-xbin/db-iris73
-rw-r--r--lib/Travel/Status/DE/IRIS.pm2
-rw-r--r--lib/Travel/Status/DE/IRIS/Result.pm20
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