Loading lib/Travel/Status/DE/IRIS.pm +59 −46 Original line number Diff line number Diff line Loading @@ -54,42 +54,24 @@ sub new { $dt_req->add( hours => 1 ); } @{ $self->{results} } = sort { $a->{datetime} <=> $b->{datetime} } @{ $self->{results} }; $self->get_realtime; return $self; } sub get_timetable { my ( $self, $eva, $dt ) = @_; my $ua = $self->{user_agent}; my $res = $ua->get( $dt->strftime( "http://iris.noncd.db.de/iris-tts/timetable/plan/${eva}/%y%m%d/%H") ); @{ $self->{results} } = sort { $a->{datetime} <=> $b->{datetime} } @{ $self->{results} }; if ( $res->is_error ) { $self->{errstr} = $res->status_line; return $self; } my $xml = XML::LibXML->load_xml( string => $res->decoded_content ); #say $xml->toString(1); sub add_result { my ( $self, $station, $s ) = @_; my $station = ( $xml->findnodes('/timetable') )[0]->getAttribute('station'); for my $s ( $xml->findnodes('/timetable/s') ) { my $id = $s->getAttribute('id'); my $e_tl = ( $s->findnodes('./tl') )[0]; my $e_ar = ( $s->findnodes('./ar') )[0]; my $e_dp = ( $s->findnodes('./dp') )[0]; if ( not $e_tl ) { next; return; } my %data = ( Loading Loading @@ -119,15 +101,41 @@ sub get_timetable { $data{departure_wings} = $e_dp->getAttribute('wings'); } my $result = Travel::Status::DE::IRIS::Result->new(%data); # if scheduled departure and current departure are not within the # same hour, trains are reported twice. Don't add duplicates in # that case. if ( not first { $_->raw_id eq $id } @{ $self->{results} } ) { push( @{ $self->{results} }, Travel::Status::DE::IRIS::Result->new(%data) push( @{ $self->{results} }, $result, ); } return $result; } sub get_timetable { my ( $self, $eva, $dt ) = @_; my $ua = $self->{user_agent}; my $res = $ua->get( $dt->strftime( "http://iris.noncd.db.de/iris-tts/timetable/plan/${eva}/%y%m%d/%H") ); if ( $res->is_error ) { $self->{errstr} = $res->status_line; return $self; } my $xml = XML::LibXML->load_xml( string => $res->decoded_content ); #say $xml->toString(1); my $station = ( $xml->findnodes('/timetable') )[0]->getAttribute('station'); for my $s ( $xml->findnodes('/timetable/s') ) { $self->add_result( $station, $s ); } return $self; Loading @@ -147,6 +155,8 @@ sub get_realtime { my $xml = XML::LibXML->load_xml( string => $res->decoded_content ); my $station = ( $xml->findnodes('/timetable') )[0]->getAttribute('station'); for my $s ( $xml->findnodes('/timetable/s') ) { my $id = $s->getAttribute('id'); my $e_tl = ( $s->findnodes('./tl') )[0]; Loading @@ -158,6 +168,9 @@ sub get_realtime { my $result = first { $_->raw_id eq $id } $self->results; if ( not $result ) { $result = $self->add_result( $station, $s ); } if ( not $result ) { next; } Loading Loading
lib/Travel/Status/DE/IRIS.pm +59 −46 Original line number Diff line number Diff line Loading @@ -54,42 +54,24 @@ sub new { $dt_req->add( hours => 1 ); } @{ $self->{results} } = sort { $a->{datetime} <=> $b->{datetime} } @{ $self->{results} }; $self->get_realtime; return $self; } sub get_timetable { my ( $self, $eva, $dt ) = @_; my $ua = $self->{user_agent}; my $res = $ua->get( $dt->strftime( "http://iris.noncd.db.de/iris-tts/timetable/plan/${eva}/%y%m%d/%H") ); @{ $self->{results} } = sort { $a->{datetime} <=> $b->{datetime} } @{ $self->{results} }; if ( $res->is_error ) { $self->{errstr} = $res->status_line; return $self; } my $xml = XML::LibXML->load_xml( string => $res->decoded_content ); #say $xml->toString(1); sub add_result { my ( $self, $station, $s ) = @_; my $station = ( $xml->findnodes('/timetable') )[0]->getAttribute('station'); for my $s ( $xml->findnodes('/timetable/s') ) { my $id = $s->getAttribute('id'); my $e_tl = ( $s->findnodes('./tl') )[0]; my $e_ar = ( $s->findnodes('./ar') )[0]; my $e_dp = ( $s->findnodes('./dp') )[0]; if ( not $e_tl ) { next; return; } my %data = ( Loading Loading @@ -119,15 +101,41 @@ sub get_timetable { $data{departure_wings} = $e_dp->getAttribute('wings'); } my $result = Travel::Status::DE::IRIS::Result->new(%data); # if scheduled departure and current departure are not within the # same hour, trains are reported twice. Don't add duplicates in # that case. if ( not first { $_->raw_id eq $id } @{ $self->{results} } ) { push( @{ $self->{results} }, Travel::Status::DE::IRIS::Result->new(%data) push( @{ $self->{results} }, $result, ); } return $result; } sub get_timetable { my ( $self, $eva, $dt ) = @_; my $ua = $self->{user_agent}; my $res = $ua->get( $dt->strftime( "http://iris.noncd.db.de/iris-tts/timetable/plan/${eva}/%y%m%d/%H") ); if ( $res->is_error ) { $self->{errstr} = $res->status_line; return $self; } my $xml = XML::LibXML->load_xml( string => $res->decoded_content ); #say $xml->toString(1); my $station = ( $xml->findnodes('/timetable') )[0]->getAttribute('station'); for my $s ( $xml->findnodes('/timetable/s') ) { $self->add_result( $station, $s ); } return $self; Loading @@ -147,6 +155,8 @@ sub get_realtime { my $xml = XML::LibXML->load_xml( string => $res->decoded_content ); my $station = ( $xml->findnodes('/timetable') )[0]->getAttribute('station'); for my $s ( $xml->findnodes('/timetable/s') ) { my $id = $s->getAttribute('id'); my $e_tl = ( $s->findnodes('./tl') )[0]; Loading @@ -158,6 +168,9 @@ sub get_realtime { my $result = first { $_->raw_id eq $id } $self->results; if ( not $result ) { $result = $self->add_result( $station, $s ); } if ( not $result ) { next; } Loading