summaryrefslogtreecommitdiff
path: root/lib/Travel/Status/DE/EFA
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Travel/Status/DE/EFA')
-rw-r--r--lib/Travel/Status/DE/EFA/Line.pm137
-rw-r--r--lib/Travel/Status/DE/EFA/Result.pm225
2 files changed, 362 insertions, 0 deletions
diff --git a/lib/Travel/Status/DE/EFA/Line.pm b/lib/Travel/Status/DE/EFA/Line.pm
new file mode 100644
index 0000000..8a22fe8
--- /dev/null
+++ b/lib/Travel/Status/DE/EFA/Line.pm
@@ -0,0 +1,137 @@
+package Travel::Status::DE::EFA::Line;
+
+use strict;
+use warnings;
+use 5.010;
+
+use parent 'Class::Accessor';
+
+our $VERSION = '1.05';
+
+Travel::Status::DE::EFA::Line->mk_ro_accessors(
+ qw(direction name operator route type valid));
+
+sub new {
+ my ( $obj, %conf ) = @_;
+
+ my $ref = \%conf;
+
+ return bless( $ref, $obj );
+}
+
+sub TO_JSON {
+ my ($self) = @_;
+
+ return { %{$self} };
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+Travel::Status::DE::EFA::Line - Information about a line departing at the
+requested station
+
+=head1 SYNOPSIS
+
+ for my $line ($status->lines) {
+ printf(
+ "line %s -> %s\nRoute: %s\nType %s, operator %s\nValid: %s\n\n",
+ $line->name, $line->direction, $line->route,
+ $line->type, $line->operator, $line->valid
+ );
+ }
+
+=head1 VERSION
+
+version 1.05
+
+=head1 DESCRIPTION
+
+Travel::Status::DE::EFA::Line describes a tram/bus/train line departing at the
+stop requested by Travel::Status::DE::EFA. Note that it only covers one
+direction, so in most cases, you get two Travel::Status::DE::EFA::Line objects
+per actual line.
+
+=head1 METHODS
+
+=head2 ACCESSORS
+
+=over
+
+=item $line->direction
+
+Direction of the line. Name of either the destination stop or one on the way.
+
+=item $line->name
+
+Name of the line, e.g. "U11", "SB15", "107".
+
+=item $line->operator
+
+Operator of the line, as in the local transit company responsible for it.
+May be undefined.
+
+=item $line->route
+
+Partial route of the line (as string), usually start and destination with two
+stops in between. May be undefined.
+
+Note that start means the actual start of the line, the stop requested by
+Travel::Status::DE::EFA::Line may not even be included in this listing.
+
+=item $line->type
+
+Type of the line. Observed values so far are "Bus", "NE", "StraE<szlig>enbahn",
+"U-Bahn".
+
+=item $line->valid
+
+When / how long above information is valid.
+
+=back
+
+=head2 INTERNAL
+
+=over
+
+=item $line = Travel::Status::DE::EFA::Line->new(I<%data>)
+
+Returns a new Travel::Status::DE::EFA::Line object. You should not need to
+call this.
+
+=item $line->TO_JSON
+
+Allows the object data to be serialized to JSON.
+
+=back
+
+=head1 DIAGNOSTICS
+
+None.
+
+=head1 DEPENDENCIES
+
+=over
+
+=item Class::Accessor(3pm)
+
+=back
+
+=head1 BUGS AND LIMITATIONS
+
+The B<route> accessor returns a simple string, an array might be better suited.
+
+=head1 SEE ALSO
+
+Travel::Status::DE::EFA(3pm).
+
+=head1 AUTHOR
+
+Copyright (C) 2011 by Daniel Friesel E<lt>derf@finalrewind.orgE<gt>
+
+=head1 LICENSE
+
+This module is licensed under the same terms as Perl itself.
diff --git a/lib/Travel/Status/DE/EFA/Result.pm b/lib/Travel/Status/DE/EFA/Result.pm
new file mode 100644
index 0000000..c623f6e
--- /dev/null
+++ b/lib/Travel/Status/DE/EFA/Result.pm
@@ -0,0 +1,225 @@
+package Travel::Status::DE::EFA::Result;
+
+use strict;
+use warnings;
+use 5.010;
+
+use parent 'Class::Accessor';
+
+our $VERSION = '1.05';
+
+Travel::Status::DE::EFA::Result->mk_ro_accessors(
+ qw(countdown date delay destination is_cancelled info key line lineref platform
+ platform_db sched_date sched_time time type)
+);
+
+sub new {
+ my ( $obj, %conf ) = @_;
+
+ my $ref = \%conf;
+
+ if ($ref->{delay} eq '-9999') {
+ $ref->{delay} = 0;
+ $ref->{is_cancelled} = 1;
+ }
+ else {
+ $ref->{is_cancelled} = 0;
+ }
+
+ return bless( $ref, $obj );
+}
+
+sub TO_JSON {
+ my ($self) = @_;
+
+ return { %{$self} };
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+Travel::Status::DE::EFA::Result - Information about a single
+departure received by Travel::Status::DE::EFA
+
+=head1 SYNOPSIS
+
+ for my $departure ($status->results) {
+ printf(
+ "At %s: %s to %s from platform %s\n",
+ $departure->time, $departure->line, $departure->destination,
+ $departure->platform
+ );
+ }
+
+=head1 VERSION
+
+version 1.05
+
+=head1 DESCRIPTION
+
+Travel::Status::DE::EFA::Result describes a single departure as obtained by
+Travel::Status::DE::EFA. It contains information about the time, platform,
+line number and destination.
+
+=head1 METHODS
+
+=head2 ACCESSORS
+
+"Actual" in the description means that the delay (if available) is already
+included in the calculation, "Scheduled" means it isn't.
+
+=over
+
+=item $departure->countdown
+
+Actual time in minutes from now until the tram/bus/train will depart.
+
+If delay information is available, it is already included.
+
+=item $departure->date
+
+Actual departure date (DD.MM.YYYY).
+
+=item $departure->delay
+
+Expected delay from scheduled departure time in minutes. A delay of 0
+indicates either departure on time or that no delay information is available.
+
+=item $departure->destination
+
+Destination name.
+
+=item $departure->info
+
+Additional information related to the departure (string). If departures for
+an address were requested, this is the stop name, otherwise it may be recent
+news related to the line's schedule. If no information is available, returns
+an empty string.
+
+=item $departure->is_cancelled
+
+1 if the departure got cancelled, 0 otherwise.
+
+=item $departure->key
+
+Unknown. Unlike the name may suggest, this is not a unique key / UUID for a
+departure: On the same day, different lines departing at the same station
+may have the same key. It might, however, be unique when combined with the
+B<line> information.
+
+=item $departure->line
+
+The name/number of the line.
+
+=item $departure->lineref
+
+Travel::Status::DE::EFA::Line(3pm) object describing the departing line in
+detail.
+
+=item $departure->platform
+
+Departure platform number.
+
+=item $departure->platform_db
+
+true if the platform number is operated by DB ("Gleis x"), false ("Bstg. x")
+otherwise.
+
+Unfortunately, there is no distinction between tram and bus platforms yet,
+which also may have the same numbers.
+
+=item $departure->sched_date
+
+Scheduled departure date (DD.MM.YYYY).
+
+=item $departure->sched_time
+
+Scheduled departure time (HH:MM).
+
+=item $departure->time
+
+Actual departure time (HH:MM).
+
+=item $departure->type
+
+Type of the departure. Note that efa.vrr.de sometimes puts bogus data in this
+field. See L</DEPARTURE TYPES>.
+
+=back
+
+=head2 INTERNAL
+
+=over
+
+=item $departure = Travel::Status::DE::EFA::Result->new(I<%data>)
+
+Returns a new Travel::Status::DE::EFA::Result object. You should not need to
+call this.
+
+=item $departure->TO_JSON
+
+Allows the object data to be serialized to JSON.
+
+=back
+
+=head1 DEPARTURE TYPES
+
+The following are known so far:
+
+=over
+
+=item * Abellio-Zug
+
+=item * Bus
+
+=item * Eurocity
+
+=item * Intercity-Express
+
+=item * NE (NachtExpress / night bus)
+
+=item * Niederflurbus
+
+=item * R-Bahn (RE / RegionalExpress)
+
+=item * S-Bahn
+
+=item * SB (Schnellbus)
+
+=item * StraE<szlig>enbahn
+
+=item * U-Bahn
+
+=back
+
+=head1 DIAGNOSTICS
+
+None.
+
+=head1 DEPENDENCIES
+
+=over
+
+=item Class::Accessor(3pm)
+
+=back
+
+=head1 BUGS AND LIMITATIONS
+
+C<< $result->type >> may contain bogus data. This comes from the efa.vrr.de
+interface.
+
+=head1 SEE ALSO
+
+Travel::Status::DE::EFA(3pm).
+
+=head1 AUTHOR
+
+Copyright (C) 2011 by Daniel Friesel E<lt>derf@finalrewind.orgE<gt>
+
+=head1 LICENSE
+
+This module is licensed under the same terms as Perl itself.