Skip to content
Snippets Groups Projects
Unverified Commit 0f870c6e authored by Birte Kristina Friesel's avatar Birte Kristina Friesel
Browse files

Remove support for XML HAFAS interfaces

parent 525724d4
No related branches found
No related tags found
No related merge requests found
......@@ -22,6 +22,7 @@ Module::Build->new(
'Class::Accessor' => '0.16',
'DateTime' => 0,
'DateTime::Format::Strptime' => 0,
'Digest::MD5' => 0,
'Getopt::Long' => 0,
'JSON' => 0,
'List::MoreUtils' => 0,
......@@ -29,7 +30,6 @@ Module::Build->new(
'LWP::UserAgent' => 0,
'LWP::Protocol::https' => 0,
'POSIX' => 0,
'XML::LibXML' => '1.70',
},
script_files => 'bin/',
sign => 1,
......
......@@ -10,12 +10,12 @@ ARG DEBIAN_FRONTEND=noninteractive
ARG APT_LISTCHANGES_FRONTEND=none
RUN apt-get update \
&& apt-get -y --no-install-recommends install ca-certificates curl gcc libc6-dev libssl1.1 libssl-dev libxml2 libxml2-dev make zlib1g-dev \
&& apt-get -y --no-install-recommends install ca-certificates curl gcc libc6-dev libssl1.1 libssl-dev make zlib1g-dev \
&& cpanm -n --no-man-pages --installdeps . \
&& perl Build.PL \
&& perl Build \
&& rm -rf ~/.cpanm \
&& apt-get -y purge curl gcc libc6-dev libssl-dev libxml2-dev make zlib1g-dev \
&& apt-get -y purge curl gcc libc6-dev libssl-dev make zlib1g-dev \
&& apt-get -y autoremove \
&& apt-get -y clean \
&& rm -rf /var/cache/apt/* /var/lib/apt/lists/*
......
......@@ -8,7 +8,6 @@ interfaces, and can also be pointed to URLs not listed here.
* [Nahverkehrsverbund Schleswig-Holstein](https://nah.sh.hafas.de/bin/stboard.exe)
* [Nahverkehrsservice Sachsen-Anhalt](https://reiseauskunft.insa.de/bin/stboard.exe)
* [Nordhessischer VerkehrsVerbund](https://auskunft.nvv.de/auskunft/bin/jp/stboard.exe)
* [Rostocker Straßenbahn AG](https://fahrplan.rsag-online.de/hafas/stboard.exe)
* [Verkehrsverbund Berlin-Brandenburg](https://fahrinfo.vbb.de/bin/stboard.exe)
* [Verkehrsverbund Bremen/Niedersachsen](https://fahrplaner.vbn.de/hafas/stboard.exe)
* [Österreichische Bundesbahnen](https://fahrplan.oebb.at/bin/stboard.exe)
......@@ -78,7 +77,6 @@ pkg-config and a C compiler) installed. You will also need the following
libraries with development headers:
* libssl
* libxml2
* zlib
Now, use a tool of your choice to install the module. Minimum working example:
......
......@@ -350,8 +350,6 @@ None.
=item * LWP::UserAgent(3pm)
=item * XML::LibXML(3pm)
=back
=head1 BUGS AND LIMITATIONS
......
requires 'Class::Accessor';
requires 'DateTime';
requires 'DateTime::Format::Strptime';
requires 'Digest::MD5';
requires 'Getopt::Long';
requires 'JSON';
requires 'List::MoreUtils';
......@@ -8,7 +9,6 @@ requires 'List::Util';
requires 'LWP::UserAgent';
requires 'LWP::Protocol::https';
requires 'POSIX';
requires 'XML::LibXML';
on test => sub {
requires 'File::Slurp';
......
......@@ -91,8 +91,6 @@ None.
=item * Travel::Status::DE::HAFAS(3pm)
=item * XML::LibXML(3pm)
=back
=head1 BUGS AND LIMITATIONS
......
......@@ -19,7 +19,6 @@ use POSIX qw(strftime);
use Travel::Status::DE::HAFAS::Message;
use Travel::Status::DE::HAFAS::Result;
use Travel::Status::DE::HAFAS::StopFinder;
use XML::LibXML;
our $VERSION = '3.01';
......@@ -322,145 +321,6 @@ sub new_mgate {
return $self;
}
sub new_legacy {
my ( $self, %conf ) = @_;
my $now = $self->{now};
my $date = ( $conf{datetime} // $now )->strftime('%d.%m.%Y');
my $time = ( $conf{datetime} // $now )->strftime('%H:%M');
my $mode = $conf{arrivals} ? 'arr' : 'dep';
my $lang = 'd';
my $service = $conf{service};
$self->{post} = {
input => $conf{station},
date => $date,
time => $time,
start => 'yes', # value doesn't matter, just needs to be set
boardType => $mode,
L => 'vs_java3',
};
$self->set_productfilter;
my $url = ( $conf{url} // $hafas_instance{$service}{url} ) . "/${lang}n";
if ( $conf{xml} ) {
# used for testing
$self->{raw_xml} = $conf{xml};
}
else {
if ( $self->{developer_mode} ) {
say "requesting from $url";
}
my $reply = $self->{ua}->post( $url, $self->{post} );
if ( $reply->is_error ) {
$self->{errstr} = $reply->status_line;
return $self;
}
$self->{raw_xml} = $reply->content;
}
# the interface often does not return valid XML (but it's close!)
if ( substr( $self->{raw_xml}, 0, 5 ) ne '<?xml' ) {
$self->{raw_xml}
= '<?xml version="1.0" encoding="iso-8859-15"?><wrap>'
. $self->{raw_xml}
. '</wrap>';
}
if ( defined $service and $service =~ m{ ^ VBB | NVV $ }x ) {
# Returns invalid XML with tags inside HIMMessage's lead attribute.
# Fix this.
$self->{raw_xml}
=~ s{ lead = " \K ( [^"]+ ) }{ $1 =~ s{ < [^>]+ > }{}grx }egx;
}
# TODO the DB backend also retuns invalid XML (similar to above, but with
# errors in delay="...") when setting the language to dutch/italian.
# No, I don't know why.
eval { $self->{tree} = XML::LibXML->load_xml( string => $self->{raw_xml} ) };
if ( my $err = $@ ) {
if ( $self->{developer_mode} ) {
say $self->{raw_xml};
}
$self->{errstr} = "Backend returned invalid XML: $err";
return $self;
}
if ( $self->{developer_mode} ) {
say $self->{tree}->toString(1);
}
$self->check_input_error;
$self->prepare_results;
return $self;
}
sub set_productfilter {
my ($self) = @_;
my $service = $self->{active_service};
my $mot_default = '1';
if ( not $service or not exists $hafas_instance{$service}{productbits} ) {
return;
}
my %mot_pos;
for my $i ( 0 .. $#{ $hafas_instance{$service}{productbits} } ) {
$mot_pos{ $hafas_instance{$service}{productbits}[$i] } = $i;
}
if ( $self->{exclusive_mots} and @{ $self->{exclusive_mots} } ) {
$mot_default = '0';
}
$self->{post}{productsFilter}
= $mot_default x ( scalar @{ $hafas_instance{$service}{productbits} } );
if ( $self->{exclusive_mots} and @{ $self->{exclusive_mots} } ) {
for my $mot ( @{ $self->{exclusive_mots} } ) {
if ( exists $mot_pos{$mot} ) {
substr( $self->{post}{productsFilter}, $mot_pos{$mot}, 1, '1' );
}
}
}
if ( $self->{excluded_mots} and @{ $self->{excluded_mots} } ) {
for my $mot ( @{ $self->{excluded_mots} } ) {
if ( exists $mot_pos{$mot} ) {
substr( $self->{post}{productsFilter}, $mot_pos{$mot}, 1, '0' );
}
}
}
return;
}
sub check_input_error {
my ($self) = @_;
my $xp_err = XML::LibXML::XPathExpression->new('//Err');
my $err = ( $self->{tree}->findnodes($xp_err) )[0];
if ($err) {
$self->{errstr}
= $err->getAttribute('text')
. ' (code '
. $err->getAttribute('code') . ')';
$self->{errcode} = $err->getAttribute('code');
}
return $self;
}
sub check_mgate {
my ($self) = @_;
......@@ -559,114 +419,11 @@ sub add_message {
return $message;
}
sub add_message_node {
my ( $self, $node ) = @_;
my $header = $node->getAttribute('header');
my $lead = $node->getAttribute('lead');
for my $message ( @{ $self->{messages} } ) {
if ( $header eq $message->{header} and $lead eq $message->{lead} ) {
$message->{ref_count}++;
return $message;
}
}
my $message = Travel::Status::DE::HAFAS::Message->new(
header => $header,
lead => $lead,
ref_count => 1,
);
push( @{ $self->{messages} }, $message );
return $message;
}
sub messages {
my ($self) = @_;
return @{ $self->{messages} };
}
sub prepare_results {
my ($self) = @_;
my $mode = $self->{post}->{boardType};
my $xp_element = XML::LibXML::XPathExpression->new('//Journey');
my $xp_msg = XML::LibXML::XPathExpression->new('./HIMMessage');
if ( not defined $self->{tree} ) {
return;
}
$self->{results} = [];
$self->{strptime_obj} //= DateTime::Format::Strptime->new(
pattern => '%d.%m.%YT%H:%M',
time_zone => 'Europe/Berlin',
);
for my $tr ( @{ $self->{tree}->findnodes($xp_element) } ) {
my @message_nodes = $tr->findnodes($xp_msg);
my $train = $tr->getAttribute('prod');
my $time = $tr->getAttribute('fpTime');
my $date = $tr->getAttribute('fpDate');
my $dest = $tr->getAttribute('targetLoc');
my $platform = $tr->getAttribute('platform');
my $new_platform = $tr->getAttribute('newpl');
my $delay = $tr->getAttribute('delay');
my $e_delay = $tr->getAttribute('e_delay');
my $info = $tr->getAttribute('delayReason');
my $operator = $tr->getAttribute('operator');
my @messages;
if ( not( $time and $dest ) ) {
next;
}
for my $n (@message_nodes) {
push( @messages, $self->add_message_node($n) );
}
# Some backends report dd.mm.yy, some report dd.mm.yyyy
# -> map all dates to dd.mm.yyyy
if ( length($date) == 8 ) {
substr( $date, 6, 0, '20' );
}
# TODO the first charactor of delayReason is special:
# " " -> no additional data, rest (if any) is delay reason
# else -> first word is not a delay reason but additional data,
# for instance "Zusatzfahrt/Ersatzfahrt" for a replacement train
if ( defined $info and $info eq q{ } ) {
$info = undef;
}
elsif ( defined $info and substr( $info, 0, 1 ) eq q{ } ) {
substr( $info, 0, 1, q{} );
}
$train =~ s{#.*$}{};
my $datetime = $self->{strptime_obj}->parse_datetime("${date}T${time}");
push(
@{ $self->{results} },
Travel::Status::DE::HAFAS::Result->new(
sched_datetime => $datetime,
datetime_now => $self->{now},
raw_delay => $delay,
raw_e_delay => $e_delay,
messages => \@messages,
train => $train,
operator => $operator,
route_end => $dest,
platform => $platform,
new_platform => $new_platform,
info => $info,
)
);
}
return $self;
}
sub parse_mgate {
my ($self) = @_;
......@@ -973,8 +730,6 @@ None.
=item * LWP::UserAgent(3pm)
=item * XML::LibXML(3pm)
=back
=head1 BUGS AND LIMITATIONS
......
......@@ -11,7 +11,7 @@ apt-get -y install \
libclass-accessor-perl libdatetime-perl libdatetime-format-strptime-perl \
liblwp-protocol-https-perl libjson-perl libjson-xs-perl \
liblist-moreutils-perl \
libwww-perl libxml-libxml-perl \
libwww-perl \
libtest-compile-perl libtest-pod-perl \
libtest-simple-perl
......
#!/usr/bin/env perl
use strict;
use warnings;
use 5.020;
use utf8;
use File::Slurp qw(read_file);
use Test::More tests => 2;
use Travel::Status::DE::HAFAS;
my $xml = 'lol';
my $status = Travel::Status::DE::HAFAS->new(
service => 'NASA',
station => 'Berlin Jannowitzbrücke',
xml => $xml
);
is( scalar $status->results,
0, 'no results on valid XML with invalid HAFAS data' );
$xml = 'lol<';
$status = Travel::Status::DE::HAFAS->new(
service => 'NASA',
station => 'Berlin Jannowitzbrücke',
xml => $xml
);
is( scalar $status->results, 0, 'no results on invalid XML' );
<StationTable>
<Journey fpTime="14:19" fpDate="13.06.2020" delay="-" platform="B1" targetLoc="Krusau(DK)" dirnr="706798" prod="Bus 1#Bus" dir="Krusau(DK)" administration="AKTIV_" depStation="Flensburg Bahnhof" is_reachable="0" />
<Journey fpTime="14:22" fpDate="13.06.2020" delay="-" targetLoc="Flensburg ZOB" dirnr="9903386" prod="Bus 12#Bus" dir="Flensburg-Weiche Gartenstadt" administration="AKTIV_" depStation="Flensburg Bahnhof/Tegelbarg" is_reachable="0" />
<Journey fpTime="14:23" fpDate="13.06.2020" delay="-" targetLoc="Flensburg ZOB" dirnr="9903386" prod="Bus 14#Bus" dir="Flensburg ZOB" administration="AKTIV_" depStation="Flensburg Bahnhof/Serpentine" is_reachable="0" />
<Journey fpTime="14:24" fpDate="13.06.2020" delay="-" platform="B1" targetLoc="Flensburg ZOB" dirnr="9903383" prod="Bus 5#Bus" dir="Flensburg ZOB" administration="AKTIV_" depStation="Flensburg Bahnhof" is_reachable="0" />
<Journey fpTime="14:26" fpDate="13.06.2020" delay="-" platform="B2" targetLoc="Flensburg ZOB" dirnr="3420028" prod="Bus 5#Bus" dir="Flensburg ZOB" administration="AKTIV_" depStation="Flensburg Bahnhof" is_reachable="0" />
<Journey fpTime="14:29" fpDate="13.06.2020" delay="0" e_delay="0" targetLoc="Husum(Nordsee) Bahnhof" dirnr="3410184" prod="Bus R14#Bus" dir="Husum(Nordsee) Bahnhof" administration="AK____" depStation="Flensburg Bahnhof/Tegelbarg" is_reachable="0" />
<Journey fpTime="14:29" fpDate="13.06.2020" delay="-" platform="B1" targetLoc="Flensburg Fr&#246;sleeweg" dirnr="706773" prod="Bus 4#Bus" dir="Flensburg Fr&#246;sleeweg" administration="AKTIV_" depStation="Flensburg Bahnhof" is_reachable="0" />
<Journey fpTime="14:31" fpDate="13.06.2020" delay="0" e_delay="0" targetLoc="Flensburg ZOB" dirnr="9903380" prod="Bus R14#Bus" dir="Flensburg ZOB" administration="AK____" depStation="Flensburg Bahnhof/Serpentine" is_reachable="0" />
<Journey fpTime="14:34" fpDate="13.06.2020" delay="-" targetLoc="Flensburg ZOB" dirnr="9903386" prod="Bus 12#Bus" dir="Flensburg ZOB" administration="AKTIV_" depStation="Flensburg Bahnhof/Tegelbarg" is_reachable="0" />
<Journey fpTime="14:35" fpDate="13.06.2020" delay="-" targetLoc="Eggebek ZOB" dirnr="3415998" prod="Bus 1550#Bus" dir="Eggebek ZOB" administration="ROH_FL" depStation="Flensburg Bahnhof/Tegelbarg" is_reachable="0" />
<Journey fpTime="14:35" fpDate="13.06.2020" delay="-" targetLoc="Flensburg ZOB" dirnr="9903386" prod="Bus 12#Bus" dir="Flensburg ZOB" administration="AKTIV_" depStation="Flensburg Bahnhof/Serpentine" is_reachable="0" />
<Journey fpTime="14:36" fpDate="13.06.2020" delay="-" platform="B2" targetLoc="Tarup Ortsausgang" dirnr="3207041" prod="Bus 4#Bus" dir="Tarup Ortsausgang" administration="AKTIV_" depStation="Flensburg Bahnhof" is_reachable="0" />
<Journey fpTime="14:39" fpDate="13.06.2020" delay="-" platform="B1" targetLoc="Krusau(DK)" dirnr="706798" prod="Bus 1#Bus" dir="Krusau(DK)" administration="AKTIV_" depStation="Flensburg Bahnhof" is_reachable="0" />
<Journey fpTime="14:42" fpDate="13.06.2020" delay="-" targetLoc="Flensburg ZOB" dirnr="9903386" prod="Bus 12#Bus" dir="Flensburg-Weiche Gartenstadt" administration="AKTIV_" depStation="Flensburg Bahnhof/Tegelbarg" is_reachable="0" />
<Journey fpTime="14:42" fpDate="13.06.2020" delay="-" targetLoc="Flensburg ZOB" dirnr="9903386" prod="Bus 14#Bus" dir="Flensburg F&#246;rde-Park" administration="AKTIV_" depStation="Flensburg Bahnhof/Tegelbarg" is_reachable="0" />
<Journey fpTime="14:44" fpDate="13.06.2020" delay="-" platform="B1" targetLoc="Flensburg ZOB" dirnr="9903383" prod="Bus 5#Bus" dir="Flensburg ZOB" administration="AKTIV_" depStation="Flensburg Bahnhof" is_reachable="0" />
<Journey fpTime="14:46" fpDate="13.06.2020" delay="-" platform="B2" targetLoc="Flensburg ZOB" dirnr="3420028" prod="Bus 5#Bus" dir="Flensburg ZOB" administration="AKTIV_" depStation="Flensburg Bahnhof" is_reachable="0" />
<Journey fpTime="14:48" fpDate="13.06.2020" delay="0" e_delay="0" targetLoc="Fredericia st" dirnr="8600623" prod="IC 225#IC" dir="K&#248;benhavn H" administration="86____" is_reachable="0" />
<Journey fpTime="14:49" fpDate="13.06.2020" delay="0" e_delay="4" targetLoc="Flensburg ZOB" dirnr="9903380" prod="Bus R150#Bus" dir="Flensburg ZOB" administration="AK____" depStation="Flensburg Bahnhof/Serpentine" is_reachable="0" />
<Journey fpTime="14:49" fpDate="13.06.2020" delay="-" platform="B1" targetLoc="Flensburg Fr&#246;sleeweg" dirnr="706773" prod="Bus 4#Bus" dir="Flensburg Fr&#246;sleeweg" administration="AKTIV_" depStation="Flensburg Bahnhof" is_reachable="0" />
<Journey fpTime="14:49" fpDate="13.06.2020" delay="-" targetLoc="Flensburg ZOB" dirnr="9903402" prod="Bus R125#Bus" dir="Flensburg ZOB" administration="ROH_MI" depStation="Flensburg Bahnhof/Serpentine" is_reachable="0" />
<Journey fpTime="14:53" fpDate="13.06.2020" delay="-" targetLoc="Flensburg ZOB" dirnr="9903386" prod="Bus 14#Bus" dir="Flensburg ZOB" administration="AKTIV_" depStation="Flensburg Bahnhof/Serpentine" is_reachable="0" />
<Journey fpTime="14:54" fpDate="13.06.2020" delay="-" targetLoc="Flensburg ZOB" dirnr="9903386" prod="Bus 12#Bus" dir="Flensburg ZOB" administration="AKTIV_" depStation="Flensburg Bahnhof/Tegelbarg" is_reachable="0" />
<Journey fpTime="14:55" fpDate="13.06.2020" delay="-" targetLoc="Flensburg ZOB" dirnr="9903386" prod="Bus 12#Bus" dir="Flensburg ZOB" administration="AKTIV_" depStation="Flensburg Bahnhof/Serpentine" is_reachable="0" />
<Journey fpTime="14:56" fpDate="13.06.2020" delay="-" platform="B2" targetLoc="Tarup Ortsausgang" dirnr="3207041" prod="Bus 4#Bus" dir="Tarup Ortsausgang" administration="AKTIV_" depStation="Flensburg Bahnhof" is_reachable="0" />
<Journey fpTime="14:59" fpDate="13.06.2020" delay="-" platform="B1" targetLoc="Krusau(DK)" dirnr="706798" prod="Bus 1#Bus" dir="Krusau(DK)" administration="AKTIV_" depStation="Flensburg Bahnhof" is_reachable="0" />
<Journey fpTime="15:02" fpDate="13.06.2020" delay="-" targetLoc="Flensburg ZOB" dirnr="9903386" prod="Bus 12#Bus" dir="Flensburg-Weiche Gartenstadt" administration="AKTIV_" depStation="Flensburg Bahnhof/Tegelbarg" is_reachable="0" />
<Journey fpTime="15:04" fpDate="13.06.2020" delay="0" e_delay="0" platform="4" targetLoc="Kiel Hbf" dirnr="8000199" prod="RE72#RE" dir="Kiel Hbf" administration="800271" is_reachable="0" />
<Journey fpTime="15:04" fpDate="13.06.2020" delay="-" platform="B1" targetLoc="Flensburg ZOB" dirnr="9903383" prod="Bus 5#Bus" dir="Flensburg ZOB" administration="AKTIV_" depStation="Flensburg Bahnhof" is_reachable="0" />
<Journey fpTime="15:06" fpDate="13.06.2020" delay="-" targetLoc="Flensburg ZOB" dirnr="9903402" prod="Bus 1550#Bus" dir="Flensburg ZOB" administration="ROH_FL" depStation="Flensburg Bahnhof/Serpentine" is_reachable="0" />
<Journey fpTime="15:06" fpDate="13.06.2020" delay="-" platform="B2" targetLoc="Flensburg ZOB" dirnr="3420028" prod="Bus 5#Bus" dir="Flensburg ZOB" administration="AKTIV_" depStation="Flensburg Bahnhof" is_reachable="0" />
<Journey fpTime="15:07" fpDate="13.06.2020" delay="-" targetLoc="Schleswig ZOB" dirnr="3415626" prod="Bus R150#Bus" dir="Schleswig ZOB" administration="AK____" depStation="Flensburg Bahnhof/Tegelbarg" is_reachable="0" />
<Journey fpTime="15:09" fpDate="13.06.2020" delay="-" platform="B1" targetLoc="Flensburg Fr&#246;sleeweg" dirnr="706773" prod="Bus 4#Bus" dir="Flensburg Fr&#246;sleeweg" administration="AKTIV_" depStation="Flensburg Bahnhof" is_reachable="0" />
<Journey fpTime="15:12" fpDate="13.06.2020" delay="-" targetLoc="Flensburg ZOB" dirnr="9903386" prod="Bus 14#Bus" dir="Flensburg F&#246;rde-Park" administration="AKTIV_" depStation="Flensburg Bahnhof/Tegelbarg" is_reachable="0" />
<Journey fpTime="15:14" fpDate="13.06.2020" delay="-" targetLoc="Flensburg ZOB" dirnr="9903386" prod="Bus 12#Bus" dir="Flensburg ZOB" administration="AKTIV_" depStation="Flensburg Bahnhof/Tegelbarg" is_reachable="0" />
<Journey fpTime="15:15" fpDate="13.06.2020" delay="0" e_delay="0" platform="2" targetLoc="Hamburg Hbf" dirnr="8002549" prod="RE7#RE" dir="Hamburg Hbf" administration="800201" is_reachable="0" />
<Journey fpTime="15:15" fpDate="13.06.2020" delay="-" targetLoc="Flensburg ZOB" dirnr="9903386" prod="Bus 12#Bus" dir="Flensburg ZOB" administration="AKTIV_" depStation="Flensburg Bahnhof/Serpentine" is_reachable="0" />
<Journey fpTime="15:16" fpDate="13.06.2020" delay="-" platform="B2" targetLoc="Tarup Ortsausgang" dirnr="3207041" prod="Bus 4#Bus" dir="Tarup Ortsausgang" administration="AKTIV_" depStation="Flensburg Bahnhof" is_reachable="0" />
</StationTable>
<StationTable>
<St evaId="90102" name="Wernigerode, Hauptbahnhof" />
<Journey fpTime="14:18" fpDate="13.06.20" delay="0" e_delay="1" platform="1" targetLoc="Goslar" dirnr="8000130" hafasname="RE21" prod="RE21#Zug" class="8" dir="Goslar" administration="AMRE__" depStation="Wernigerode Hbf" is_reachable="0" />
<Journey fpTime="14:23" fpDate="13.06.20" delay="0" e_delay="0" platform="2" targetLoc="Wernigerode, Flo&#223;platz" dirnr="1392" hafasname="Bus 204" prod="Bus 204#Bus" class="64" dir="P&#246;rner-Str., Stadtfeld" administration="HVBG__" depStation="Wernigerode, Hauptbahnhof (Bus)" is_reachable="0" />
<Journey fpTime="14:29" fpDate="13.06.20" delay="-" platform="4" targetLoc="Stapelburg, Teichdamm" dirnr="1422" hafasname="Bus 270" prod="Bus 270#Bus" class="64" dir="Stapelburg" administration="HVBG__" depStation="Wernigerode, Hauptbahnhof (Bus)" is_reachable="0" />
<Journey fpTime="14:30" fpDate="13.06.20" delay="-" platform="4" targetLoc="Elbingerode (Harz), Markt" dirnr="1373" hafasname="Bus 274" prod="Bus 274#Bus" class="64" dir="Elbingerode" administration="HVBG__" depStation="Wernigerode, Hauptbahnhof (Bus)" is_reachable="0" />
<Journey fpTime="14:35" fpDate="13.06.20" delay="-" platform="7" targetLoc="Braunlage, ZOB" dirnr="1387" hafasname="Bus 264" prod="Bus 264#Bus" class="64" dir="Braunlage" administration="HVBG__" depStation="Wernigerode, Hauptbahnhof (Bus)" is_reachable="0" />
<Journey fpTime="14:40" fpDate="13.06.20" delay="0" e_delay="0" platform="1" targetLoc="Halle (Saale) Hbf" dirnr="8010159" hafasname="RE4" prod="RE4#Zug" class="8" dir="Halle (Saale) Hbf" administration="AMRE__" depStation="Wernigerode Hbf" is_reachable="0" />
<Journey fpTime="14:45" fpDate="13.06.20" delay="-" platform="5" targetLoc="Osterwieck, Busbahnhof" dirnr="5334" hafasname="RufAST 8" prod="RufAST 8#Rufbus" class="128" dir="Osterwieck" administration="HVBG__" depStation="Wernigerode, Hauptbahnhof (Bus)" is_reachable="0" highPriorityAttr="1" />
<Journey fpTime="14:48" fpDate="13.06.20" delay="-" platform="10" targetLoc="Wernigerode, Flo&#223;platz" dirnr="1392" hafasname="Bus 201" prod="Bus 201#Bus" class="64" dir="Heidebr., Harzblick" administration="HVBG__" depStation="Wernigerode, Hauptbahnhof (Bus)" is_reachable="0" />
<Journey fpTime="14:50" fpDate="13.06.20" delay="-" platform="3" targetLoc="Halberstadt, Bahnhof (Tram/Bus)" dirnr="5426" hafasname="Bus 231" prod="Bus 231#Bus" class="64" dir="Halberstadt" administration="HVBG__" depStation="Wernigerode, Hauptbahnhof (Bus)" is_reachable="0" />
<Journey fpTime="14:50" fpDate="13.06.20" delay="-" platform="3" targetLoc="Thale, Hauptbahnhof (Bus)" dirnr="5626" hafasname="Bus 250" prod="Bus 250#Bus" class="64" dir="Thale" administration="HVBG__" depStation="Wernigerode, Hauptbahnhof (Bus)" is_reachable="0" />
<Journey fpTime="14:53" fpDate="13.06.20" delay="0" e_delay="0" platform="1" targetLoc="Wernigerode, Flo&#223;platz" dirnr="1392" hafasname="Bus 204" prod="Bus 204#Bus" class="64" dir="Flo&#223;platz, Hasserode" administration="HVBG__" depStation="Wernigerode, Hauptbahnhof (Bus)" is_reachable="0" />
<Journey fpTime="15:03" fpDate="13.06.20" delay="0" e_delay="0" platform="10" targetLoc="Wernigerode, Flo&#223;platz" dirnr="1392" hafasname="Bus 204" prod="Bus 204#Bus" class="64" dir="Flo&#223;platz, Hasserode" administration="HVBG__" depStation="Wernigerode, Hauptbahnhof (Bus)" is_reachable="0" />
<Journey fpTime="15:05" fpDate="13.06.20" delay="0" e_delay="0" platform="1" targetLoc="Wernigerode, Wendeplatz M&#252;hlental" dirnr="22515" hafasname="Bus 202" prod="Bus 202#Bus" class="64" dir="M&#252;hlental, N&#246;schenr." administration="HVBG__" depStation="Wernigerode, Hauptbahnhof (Bus)" is_reachable="0" />
<Journey fpTime="15:08" fpDate="13.06.20" delay="-" platform="1" targetLoc="Wernigerode, Im Bodengarten" dirnr="1472" hafasname="Bus 203" prod="Bus 203#Bus" class="64" dir="R&#246;ntgenstr, Eisenberg" administration="HVBG__" depStation="Wernigerode, Hauptbahnhof (Bus)" is_reachable="0" />
<Journey fpTime="15:09" fpDate="13.06.20" delay="-" platform="1" targetLoc="Wernigerode, Flo&#223;platz" dirnr="1392" hafasname="Bus 201" prod="Bus 201#Bus" class="64" dir="Flo&#223;platz, Hasserode" administration="HVBG__" depStation="Wernigerode, Hauptbahnhof (Bus)" is_reachable="0" />
</StationTable>
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
<StationTable>
<Journey fpTime="14:54" fpDate="13.06.20" delay="0" e_delay="0" platform="1" targetLoc="Osnabr&#252;ck Hbf" dirnr="8000294" hafasname="RE9" prod="RE9#RE" class="8" dir="Osnabr&#252;ck Hbf" administration="800295" is_reachable="0" >
<HIMMessage header="Corona-Pr&#228;ventionsma&#223;nahme" lead="Derzeit gilt die Mund-Nasen-Bedeckungspflicht im &#214;PNV. Danke, dass Sie sich und andere Fahrg&#228;ste sch&#252;tzen und zur Sicherheit des Bus- und Bahnfahrens beitragen!" display="2" global="1"/></Journey>
<Journey fpTime="15:03" fpDate="13.06.20" delay="0" e_delay="0" platform="2" targetLoc="Bremen Hbf" dirnr="8000050" hafasname="RE9" prod="RE9#RE" class="8" dir="Bremen Hbf" administration="800295" is_reachable="0" >
<HIMMessage header="Corona-Pr&#228;ventionsma&#223;nahme" lead="Derzeit gilt die Mund-Nasen-Bedeckungspflicht im &#214;PNV. Danke, dass Sie sich und andere Fahrg&#228;ste sch&#252;tzen und zur Sicherheit des Bus- und Bahnfahrens beitragen!" display="2" global="1"/></Journey>
<Journey fpTime="15:10" fpDate="13.06.20" delay="0" e_delay="0" targetLoc="Sulingen ZOB" dirnr="9913517" hafasname="Bus 137" prod="Bus 137#Bus" class="32" dir="Sulingen ZOB" administration="VOL___" depStation="Diepholz Bahnhof" is_reachable="0" >
<HIMMessage header="Umleitung aufgrund einer Baustelle in Varrel" lead="Wegen Bauma&#223;nahmen wird die Ortsdurchfahrt Varrel vom 16.03. bis 30.06.2020 gesperrt sein. Die Haltestellen Varrel Oberdamm, Varrel Hohe Stra&#223;e und Varrel Wessels k&#246;nnen in dieser Zeit nicht bedient werden. Als Ersatz nutzen Sie bitte die Haltestelle Varrel Schule." display="5" url="http://weserems.hafas.de/pdf/1584120888027_137 Fpl BA ab 16.03.20 bis 30.06.20.pdf" label="Baufahrplan Linie 137" /><HIMMessage header="Corona-Pr&#228;ventionsma&#223;nahme" lead="Derzeit gilt die Mund-Nasen-Bedeckungspflicht im &#214;PNV. Danke, dass Sie sich und andere Fahrg&#228;ste sch&#252;tzen und zur Sicherheit des Bus- und Bahnfahrens beitragen!" display="2" global="1"/></Journey>
</StationTable>
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment