From fd5b343a0b56e0e887ab514b38496212beac7b8d Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Sat, 9 May 2015 10:00:40 +0200 Subject: parse route_info field --- lib/Travel/Status/DE/DeutscheBahn.pm | 39 ++++++++++++++++------------- lib/Travel/Status/DE/DeutscheBahn/Result.pm | 18 ++++++++++++- 2 files changed, 38 insertions(+), 19 deletions(-) (limited to 'lib/Travel/Status') diff --git a/lib/Travel/Status/DE/DeutscheBahn.pm b/lib/Travel/Status/DE/DeutscheBahn.pm index b3170e0..4b9534a 100644 --- a/lib/Travel/Status/DE/DeutscheBahn.pm +++ b/lib/Travel/Status/DE/DeutscheBahn.pm @@ -171,12 +171,13 @@ sub results { my $re_morelink = qr{ date = (? .. [.] .. [.] .. ) }x; my @parts = ( - [ 'time', './td[@class="time"]' ], - [ 'train', './td[3]' ], - [ 'route', './td[@class="route"]' ], - [ 'dest', './td[@class="route"]//a' ], - [ 'platform', './td[@class="platform"]' ], - [ 'info', './td[@class="ris"]' ], + [ 'time', './td[@class="time"]' ], + [ 'train', './td[3]' ], + [ 'route', './td[@class="route"]' ], + [ 'dest', './td[@class="route"]//a' ], + [ 'platform', './td[@class="platform"]' ], + [ 'info', './td[@class="ris"]' ], + [ 'routeinfo', './td[@class="route"]//span[@class="red bold"]' ], ); @parts = map { [ $_->[0], XML::LibXML::XPathExpression->new( $_->[1] ) ] } @@ -200,7 +201,7 @@ sub results { my @via; my $first = 1; - my ( $time, $train, $route, $dest, $platform, $info ) + my ( $time, $train, $route, $dest, $platform, $info, $routeinfo ) = map { get_node( $tr, @{$_} ) } @parts; my $e_train_more = ( $tr->findnodes($xp_train_more) )[0]; @@ -214,10 +215,11 @@ sub results { substr( $date, 6, 0 ) = '20'; - $platform //= q{}; - $info //= q{}; + $platform //= q{}; + $info //= q{}; + $routeinfo //= q{}; - for my $str ( $time, $train, $dest, $platform, $info ) { + for my $str ( $time, $train, $dest, $platform, $info, $routeinfo ) { $str =~ s/\n/ /mg; $str =~ tr/ //s; $str =~ s/^ +//; @@ -240,14 +242,15 @@ sub results { push( @{ $self->{results} }, Travel::Status::DE::DeutscheBahn::Result->new( - date => $date, - time => $time, - train => $train, - route_raw => $route, - route => \@via, - route_end => $dest, - platform => $platform, - info_raw => $info, + date => $date, + time => $time, + train => $train, + route_raw => $route, + route => \@via, + route_end => $dest, + platform => $platform, + info_raw => $info, + routeinfo_raw => $routeinfo, ) ); } diff --git a/lib/Travel/Status/DE/DeutscheBahn/Result.pm b/lib/Travel/Status/DE/DeutscheBahn/Result.pm index 00bfb96..bf300ed 100644 --- a/lib/Travel/Status/DE/DeutscheBahn/Result.pm +++ b/lib/Travel/Status/DE/DeutscheBahn/Result.pm @@ -11,7 +11,7 @@ use parent 'Class::Accessor'; our $VERSION = '1.04'; Travel::Status::DE::DeutscheBahn::Result->mk_ro_accessors( - qw(date time train route_end route_raw platform info_raw)); + qw(date time train route_end route_raw platform info_raw routeinfo_raw)); sub new { my ( $obj, %conf ) = @_; @@ -75,6 +75,17 @@ sub route { return @stops; } +sub route_info { + my ($self) = @_; + + my $route_info = $self->routeinfo_raw; + + $route_info =~ s{ ^ [\s\n]+ }{}x; + $route_info =~ s{ [\s\n]+ $ }{}x; + + return $route_info; +} + sub route_interesting { my ( $self, $max_parts ) = @_; @@ -264,6 +275,11 @@ B. Similar to B. however, this function returns a list of array references of the form C<< [ arrival time, station name ] >>. +=item $result->route_info + +Returns a string containing information related to the train's route, such as +"landslide between X and Y, expect delays". + =item $result->time Returns the arrival/departure time as string in "hh:mm" format. -- cgit v1.2.3