summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Friesel <derf@finalrewind.org>2011-11-28 21:14:04 +0100
committerDaniel Friesel <derf@finalrewind.org>2011-11-28 21:14:04 +0100
commit107ca44298c6f65ebfc269646e2184d2adba7810 (patch)
tree0d3bf66981384ee0158da2bc8a87d3551eef9b42
parent24a55903ddceb8107c527d637f57f7c1d135ef8e (diff)
efa: Add -E option to display total route time and ticket class/price
-rwxr-xr-xbin/efa21
-rw-r--r--lib/Travel/Routing/DE/VRR.pm18
-rw-r--r--lib/Travel/Routing/DE/VRR/Route.pm6
3 files changed, 40 insertions, 5 deletions
diff --git a/bin/efa b/bin/efa
index 60b3d78..892ba93 100755
--- a/bin/efa
+++ b/bin/efa
@@ -6,6 +6,8 @@ use strict;
use warnings;
use 5.010;
+use utf8;
+
use Travel::Routing::DE::VRR;
use Exception::Class;
use Getopt::Long qw/:config no_ignore_case/;
@@ -112,6 +114,7 @@ GetOptions(
date|d=s
depart=s
exclude|e=s@
+ extended-info|E
from=s@{2}
help|h
ignore-info|I:s
@@ -188,7 +191,23 @@ check_for_error($@);
my @routes = $efa->routes;
for my $i ( 0 .. $#routes ) {
- for my $c ( $routes[$i]->parts ) {
+
+ my $route = $routes[$i];
+
+ if ($opt->{'extended-info'}) {
+ print '# ' . $route->duration;
+ if ($route->ticket_type) {
+ printf(", class %s (%s€ / %s€)\n\n",
+ $route->ticket_type,
+ $route->fare_adult, $route->fare_child,
+ );
+ }
+ else {
+ print "\n\n";
+ }
+ }
+
+ for my $c ( $route->parts ) {
for my $extra ( $c->extra ) {
diff --git a/lib/Travel/Routing/DE/VRR.pm b/lib/Travel/Routing/DE/VRR.pm
index 7a0abef..45776fa 100644
--- a/lib/Travel/Routing/DE/VRR.pm
+++ b/lib/Travel/Routing/DE/VRR.pm
@@ -432,8 +432,6 @@ sub itdtime_str {
sub parse_part {
my ($self, $route) = @_;
- my $info;
-
my $xp_route = XML::LibXML::XPathExpression->new('./itdPartialRouteList/itdPartialRoute');
my $xp_dep = XML::LibXML::XPathExpression->new('./itdPoint[@usage="departure"]');
my $xp_arr = XML::LibXML::XPathExpression->new('./itdPoint[@usage="arrival"]');
@@ -444,11 +442,23 @@ sub parse_part {
my $xp_mot = XML::LibXML::XPathExpression->new('./itdMeansOfTransport');
my $xp_info = XML::LibXML::XPathExpression->new('./itdInfoTextList/infoTextListElem');
+ my $xp_fare = XML::LibXML::XPathExpression->new('./itdFare/itdSingleTicket');
my @route_parts;
- $info->{vehicle_time} = $route->getAttribute('vehicleTime');
- $info->{duration} = $route->getAttribute('publicDuration');
+ my $info = {
+ duration => $route->getAttribute('publicDuration'),
+ vehicle_time => $route->getAttribute('vehicleTime'),
+ };
+
+ my $e_fare = ( $route->findnodes($xp_fare) )[0];
+
+ if ($e_fare) {
+ $info->{ticket_type} = $e_fare->getAttribute('unitsAdult');
+ $info->{fare_adult} = $e_fare->getAttribute('fareAdult');
+ $info->{fare_child} = $e_fare->getAttribute('fareChild');
+ $info->{ticket_text} = $e_fare->textContent;
+ }
for my $e ( $route->findnodes($xp_route) ) {
diff --git a/lib/Travel/Routing/DE/VRR/Route.pm b/lib/Travel/Routing/DE/VRR/Route.pm
index 73bda07..a4f000b 100644
--- a/lib/Travel/Routing/DE/VRR/Route.pm
+++ b/lib/Travel/Routing/DE/VRR/Route.pm
@@ -4,10 +4,16 @@ use strict;
use warnings;
use 5.010;
+use parent 'Class::Accessor';
+
use Travel::Routing::DE::VRR::Route::Part;
our $VERSION = '1.06';
+Travel::Routing::DE::VRR::Route->mk_ro_accessors(
+ qw(duration ticket_text ticket_type fare_adult fare_child vehicle_time)
+);
+
sub new {
my ( $obj, $info, @parts ) = @_;