diff options
author | Daniel Friesel <derf@finalrewind.org> | 2015-09-09 22:57:17 +0200 |
---|---|---|
committer | Daniel Friesel <derf@finalrewind.org> | 2015-09-09 22:57:17 +0200 |
commit | 556f259834d75cad6a2feeb1c5106204d5921a28 (patch) | |
tree | 70a387f46eab0bc1bdde95b3425b807c4e19295c | |
parent | 2e03d069b24a5bf27fb035386594c904fa7ff496 (diff) |
Squashed commit of the following:
commit 73bb123b4a90dab9a08fa38555f0cd4afcdf3740
Author: Daniel Friesel <derf@finalrewind.org>
Date: Wed Sep 9 21:08:51 2015 +0200
remove outdated and now unused tests
commit 3f35ba0001aaff49a7b10acfaa83303b354c162a
Author: Daniel Friesel <derf@finalrewind.org>
Date: Wed Sep 9 21:07:34 2015 +0200
documentation for ::DeutscheBahn
commit f4c66605dcbffedbb558ca66c5032e5252011244
Author: Daniel Friesel <derf@finalrewind.org>
Date: Wed Sep 9 21:03:31 2015 +0200
re-add deutschebahn module
commit 41b505bc98d4b25a7ca15465fe0bbee6c3708e9e
Author: Daniel Friesel <derf@finalrewind.org>
Date: Tue Sep 8 18:31:22 2015 +0200
more documentation updates
commit edf7b5fbd8175b4b53735859b2a961fe6ab8cf49
Author: Daniel Friesel <derf@finalrewind.org>
Date: Sun Sep 6 18:48:09 2015 +0200
improve delay and delayReason handling
commit c4e9121a181de9d800226ab6fccca8abb8b14705
Author: Daniel Friesel <derf@finalrewind.org>
Date: Sun Sep 6 18:22:23 2015 +0200
HAFAS.pm: Code cleanup
commit edae36b16ecc5e1fa0adbece954bb348ce37e9a0
Author: Daniel Friesel <derf@finalrewind.org>
Date: Sun Sep 6 13:31:46 2015 +0200
add devmode option
commit f7a60ae80e59a129aae77b276925f80d7430c259
Author: Daniel Friesel <derf@finalrewind.org>
Date: Sun Sep 6 01:18:28 2015 +0200
support for platform changes
commit 6876d56e6dd22065c342fe1fbf42f9fcf7f3d457
Author: Daniel Friesel <derf@finalrewind.org>
Date: Thu Aug 20 20:01:24 2015 +0200
documentation: DeutscheBahn -> HAFAS
commit 73706f0150bd0fb9c11d2b8be89204bfd4b03235
Author: Daniel Friesel <derf@finalrewind.org>
Date: Thu Aug 20 19:54:12 2015 +0200
routes and route_info are not supported here
commit af8a541fd1f03131a9cd39a5548188dbc09b266a
Author: Daniel Friesel <derf@finalrewind.org>
Date: Thu Aug 20 19:50:35 2015 +0200
documentationfoo
commit ff3f2298c7be86bb7b672359f54c39588706673e
Author: Daniel Friesel <derf@finalrewind.org>
Date: Thu Aug 20 19:14:30 2015 +0200
rename db-ris to hafas-m
commit 754fda9974e20ee630a3a3386d6ff7c42468ca46
Author: Daniel Friesel <derf@finalrewind.org>
Date: Thu Aug 20 17:18:12 2015 +0200
add support for cancelled trains and delay reasons
commit f860183613ee7818a2f448e8c40bbbdb95c6180a
Author: Daniel Friesel <derf@finalrewind.org>
Date: Wed Aug 19 15:19:54 2015 +0200
add info message support
commit 17eda1d00cdbf98a04dbbe7d3ff89c6833af016d
Author: Daniel Friesel <derf@finalrewind.org>
Date: Sun Aug 16 18:00:05 2015 +0200
initial hafas api support
-rwxr-xr-x | bin/hafas-m (renamed from bin/db-ris) | 104 | ||||
-rw-r--r-- | lib/Travel/Status/DE/DeutscheBahn.pm | 333 | ||||
-rw-r--r-- | lib/Travel/Status/DE/DeutscheBahn/Result.pm | 365 | ||||
-rw-r--r-- | lib/Travel/Status/DE/HAFAS.pm | 346 | ||||
-rw-r--r-- | lib/Travel/Status/DE/HAFAS/Result.pm | 277 | ||||
-rw-r--r-- | t/20-db.t | 79 | ||||
-rw-r--r-- | t/in/essen.html | 2609 |
7 files changed, 686 insertions, 3427 deletions
@@ -7,17 +7,16 @@ our $VERSION = '1.05'; use Getopt::Long qw(:config no_ignore_case); use List::Util qw(first max); -use Travel::Status::DE::DeutscheBahn; +use Travel::Status::DE::HAFAS; my %train_type; my ( $date, $time ); -my $arrivals = 0; -my $filter_via; -my $ignore_late = 0; -my $show_full_route = 0; -my $types = q{}; +my $arrivals = 0; +my $ignore_late = 0; +my $types = q{}; my $language; +my $developer_mode; my @output; @@ -26,14 +25,13 @@ binmode( STDOUT, ':encoding(utf-8)' ); GetOptions( 'a|arrivals' => \$arrivals, 'd|date=s' => \$date, - 'f|full-route' => \$show_full_route, 'h|help' => sub { show_help(0) }, 'l|lang=s' => \$language, 'L|ignore-late' => \$ignore_late, 'm|mot=s' => \$types, 't|time=s' => \$time, - 'v|via=s' => \$filter_via, 'V|version' => \&show_version, + 'devmode' => \$developer_mode, ) or show_help(1); @@ -46,27 +44,28 @@ for my $type ( split( qr{,}, $types ) ) { } } -my $status = Travel::Status::DE::DeutscheBahn->new( - date => $date, - language => $language, - mot => \%train_type, - station => shift || show_help(1), - time => $time, - mode => $arrivals ? 'arr' : 'dep', +my $status = Travel::Status::DE::HAFAS->new( + date => $date, + language => $language, + mot => \%train_type, + station => shift || show_help(1), + time => $time, + mode => $arrivals ? 'arr' : 'dep', + developer_mode => $developer_mode, ); sub show_help { my ($code) = @_; - print 'Usage: db-ris [-d <dd.mm.yyyy>] [-m <motlist>] [-t <time>] ' - . "[-v <via>] <station>\n" - . "See also: man db-ris\n"; + print 'Usage: hafas-m [-d <dd.mm.yyyy>] [-m <motlist>] [-t <time>] ' + . "<station>\n" + . "See also: man hafas-m\n"; exit $code; } sub show_version { - say "db-ris version ${VERSION}"; + say "hafas-m version ${VERSION}"; exit 0; } @@ -80,23 +79,28 @@ sub display_result { die("Nothing to show\n"); } - for my $i ( 0 .. 5 ) { + for my $i ( 0 .. 4 ) { $line_length[$i] = max map { length( $_->[$i] ) } @lines; } for my $line (@lines) { - printf( - join( q{ }, ( map { "%-${_}s" } @line_length ) ) . "\n", - @{$line}[ 0 .. 5 ] - ); - if ( $line->[7] ) { - print " " . $line->[7] . "\n"; + my $d = $line->[6]; + if ( $d->messages ) { + print "\n"; + for my $msg ( $d->messages ) { + printf( "# %s\n", $msg ); + } } - if ($show_full_route) { - print "\n" . $line->[6] . "\n\n\n"; + printf( + join( q{ }, ( map { "%-${_}s" } @line_length ) ), + @{$line}[ 0 .. 4 ] + ); + if ( $line->[5] ) { + print $line->[5]; } + print "\n"; } return; @@ -109,14 +113,6 @@ if ( my $err = $status->errstr ) { for my $d ( $status->results() ) { - my @via; - - @via = $d->route; - - if ( $filter_via and not( first { $_ =~ m{$filter_via}io } @via ) ) { - next; - } - if ( $ignore_late and $d->delay ) { next; } @@ -125,14 +121,14 @@ for my $d ( $status->results() ) { @output, [ $d->time, + $d->is_cancelled + ? 'CANCELED' + : ( $d->delay ? '+' . $d->delay : q{} ), $d->train, - $arrivals ? q{} : join( q{ }, $d->route_interesting ), $d->route_end, - $d->platform, + ( $d->platform // q{} ) . ( $d->is_changed_platform ? ' !' : q{} ), $d->info, - join( "\n", - map { sprintf( '%-5s %s', @{$_} ) } $d->route_timetable ), - $d->route_info, + $d ] ); } @@ -143,12 +139,12 @@ __END__ =head1 NAME -db-ris - Interface to the DeutscheBahn online departure monitor +hafas-m - Interface to the DeutscheBahn/HAFAS online departure monitor =head1 SYNOPSIS -B<db-ris> [B<-a>] [B<-d> I<date>] [B<-L>] [B<-m> I<motlist>] [B<-t> I<time>] -[B<-v> I<via>] I<station> +B<hafas-m> [B<-a>] [B<-d> I<date>] [B<-L>] [B<-m> I<motlist>] [B<-t> I<time>] +I<station> =head1 VERSION @@ -156,8 +152,8 @@ version 1.05 =head1 DESCRIPTION -db-ris is an interface to the DeutscheBahn departure monitor -available at L<http://reiseauskunft.bahn.de/bin/bhftafel.exe/dn>. +hafas-m is an interface to HAFAS-based departure monitors, for instance the +one available at L<http://reiseauskunft.bahn.de/bin/bhftafel.exe/dn>. It requests all departures at I<station> (optionally filtered by date, time, route and means of transport) and lists them on stdout, similar to the big @@ -178,10 +174,6 @@ I<station>, not I<station> and end. Date to list departures for. Default: today. -=item B<-f>, B<--full-route> - -Display complete routes (including arrival times) of all trains. - =item B<-l>, B<--lang> B<d>|B<e>|B<i>|B<n> Set language used for additional information. Supports B<d>eutsch (default), @@ -215,13 +207,6 @@ only want to see S-Bahn and U-Bahn departures, you'd have to use C<< -m Time to list departures for. Default: now. -=item B<-v>, B<--via> I<regex> - -Only display trains whose route (all stations between the current stop and the -destination) matches the perl regular expression I<regex>. The match is not -case-sensitive. Use '^regex$' to match a full string, but be aware that this -may not work as expected. - =item B<-V>, B<--version> Show version information. @@ -250,12 +235,11 @@ None. =head1 BUGS AND LIMITATIONS -There are a few character encoding problems (most notably, B<--via> does not -understand UTF-8 umlauts). +Unknown. =head1 AUTHOR -Copyright (C) 2011 by Daniel Friesel E<lt>derf@finalrewind.orgE<gt> +Copyright (C) 2015 by Daniel Friesel E<lt>derf@finalrewind.orgE<gt> =head1 LICENSE diff --git a/lib/Travel/Status/DE/DeutscheBahn.pm b/lib/Travel/Status/DE/DeutscheBahn.pm index 94af401..edec8fe 100644 --- a/lib/Travel/Status/DE/DeutscheBahn.pm +++ b/lib/Travel/Status/DE/DeutscheBahn.pm @@ -4,258 +4,16 @@ use strict; use warnings; use 5.010; -no if $] >= 5.018, warnings => "experimental::smartmatch"; - -use Carp qw(confess); -use LWP::UserAgent; -use POSIX qw(strftime); -use Travel::Status::DE::DeutscheBahn::Result; -use XML::LibXML; +use parent 'Travel::Status::DE::HAFAS'; our $VERSION = '1.05'; sub new { - my ( $obj, %conf ) = @_; - my $date = strftime( '%d.%m.%Y', localtime(time) ); - my $time = strftime( '%H:%M', localtime(time) ); - - my %lwp_options = %{ $conf{lwp_options} // { timeout => 10 } }; - - my $ua = LWP::UserAgent->new(%lwp_options); - - $ua->env_proxy; - - my $reply; - - my $lang = $conf{language} // 'd'; - - if ( not $conf{station} ) { - confess('You need to specify a station'); - } - - my $ref = { - mot_filter => [ - $conf{mot}->{ice} // 1, - $conf{mot}->{ic_ec} // 1, - $conf{mot}->{d} // 1, - $conf{mot}->{nv} // 1, - $conf{mot}->{s} // 1, - $conf{mot}->{bus} // 0, - $conf{mot}->{ferry} // 0, - $conf{mot}->{u} // 0, - $conf{mot}->{tram} // 0, - ], - post => { - advancedProductMode => q{}, - input => $conf{station}, - date => $conf{date} || $date, - time => $conf{time} || $time, - REQTrain_name => q{}, - start => 'yes', - boardType => $conf{mode} // 'dep', - - # L => 'vs_java3', - }, - }; - - for my $i ( 0 .. @{ $ref->{mot_filter} } ) { - if ( $ref->{mot_filter}->[$i] ) { - $ref->{post}->{"GUIREQProduct_$i"} = 'on'; - } - } - - bless( $ref, $obj ); + my ( $class, %opt ) = @_; - $reply - = $ua->post( - "http://reiseauskunft.bahn.de/bin/bhftafel.exe/${lang}n?rt=1", - $ref->{post} ); + $opt{service} = 'deutschebahn'; - if ( $reply->is_error ) { - $ref->{errstr} = $reply->status_line(); - return $ref; - } - - $ref->{html} = $reply->content; - - $ref->{tree} = XML::LibXML->load_html( - string => $ref->{html}, - recover => 2, - suppress_errors => 1, - suppress_warnings => 1, - ); - - $ref->check_input_error(); - - return $ref; -} - -sub new_from_html { - my ( $obj, %opt ) = @_; - - my $ref = { - html => $opt{html}, - post => { boardType => $opt{mode} // 'dep' } - }; - - $ref->{post}->{boardType} = $opt{mode} // 'dep'; - - $ref->{tree} = XML::LibXML->load_html( - string => $ref->{html}, - recover => 2, - suppress_errors => 1, - suppress_warnings => 1, - ); - - return bless( $ref, $obj ); -} - -sub check_input_error { - my ($self) = @_; - - my $xp_errdiv = XML::LibXML::XPathExpression->new( - '//div[@class = "errormsg leftMargin"]'); - my $xp_opts - = XML::LibXML::XPathExpression->new('//select[@class = "error"]'); - my $xp_values = XML::LibXML::XPathExpression->new('./option'); - - my $e_errdiv = ( $self->{tree}->findnodes($xp_errdiv) )[0]; - my $e_opts = ( $self->{tree}->findnodes($xp_opts) )[0]; - - if ($e_errdiv) { - $self->{errstr} = $e_errdiv->textContent; - - if ($e_opts) { - my @nodes = ( $e_opts->findnodes($xp_values) ); - $self->{errstr} - .= join( q{}, map { "\n" . $_->textContent } @nodes ); - } - } - - return; -} - -sub errstr { - my ($self) = @_; - - return $self->{errstr}; -} - -sub get_node { - my ( $parent, $name, $xpath, $index ) = @_; - $index //= 0; - - my @nodes = $parent->findnodes($xpath); - - if ( $#nodes < $index ) { - - # called by map, so we must explicitly return undef. - ## no critic (Subroutines::ProhibitExplicitReturnUndef) - return undef; - } - - my $node = $nodes[$index]; - - return $node->textContent; -} - -sub results { - my ($self) = @_; - my $mode = $self->{post}->{boardType}; - - my $xp_element = XML::LibXML::XPathExpression->new( - "//table[\@class = \"result stboard ${mode}\"]/tr"); - my $xp_train_more = XML::LibXML::XPathExpression->new('./td[3]/a'); - - # bhftafel.exe is not y2k1-safe - my $re_morelink = qr{ date = (?<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"]' ], - [ 'routeinfo', './td[@class="route"]//span[@class="red bold"]' ], - ); - - @parts = map { [ $_->[0], XML::LibXML::XPathExpression->new( $_->[1] ) ] } - @parts; - - my $re_via = qr{ - ^ \s* (?<stop> .+? ) \s* \n - (?<time> \d{1,2}:\d{1,2} ) - }mx; - - if ( defined $self->{results} ) { - return @{ $self->{results} }; - } - if ( not defined $self->{tree} ) { - return; - } - - $self->{results} = []; - - for my $tr ( @{ $self->{tree}->findnodes($xp_element) } ) { - - my @via; - my $first = 1; - my ( $time, $train, $route, $dest, $platform, $info, $routeinfo ) - = map { get_node( $tr, @{$_} ) } @parts; - my $e_train_more = ( $tr->findnodes($xp_train_more) )[0]; - - if ( not( $time and $dest ) ) { - next; - } - - $e_train_more->getAttribute('href') =~ $re_morelink; - - my $date = $+{date}; - - substr( $date, 6, 0 ) = '20'; - - $platform //= q{}; - $info //= q{}; - $routeinfo //= q{}; - - for my $str ( $time, $train, $dest, $platform, $info, $routeinfo ) { - $str =~ s/\n/ /mg; - $str =~ tr/ //s; - $str =~ s/^ +//; - $str =~ s/ +$//; - } - - while ( $route =~ m{$re_via}g ) { - if ($first) { - $first = 0; - next; - } - - if ( $+{stop} =~ m{ [(] Halt \s entf.llt [)] }ox ) { - next; - } - - push( @via, [ $+{time}, $+{stop} ] ); - } - - 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, - routeinfo_raw => $routeinfo, - ) - ); - } - - return @{ $self->{results} }; + return $class->SUPER::new(%opt); } 1; @@ -264,14 +22,14 @@ __END__ =head1 NAME -Travel::Status::DE::DeutscheBahn - Interface to the DeutscheBahn online -arrival/departure monitor +Travel::Status::DE::HAFAS - Interface to HAFAS-based online arrival/departure +monitors =head1 SYNOPSIS - use Travel::Status::DE::DeutscheBahn; + use Travel::Status::DE::HAFAS; - my $status = Travel::Status::DE::DeutscheBahn->new( + my $status = Travel::Status::DE::HAFAS->new( station => 'Essen Hbf', ); @@ -295,8 +53,8 @@ version 1.05 =head1 DESCRIPTION -Travel::Status::DE::DeutscheBahn is an interface to the DeutscheBahn -arrival/departure monitor available at +Travel::Status::DE::DeutscheBahn is an interface to the Deutsche Bahn +departure monitor available at L<http://reiseauskunft.bahn.de/bin/bhftafel.exe/dn>. It takes a station name and (optional) date and time and reports all arrivals @@ -310,67 +68,12 @@ unspecified). =item my $status = Travel::Status::DE::DeutscheBahn->new(I<%opts>) Requests the departures/arrivals as specified by I<opts> and returns a new -Travel::Status::DE::DeutscheBahn element with the results. Dies if the wrong +Travel::Status::DE::HAFAS element with the results. Dies if the wrong I<opts> were passed. -Supported I<opts> are: - -=over - -=item B<station> => I<station> - -The train station to report for, e.g. "Essen HBf" or -"Alfredusbad, Essen (Ruhr)". Mandatory. - -=item B<date> => I<dd>.I<mm>.I<yyyy> - -Date to report for. Defaults to the current day. - -=item B<language> => I<language> - -Set language for additional information. Accepted arguments: B<d>eutsch, -B<e>nglish, B<i>talian, B<n> (dutch). - -=item B<lwp_options> => I<\%hashref> - -Passed on to C<< LWP::UserAgent->new >>. Defaults to C<< { timeout => 10 } >>, -you can use an empty hashref to override it. - -=item B<time> => I<hh>:I<mm> - -Time to report for. Defaults to now. - -=item B<mode> => B<arr>|B<dep> - -By default, Travel::Status::DE::DeutscheBahn reports train departures -(B<dep>). Set this to B<arr> to get arrivals instead. - -=item B<mot> => I<\%hashref> - -Modes of transport to show. Accepted keys are: B<ice> (ICE trains), B<ic_ec> -(IC and EC trains), B<d> (InterRegio and similarly fast trains), B<nv> -("Nahverkehr", mostly RegionalExpress trains), B<s> ("S-Bahn"), B<bus>, -B<ferry>, B<u> ("U-Bahn") and B<tram>. - -Setting a mode (as hash key) to 1 includes it, 0 excludes it. undef leaves it -at the default. - -By default, the following are shown: ice, ic_ec, d, nv, s. - -=back - -=item $status->errstr - -In case of an error in the HTTP request, returns a string describing it. If -no error occurred, returns undef. - -=item $status->results - -Returns a list of arrivals/departures. Each list element is a -Travel::Status::DE::DeutscheBahn::Result(3pm) object. - -If no matching results were found or the parser / http request failed, returns -undef. +Calls Travel::Status::DE::HAFAS->new with service = DB. All I<opts> are passed +on. Please see Travel::Status::DE::HAFAS(3pm) for I<opts> documentation +and other methdos. =back @@ -386,21 +89,23 @@ None. =item * LWP::UserAgent(3pm) +=item * Travel::Status::DE::HAFAS(3pm) + =item * XML::LibXML(3pm) =back =head1 BUGS AND LIMITATIONS -There are a few character encoding issues. +Unknown. =head1 SEE ALSO -Travel::Status::DE::DeutscheBahn::Result(3pm). +Travel::Status::DE::HAFAS(3pm). =head1 AUTHOR -Copyright (C) 2011 by Daniel Friesel E<lt>derf@finalrewind.orgE<gt> +Copyright (C) 2015 by Daniel Friesel E<lt>derf@finalrewind.orgE<gt> =head1 LICENSE diff --git a/lib/Travel/Status/DE/DeutscheBahn/Result.pm b/lib/Travel/Status/DE/DeutscheBahn/Result.pm deleted file mode 100644 index be9ec18..0000000 --- a/lib/Travel/Status/DE/DeutscheBahn/Result.pm +++ /dev/null @@ -1,365 +0,0 @@ -package Travel::Status::DE::DeutscheBahn::Result; - -use strict; -use warnings; -use 5.010; - -no if $] >= 5.018, warnings => "experimental::smartmatch"; - -use parent 'Class::Accessor'; - -our $VERSION = '1.05'; - -Travel::Status::DE::DeutscheBahn::Result->mk_ro_accessors( - qw(date time train route_end route_raw platform info_raw routeinfo_raw)); - -sub new { - my ( $obj, %conf ) = @_; - - my $ref = \%conf; - - return bless( $ref, $obj ); -} - -sub destination { - my ($self) = @_; - - return $self->{route_end}; -} - -sub line { - my ($self) = @_; - - return $self->{train}; -} - -sub info { - my ($self) = @_; - - my $info = $self->info_raw; - - $info =~ s{ ,Grund }{}ox; - $info =~ s{ ^ \s+ }{}ox; - $info - =~ s{ (?: ^ | , ) (?: p.nktlich | [nk] [.] [Aa] [.] | on \s time ) }{}ox; - $info =~ s{ ^ , }{}ox; - - return $info; -} - -sub delay { - my ($self) = @_; - - my $info = $self->info_raw; - - if ( $info =~ m{ p.nktlich }ox ) { - return 0; - } - if ( $info =~ m{ (?: ca \. \s* )? \+ (?<delay> \d+) :? \s* }ox ) { - return $+{delay}; - } - - return; -} - -sub is_cancelled { - my ($self) = @_; - my $info = $self->info_raw; - - if ( $info =~ m{ Fahrt \s f.llt \s aus }ox ) { - return 1; - } - return 0; -} - -sub origin { - my ($self) = @_; - - return $self->{route_end}; -} - -sub route { - my ($self) = @_; - - my @stops = map { $_->[1] } @{ $self->{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 ) = @_; - - my @via = $self->route; - my ( @via_main, @via_show, $last_stop ); - $max_parts //= 3; - - for my $stop (@via) { - if ( $stop =~ m{ Hbf | Flughafen }ox ) { - push( @via_main, $stop ); - } - } - $last_stop = pop(@via); - - if ( @via_main and $via_main[-1] eq $last_stop ) { - pop(@via_main); - } - - if ( @via_main and @via and $via[0] eq $via_main[0] ) { - shift(@via_main); - } - - if ( @via < $max_parts ) { - @via_show = @via; - } - else { - if ( @via_main >= $max_parts ) { - @via_show = ( $via[0] ); - } - else { - @via_show = splice( @via, 0, $max_parts - @via_main ); - } - - while ( @via_show < $max_parts and @via_main ) { - my $stop = shift(@via_main); - if ( $stop ~~ \@via_show or $stop eq $last_stop ) { - next; - } - push( @via_show, $stop ); - } - } - - for (@via_show) { - s{ ?Hbf}{}; - } - - return @via_show; - -} - -sub route_timetable { - my ($self) = @_; - - return @{ $self->{route} }; -} - -sub TO_JSON { - my ($self) = @_; - - return { %{$self} }; -} - -sub type { - my ($self) = @_; - - # $self->{train} is either "TYPE 12345" or "TYPE12345" - my ($type) = ( $self->{train} =~ m{ ^ ([A-Z]+) }x ); - - return $type; -} - -1; - -__END__ - -=head1 NAME - -Travel::Status::DE::DeutscheBahn::Result - Information about a single -arrival/departure received by Travel::Status::DE::DeutscheBahn - -=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, - ); - } - - # or (depending on module setup) - for my $arrival ($status->results) { - printf( - "At %s: %s from %s on platform %s\n", - $arrival->time, - $arrival->line, - $arrival->origin, - $arrival->platform, - ); - } - -=head1 VERSION - -version 1.05 - -=head1 DESCRIPTION - -Travel::Status::DE::DeutscheBahn::Result describes a single arrival/departure -as obtained by Travel::Status::DE::DeutscheBahn. It contains information about -the platform, time, route and more. - -=head1 METHODS - -=head2 ACCESSORS - -=over - -=item $result->date - -Arrival/Departure date in "dd.mm.yyyy" format. - -=item $result->delay - -Returns the train's delay in minutes, or undef if it is unknown. - -=item $result->info - -Returns additional information, for instance the reason why the train is -delayed. May be an empty string if no (useful) information is available. - -=item $result->is_cancelled - -True if the train was cancelled, false otherwise. - -=item $result->line - -=item $result->train - -Returns the line name, either in a format like "S 1" (S-Bahn line 1) -or "RE 10111" (RegionalExpress train 10111, no line information). - -=item $result->platform - -Returns the platform from which the train will depart / at which it will -arrive. - -=item $result->route - -Returns a list of station names the train will pass between the selected -station and its origin/destination. - -=item $result->route_end - -Returns the last element of the route. Depending on how you set up -Travel::Status::DE::DeutscheBahn (arrival or departure listing), this is -either the train's destination or its origin station. - -=item $result->destination - -=item $result->origin - -Convenience aliases for $result->route_end. - -=item $result->route_interesting([I<max>]) - -Returns a list of up to I<max> (default: 3) interesting stations the train -will pass on its journey. Since deciding whether a station is interesting or -not is somewhat tricky, this feature should be considered experimental. - -The first element of the list is always the train's next stop. The following -elements contain as many main stations as possible, but there may also be -smaller stations if not enough main stations are available. - -In future versions, other factors may be taken into account as well. For -example, right now airport stations are usually not included in this list, -although they should be. - -Note that all main stations will be stripped of their "Hbf" suffix. - -=item $result->route_raw - -Returns the raw string used to create the route array. - -Note that cancelled stops are filtered from B<route>, but still present in -B<route_raw>. - -=item $result->route_timetable - -Similar to B<route>. 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. - -=item $result->type - -Returns the type of this train, e.g. "S" for S-Bahn, "RE" for Regional Express -or "ICE" for InterCity-Express. - -=back - -=head2 INTERNAL - -=over - -=item $result = Travel::Status::DE::DeutscheBahn::Result->new(I<%data>) - -Returns a new Travel::Status::DE::DeutscheBahn::Result object. -You usually do not need to call this. - -Required I<data>: - -=over - -=item B<time> => I<hh:mm> - -=item B<train> => I<string> - -=item B<route_raw> => I<string> - -=item B<route> => I<arrayref> - -=item B<route_end> => I<string> - -=item B<platform> => I<string> - -=item B<info_raw> => I<string> - -=back - -=back - -=head1 DIAGNOSTICS - -None. - -=head1 DEPENDENCIES - -=over - -=item Class::Accessor(3pm) - -=back - -=head1 BUGS AND LIMITATIONS - -None known. - -=head1 SEE ALSO - -Travel::Status::DE::DeutscheBahn(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/HAFAS.pm b/lib/Travel/Status/DE/HAFAS.pm new file mode 100644 index 0000000..d091f52 --- /dev/null +++ b/lib/Travel/Status/DE/HAFAS.pm @@ -0,0 +1,346 @@ +package Travel::Status::DE::HAFAS; + +use strict; +use warnings; +use 5.010; + +no if $] >= 5.018, warnings => "experimental::smartmatch"; + +use Carp qw(confess); +use LWP::UserAgent; +use POSIX qw(strftime); +use Travel::Status::DE::HAFAS::Result; +use XML::LibXML; + +our $VERSION = '1.05'; + +sub new { + my ( $obj, %conf ) = @_; + + my $date = $conf{date} // strftime( '%d.%m.%Y', localtime(time) ); + my $time = $conf{time} // strftime( '%H:%M', localtime(time) ); + my $lang = $conf{language} // 'd'; + my $mode = $conf{mode} // 'dep'; + my $service = $conf{service} // 'DB'; + + my %lwp_options = %{ $conf{lwp_options} // { timeout => 10 } }; + + my $ua = LWP::UserAgent->new(%lwp_options); + + $ua->env_proxy; + + my $reply; + + if ( not $conf{station} ) { + confess('You need to specify a station'); + } + + my $ref = { + active_service => $service, + developer_mode => $conf{developer_mode}, + post => { + input => $conf{station}, + date => $date, + time => $time, + start => 'yes', # value doesn't matter, just needs to be set + boardType => $mode, + L => 'vs_java3', + }, + service => { + DB => { + url => 'http://reiseauskunft.bahn.de/bin/bhftafel.exe', + name => 'Deutsche Bahn', + productbits => + [qw[ice ic_ec d nv s bus ferry u tram ondemand x x x x]], + } + }, + }; + + bless( $ref, $obj ); + + $ref->set_productfilter; + + my $url = $ref->{service}{$service}{url} . '/' . $lang . 'n'; + + $reply = $ua->post( $url, $ref->{post} ); + + if ( $reply->is_error ) { + $ref->{errstr} = $reply->status_line; + return $ref; + } + + # the interface does not return valid XML (but it's close!) + $ref->{raw_xml} + = '<?xml version="1.0" encoding="iso-8859-15"?><wrap>' + . $reply->content + . '</wrap>'; + + if ( $ref->{developer_mode} ) { + say $ref->{raw_xml}; + } + + $ref->{tree} = XML::LibXML->load_xml( + string => $ref->{raw_xml}, + + # recover => 2, + # suppress_errors => 1, + # suppress_warnings => 1, + ); + + if ( $ref->{developer_mode} ) { + say $ref->{tree}->toString(1); + } + + $ref->check_input_error; + return $ref; +} + +sub set_productfilter { + my ($self) = @_; + + my $service = $self->{active_service}; + + $self->{post}{productsFilter} + = '1' x ( scalar @{ $self->{service}{$service}{productbits} } ); +} + +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') . ')'; + } + + return; +} + +sub errstr { + my ($self) = @_; + + return $self->{errstr}; +} + +sub 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 ( defined $self->{results} ) { + return @{ $self->{results} }; + } + if ( not defined $self->{tree} ) { + return; + } + + $self->{results} = []; + + 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 $routeinfo = $tr->textContent; + my @messages; + + if ( not( $time and $dest ) ) { + next; + } + + for my $n (@message_nodes) { + push( @messages, $n->getAttribute('header') ); + } + + substr( $date, 6, 0 ) = '20'; + + $info //= q{}; + $routeinfo //= q{}; + + $train =~ s{#.*$}{}; + + push( + @{ $self->{results} }, + Travel::Status::DE::HAFAS::Result->new( + date => $date, + raw_delay => $delay, + raw_e_delay => $e_delay, + messages => \@messages, + time => $time, + train => $train, + route_end => $dest, + platform => $platform, + new_platform => $new_platform, + info => $info, + routeinfo_raw => $routeinfo, + ) + ); + } + + return @{ $self->{results} }; +} + +# static +sub get_services { +} + +1; + +__END__ + +=head1 NAME + +Travel::Status::DE::HAFAS - Interface to HAFAS-based online arrival/departure +monitors + +=head1 SYNOPSIS + + use Travel::Status::DE::HAFAS; + + my $status = Travel::Status::DE::HAFAS->new( + station => 'Essen Hbf', + ); + + if (my $err = $status->errstr) { + die("Request error: ${err}\n"); + } + + 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::HAFAS is an interface to HAFAS-based +arrival/departure monitors, for instance the one available at +L<http://reiseauskunft.bahn.de/bin/bhftafel.exe/dn>. + +It takes a station name and (optional) date and time and reports all arrivals +or departures at that station starting at the specified point in time (now if +unspecified). + +=head1 METHODS + +=over + +=item my $status = Travel::Status::DE::HAFAS->new(I<%opts>) + +Requests the departures/arrivals as specified by I<opts> and returns a new +Travel::Status::DE::HAFAS element with the results. Dies if the wrong +I<opts> were passed. + +Supported I<opts> are: + +=over + +=item B<station> => I<station> + +The train station to report for, e.g. "Essen HBf" or +"Alfredusbad, Essen (Ruhr)". Mandatory. + +=item B<date> => I<dd>.I<mm>.I<yyyy> + +Date to report for. Defaults to the current day. + +=item B<language> => I<language> + +Set language for additional information. Accepted arguments: B<d>eutsch, +B<e>nglish, B<i>talian, B<n> (dutch). + +=item B<lwp_options> => I<\%hashref> + +Passed on to C<< LWP::UserAgent->new >>. Defaults to C<< { timeout => 10 } >>, +you can use an empty hashref to override it. + +=item B<time> => I<hh>:I<mm> + +Time to report for. Defaults to now. + +=item B<mode> => B<arr>|B<dep> + +By default, Travel::Status::DE::HAFAS reports train departures +(B<dep>). Set this to B<arr> to get arrivals instead. + +=item B<mot> => I<\%hashref> + +Modes of transport to show. Accepted keys are: B<ice> (ICE trains), B<ic_ec> +(IC and EC trains), B<d> (InterRegio and similarly fast trains), B<nv> +("Nahverkehr", mostly RegionalExpress trains), B<s> ("S-Bahn"), B<bus>, +B<ferry>, B<u> ("U-Bahn") and B<tram>. + +Setting a mode (as hash key) to 1 includes it, 0 excludes it. undef leaves it +at the default. + +By default, the following are shown: ice, ic_ec, d, nv, s. + +=back + +=item $status->errstr + +In case of an error in the HTTP request, returns a string describing it. If +no error occurred, returns undef. + +=item $status->results + +Returns a list of arrivals/departures. Each list element is a +Travel::Status::DE::HAFAS::Result(3pm) object. + +If no matching results were found or the parser / http request failed, returns +undef. + +=back + +=head1 DIAGNOSTICS + +None. + +=head1 DEPENDENCIES + +=over + +=item * Class::Accessor(3pm) + +=item * LWP::UserAgent(3pm) + +=item * XML::LibXML(3pm) + +=back + +=head1 BUGS AND LIMITATIONS + +Unknown. + +=head1 SEE ALSO + +Travel::Status::DE::HAFAS::Result(3pm). + +=head1 AUTHOR + +Copyright (C) 2015 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/HAFAS/Result.pm b/lib/Travel/Status/DE/HAFAS/Result.pm new file mode 100644 index 0000000..f2aee63 --- /dev/null +++ b/lib/Travel/Status/DE/HAFAS/Result.pm @@ -0,0 +1,277 @@ +package Travel::Status::DE::HAFAS::Result; + +use strict; +use warnings; +use 5.010; + +no if $] >= 5.018, warnings => 'experimental::smartmatch'; + +use parent 'Class::Accessor'; + +our $VERSION = '1.05'; + +Travel::Status::DE::HAFAS::Result->mk_ro_accessors( + qw(date info raw_e_delay raw_delay time train route_end info_raw)); + +sub new { + my ( $obj, %conf ) = @_; + + my $ref = \%conf; + + return bless( $ref, $obj ); +} + +sub delay { + my ($self) = @_; + + if ( defined $self->{raw_e_delay} ) { + return $self->{raw_e_delay}; + } + if ( defined $self->{raw_delay} + and $self->{raw_delay} ne q{-} + and $self->{raw_delay} ne 'cancel' ) + { + return $self->{raw_delay}; + } + return; +} + +sub destination { + my ($self) = @_; + + return $self->{route_end}; +} + +sub line { + my ($self) = @_; + + return $self->{train}; +} + +sub is_cancelled { + my ($self) = @_; + + if ( $self->{raw_delay} and $self->{raw_delay} eq 'cancel' ) { + return 1; + } + return 0; +} + +sub is_changed_platform { + my ($self) = @_; + + if ( defined $self->{new_platform} and defined $self->{platform} ) { + if ( $self->{new_platform} ne $self->{platform} ) { + return 1; + } + return 0; + } + if ( defined $self->{net_platform} ) { + return 1; + } + + return 0; +} + +sub messages { + my ($self) = @_; + + if ( $self->{messages} ) { + return @{ $self->{messages} }; + } + return; +} + +sub origin { + my ($self) = @_; + + return $self->{route_end}; +} + +sub platform { + my ($self) = @_; + + return $self->{new_platform} // $self->{platform}; +} + +sub TO_JSON { + my ($self) = @_; + + return { %{$self} }; +} + +sub type { + my ($self) = @_; + + # $self->{train} is either "TYPE 12345" or "TYPE12345" + my ($type) = ( $self->{train} =~ m{ ^ ([[:upper:]]+) }x ); + + return $type; +} + +1; + +__END__ + +=head1 NAME + +Travel::Status::DE::HAFAS::Result - Information about a single +arrival/departure received by Travel::Status::DE::HAFAS + +=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, + ); + } + + # or (depending on module setup) + for my $arrival ($status->results) { + printf( + "At %s: %s from %s on platform %s\n", + $arrival->time, + $arrival->line, + $arrival->origin, + $arrival->platform, + ); + } + +=head1 VERSION + +version 1.05 + +=head1 DESCRIPTION + +Travel::Status::DE::HAFAS::Result describes a single arrival/departure +as obtained by Travel::Status::DE::HAFAS. It contains information about +the platform, time, route and more. + +=head1 METHODS + +=head2 ACCESSORS + +=over + +=item $result->date + +Arrival/Departure date in "dd.mm.yyyy" format. + +=item $result->delay + +Returns the train's delay in minutes, or undef if it is unknown. +Also returns undef if the train has been cancelled. + +=item $result->info + +Returns additional information, for instance the most recent delay reason. +Returns an empty string if no (useful) information is available. + +=item $result->is_cancelled + +True if the train was cancelled, false otherwise. + +=item $result->is_changed_platform + +True if the platform (as returned by the B<platform> accessor) is not the +scheduled one. Note that the scheduled platform is unknown in this case. + +=item $result->messages + +Returns a list of message strings related to this train. Messages usually are +service notices (e.g. "missing carriage") or detailed delay reasons +(e.g. "switch damage between X and Y, expect delays"). + +=item $result->line + +=item $result->train + +Returns the line name, either in a format like "S 1" (S-Bahn line 1) +or "RE 10111" (RegionalExpress train 10111, no line information). + +=item $result->platform + +Returns the platform from which the train will depart / at which it will +arrive. Realtime data if available, schedule data otherwise. + +=item $result->route_end + +Returns the last element of the route. Depending on how you set up +Travel::Status::DE::HAFAS (arrival or departure listing), this is +either the train's destination or its origin station. + +=item $result->destination + +=item $result->origin + +Convenience aliases for C<< $result->route_end >>. + +=item $result->time + +Returns the arrival/departure time as string in "hh:mm" format. + +=item $result->type + +Returns the type of this train, e.g. "S" for S-Bahn, "RE" for Regional Express +or "ICE" for InterCity-Express. + +=back + +=head2 INTERNAL + +=over + +=item $result = Travel::Status::DE::HAFAS::Result->new(I<%data>) + +Returns a new Travel::Status::DE::HAFAS::Result object. +You usually do not need to call this. + +Required I<data>: + +=over + +=item B<time> => I<hh:mm> + +=item B<train> => I<string> + +=item B<route_end> => I<string> + +=item B<platform> => I<string> + +=item B<info_raw> => I<string> + +=back + +=back + +=head1 DIAGNOSTICS + +None. + +=head1 DEPENDENCIES + +=over + +=item Class::Accessor(3pm) + +=back + +=head1 BUGS AND LIMITATIONS + +None known. + +=head1 SEE ALSO + +Travel::Status::DE::HAFAS(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/t/20-db.t b/t/20-db.t deleted file mode 100644 index e90f853..0000000 --- a/t/20-db.t +++ /dev/null @@ -1,79 +0,0 @@ -#!/usr/bin/env perl -use strict; -use warnings; -use 5.010; - -use File::Slurp qw(slurp); -use Test::More tests => 98; - -BEGIN { - use_ok('Travel::Status::DE::DeutscheBahn'); -} -require_ok('Travel::Status::DE::DeutscheBahn'); - -my $html = slurp('t/in/essen.html'); - -my $status = Travel::Status::DE::DeutscheBahn->new_from_html(html => $html); - -isa_ok($status, 'Travel::Status::DE::DeutscheBahn'); -can_ok($status, qw(results)); - -my @departures = $status->results; - -for my $departure (@departures) { - isa_ok($departure, 'Travel::Status::DE::DeutscheBahn::Result'); - can_ok($departure, qw(date route_end destination origin info platform route - route_raw time train)); -} - -is($departures[0]->date, '06.07.2011', 'first result: date ok'); -is($departures[0]->time, '19:21', 'first result: time ok'); -is($departures[0]->train, 'RE 10228', 'first result: train ok'); -is($departures[0]->destination, 'Duisburg Hbf', 'first result: destination ok'); -is($departures[0]->platform, '2', 'first result: platform ok'); -is($departures[0]->delay, 0, 'first result: delay ok'); - -is($departures[-1]->time, '20:18', 'last result: time ok'); -is($departures[-1]->train, 'S 6', 'last result: train ok'); -is($departures[-1]->platform, '12', 'last result: platform ok'); - -is($departures[8]->time, '19:31', '9th result: time ok'); -is($departures[8]->train, 'NWB75366', '9th result: train ok'); -is($departures[8]->info_raw, 'k.A.', '9th result: info_raw ok'); -is($departures[8]->info, q{}, '9th result: info ok'); -is($departures[8]->delay, undef, '9th result: delay ok'); - -is($departures[15]->delay, 15, '16th result: delay ok'); - -is_deeply([$departures[8]->route], - ['Essen-Borbeck', 'Bottrop Hbf', 'Gladbeck West', 'Gladbeck-Zweckel', - 'Feldhausen', 'Dorsten', 'Hervest-Dorsten', 'Deuten', 'Rhade', - 'Marbeck-Heiden', 'Borken(Westf)'], '9th result: route ok'); - -is_deeply([$departures[8]->route_timetable], - [ - ['19:36', 'Essen-Borbeck'], - ['19:43', 'Bottrop Hbf'], - ['19:50', 'Gladbeck West'], - ['19:53', 'Gladbeck-Zweckel'], - ['19:56', 'Feldhausen'], - ['20:01', 'Dorsten'], - ['20:05', 'Hervest-Dorsten'], - ['20:10', 'Deuten'], - ['20:15', 'Rhade'], - ['20:21', 'Marbeck-Heiden'], - ['20:27', 'Borken(Westf)'], - ], - '9th result: route_timetable ok'); - -is_deeply([$departures[5]->route_interesting(3)], - ['Essen-Steele', 'Essen-Steele Ost', 'Bochum'], - '6th result: route_interesting(3) ok'); - -is_deeply([$departures[7]->route_interesting(3)], - ['Wattenscheid', 'Bochum', 'Dortmund'], - '8th result: route_interesting(3) ok'); - -is_deeply([$departures[10]->route_interesting(5)], - [qw[Wattenscheid Bochum Witten Hagen]], - '11th result: route_interesting(5) ok'); diff --git a/t/in/essen.html b/t/in/essen.html deleted file mode 100644 index 246b430..0000000 --- a/t/in/essen.html +++ /dev/null @@ -1,2609 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<title>DB BAHN - Haltestelleninformationen - Ausgabe</title> -<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" /> -<link rel="shortcut icon" href="/v/820/img/favicon.ico" /> -<link rel="stylesheet" type="text/css" href="/v/820/css/hafas.css" /> -<link rel="stylesheet" type="text/css" href="/v/760/cms/css/bahn.min.css" /> -<!--[if lte IE 6]> -<link href="/v/760/cms/css/bahn-ie6.min.css" rel="stylesheet" type="text/css" /> -<![endif]--> -<!--[if IE 7]> -<link href="/v/760/cms/css/bahn-ie7.min.css" rel="stylesheet" type="text/css" /> -<![endif]--> -<!--[if lte IE 7]> -<link href="/v/800/css/hafas-ie.css" rel="stylesheet" type="text/css" /> -<![endif]--> -<script type="text/javascript"> -// <![CDATA[ -var BAHNCSS = { -load: function( type ) { -var scriptStyles = document.createElement( 'link' ); -scriptStyles.rel = 'stylesheet'; -scriptStyles.type = 'text/css'; -if(type == 'hafasDynamic') -scriptStyles.href = '/v/820/css/hafas-dyn.css'; -else -scriptStyles.href = '/v/760/cms/css/bahn-dyn.min.css'; -scriptStyles.media = 'screen, projection, handheld, print'; -if ( head = document.getElementsByTagName( 'head' )[0] ) { -head.appendChild( scriptStyles ); -} -} -} -BAHNCSS.load( 'dynamicCSS' ); -BAHNCSS.load( 'hafasDynamic' ); -// ]]> -</script> -<style type="text/css"> -<!-- ---> -</style> -<!--[if lte IE 6]> -<style type="text/css"> -body {behavior:url("/v/600/css/hafas-dyn-hover.htc");} -</style> -<![endif]--> -<script type="text/javascript" src="/v/760/js/external.js"></script> -<script type="text/javascript" src="/v/820/js/hafas_tp.js"></script> -<script type="text/javascript" src="/v/760/js/simple_ajax.js"></script> -<script type="text/javascript"> -<!-- -var tmpDiv = document.createElement("div"); -tmpDiv.innerHTML = "Frage oder Suchbegriff eingeben …"; -var searchDefault = tmpDiv.innerHTML; -var defaultString = new Array("",searchDefault); -var inputFields = new Array({"name":"q","strIndex":1}); -var defaultStringIndex = new Object(); -function sHC(link, name, evaId, time) -{ -if(document.getElementById("hafasConMenu") != null) -delConMenu("hafasConMenu","hafasConMenu"); -var menuContainer = document.createElement("div"); -menuContainer.id = "hafasConMenu"; -menuContainer.className = "hafasMenuContainer dep"; -menuContainer.innerHTML = "<div class='floatRight' onclick='delConMenu(\"hafasConMenu\")'><img src='/v/820/img/schliessen_outline_10x10.gif' \/></div>"; -menuContainer.innerHTML += "<div class='dep'><a class='arrowlink' href='http://reiseauskunft.bahn.de/bin/bhftafel.exe/dn?ld=96248&country=DEU&rt=1&evaId="+evaId+"&boardType=dep&time="+time+"&productsFilter=11111&start=yes'>Abfahrtsplan</a></div>"; -if(evaId.substr(0,2) == "80") -menuContainer.innerHTML += "<div class='dep'><a class='arrowlink' href='http://reiseauskunft.bahn.de/bin/bhftafel.exe/dn?ld=96248&country=DEU&rt=1&showBhfInfo=yes&evaId="+evaId+"&info=yes&' target='stationinfo' onclick='blur();popUp(\"about:blank\",\"stationinfo\",\"stInfo\");'>Bahnhofsinformationen</a></div>"; -var currentNode = link; -var offsetTop = link.offsetHeight+3; -var offsetLeft = -10; -while(currentNode) -{ -offsetTop += currentNode.offsetTop; -offsetLeft += currentNode.offsetLeft; -currentNode = currentNode.offsetParent; -} -menuContainer.style.top = offsetTop+"px"; -menuContainer.style.left = offsetLeft+"px"; -document.getElementsByTagName("body")[0].appendChild(menuContainer); -} -function delConMenu(menuContainer) -{ -//document.getElementById(mbsContainer).removeChild(document.getElementById(menuContainer)); -document.getElementsByTagName("body")[0].removeChild(document.getElementById(menuContainer)); -} -//--> -</script> -<script type="text/javascript" src="/v/800/js/FSuggest.js"></script> -<script type="text/javascript" src="/v/760/js/hafas_standard_calendar_combined.js"></script> -<link rel="stylesheet" type="text/css" href="/v/760/cms/css/bahn_calendar_div.css" /> -<script type="text/javascript"> -<!-- -function markarrowlink(button) { -button.style.color="#f00"; -button.style.textDecoration = "underline"; -} -function resetarrowlink(button) { -button.style.color="#000"; -button.style.textDecoration = "none"; -} -// --> -</script> -</head> -<body onload="removeDefaultValues(false);initFontsize();" style=""> -<div id="doc" style="height:100%;"> -<div id="header" > -<h1 id="logo"> -<img src="/v/820/img/logo-db-bahn.gif" width="126" height="32" alt="DB Bahn" /> -</h1> -<div id="header-elements" class="clearfix"> -<form id="search" action="http://www.bahn.de/q" method="get" accept-charset="ISO-8859-1" target="_blank"> -<fieldset> -<p> -<label for="search-query">Suchen</label> -<input id="search-query" type="text" name="q" title="Suche" maxlength="500" value="Frage oder Suchbegriff eingeben …" class="search-field hasDefault" tabindex="80" role="search" /> -<input id="search-site" type="hidden" name="s" value="p,international,regional" /> -<input id="search-lang" type="hidden" name="l" value="de" /> -<input id="search-maxresults" type="hidden" name="m" value="100" /> -<input type="hidden" disabled="disabled" id="search-query-default" value="Frage oder Suchbegriff eingeben …" /> -<input type="hidden" disabled="disabled" id="search-query-load-query" value="&height=600&width=657&inlineId=hiddenModalContent&modal=false" /> -</p> -<!-- Submit --> -<p class="button-inside"> -<span class="button-border button-normal"> -<noscript> -<input type="submit" class="button deleteDefaults" name="start" value="Suchen" title="Suchen" /> -</noscript> -<script type="text/javascript"> -<!-- -document.write('<button type="submit" name="search-submit" tabindex="90">Suchen</button>'); -//--> -</script> -</span> -</p> -</fieldset> -</form> -<ul id="service-nav" class="clearfix"> -<li><a href="http://www.bahn.de/app_kontakt_pk_de_DEU.shtml" tabindex="10" target="_blank" class="first">Kontakt</a></li> -<li><a href="http://www.bahn.de/app_hilfe_pk_de_DEU.shtml" tabindex="20" target="_blank" >Hilfe</a></li> -<li><a href="http://www.bahn.de/app_sitemap_pk_de_DEU.shtml" tabindex="30" target="_blank">Sitemap</a></li> -<li id="font-sizer"> -<a href="http://reiseauskunft.bahn.de/bin/bhftafel.exe?input=Essen+Hbf&GUIREQProduct_2=on&time=19%3A19&date=06.07.2011&REQTrain_name=&GUIREQProduct_4=on&boardType=dep&GUIREQProduct_1=on&GUIREQProduct_3=on&GUIREQProduct_0=on&advancedProductMode=&start=Suchen&&font-size=0" tabindex="40" class="font-normal" title="Schrift normal">a</a><span>,</span> -<a href="http://reiseauskunft.bahn.de/bin/bhftafel.exe?input=Essen+Hbf&GUIREQProduct_2=on&time=19%3A19&date=06.07.2011&REQTrain_name=&GUIREQProduct_4=on&boardType=dep&GUIREQProduct_1=on&GUIREQProduct_3=on&GUIREQProduct_0=on&advancedProductMode=&start=Suchen&&font-size=1" tabindex="50" class="font-large" title="Schrift größer">a+</a><span>,</span> -<a href="http://reiseauskunft.bahn.de/bin/bhftafel.exe?input=Essen+Hbf&GUIREQProduct_2=on&time=19%3A19&date=06.07.2011&REQTrain_name=&GUIREQProduct_4=on&boardType=dep&GUIREQProduct_1=on&GUIREQProduct_3=on&GUIREQProduct_0=on&advancedProductMode=&start=Suchen&&font-size=2" tabindex="60" class="font-xl" title="Schrift extra groß">a++</a> -</li> -</ul> -</div> -</div> -<div id="main-nav" class="clearfix"> -<h2>Hauptnavigation</h2> -<div id="nav1"> -<ul id="main-nav-left"> -<li id="mn-startseite"><a class="first jhover" href="http://www.bahn.de/app_home_pk_de_DEU.shtml" title="Startseite" ><span>Startseite</span></a></li> -<li id="mn-angebotsberatung"> -<a class="jhover" href="http://www.bahn.de/app_angebote_pk_de_DEU.shtml" title="Angebotsberatung" ><span>Angebotsberatung</span></a> -</li> -<li id="mn-fahrplan"> -<a class="jhover active" href="http://www.bahn.de/app_buchen_pk_de_DEU.shtml" title="Fahrplan & Buchung" ><span>Fahrplan & Buchung</span></a> -</li> -<li id="mn-services"> -<a class="jhover" href="http://www.bahn.de/app_services_pk_de_DEU.shtml" title="Services" ><span>Services</span></a> -</li> -<li id="mn-bahncard"> -<a class="jhover" href="http://www.bahn.de/app_bahncard_pk_de_DEU.shtml" title="BahnCard" ><span>BahnCard</span></a> -</li> -<li id="mn-urlaub"> -<a class="jhover" href="http://www.bahn.de/app_urlaub_pk_de_DEU.shtml" title="Urlaub" ><span>Urlaub</span></a> -</li> -</ul> -<form id="login-form" action="#" method="post"> -<ul id="main-nav-right"> -<li id="mn-meinebahn"><a class="first " href="https://fahrkarten.bahn.de/privatkunde/start/start.post?lang=de&country=DEU&scope=meinebahn" title="Meine Bahn"><span>Meine Bahn</span></a></li> -</ul> -</form> -</div> -</div> -<div id="content" class="clearfix"> -<div id="key-visual"> -<div class="bar"></div> -</div> -<div id="hafasContainer"> -<div class="hafasContent sq_results"> -<h1 class="pagetitle">Abfahrt und Ankunft</h1> -<form action="http://reiseauskunft.bahn.de/bin/bhftafel.exe/dn?ld=96248&country=DEU&rt=1&" name="formular" method="post" style="display:inline;" onsubmit="return replaceB();"> -<div id="sqQuery" class="clearfix"> -<div class="leftBlock"> -<fieldset> -<label class="front wrap" for="HFS_input">Bahnhof / Haltestelle</label> -<input type="text" id="rplc0" name="input" value="Essen Hbf" size="40" maxlength="60" /> -<input type="hidden" name="inputRef" value="Essen Hbf#008000098" /> -<script type="text/javascript"> -<!-- -rplcArray = new Array(); -rplcArray[0] = "rplc0"; -new FSuggest({loc:"rplc0", -type:"S", -minChar:4, -requestURL:"http://reiseauskunft.bahn.de/bin/ajax-getstop.exe/dn?REQ0JourneyStopsS0A=1&REQ0JourneyStopsS0G=", -stopDelay:400, -requestType:"js" -}); -// --> -</script> -<br /> -</fieldset> -<fieldset> -<label class="front" for="HFS_selectDate">Datum / Zeit</label> -<input class="emphasized" type="text" name="date" id="date" value="06.07.2011" size="10" maxlength="14" onblur="javascript:this.notify(this);"/> -<span class="jsShowInline" style="position: relative;"> -<img id="calLater" class="calLater" src="/v/820/img/icons_16x8_up.gif" onclick="calman.shiftDate('callink0',1);" width="16" height="8" alt="Einen Tag später" title="Einen Tag später" /> -<img id="calSooner" class="calSooner" src="/v/820/img/icons_16x8_down.gif" onclick="calman.shiftDate('callink0',-1);" width="16" height="8" alt="Einen Tag früher" title="Einen Tag früher" /> -<script type="text/javascript"> -var monthsTexts = new Array("Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"); -var weekdayTexts = new Array("Mo","Di","Mi","Do","Fr","Sa","So"); -var closeText = "Schließen"; -</script> - <a id="callink0" onclick="return calman.toggleDisplay('callink0');" class="calendar"><img src="/v/820/img/kalender_21x16.gif" width="21" height="16" title="Kalender" alt="Kalender" id="calendarlinkicon0"/></a> -<script type="text/javascript"> -calman.config = { -"today" : parseUserDateInput("06.07.11"), -"viewPeriodS" : parseUserDateInput("12.12.10"), -"viewPeriodE" : parseUserDateInput("10.12.11"), -"dataPeriodS" : parseUserDateInput("12.12.10"), -"dataPeriodE" : parseUserDateInput("10.12.11"), -"monthsTexts" : monthsTexts, -"weekdaysTexts" : weekdayTexts, -"closeText" : closeText, -"showShortYear" : true, -"styleClass" : "calendardiv" -} -var calcon_config = { -"formName" : "document.formular", -"fieldName" : "date", -"referenceObject" : "callink0" -} -calman.createCalendar(calcon_config); -</script> -</span> -<input type="text" id="HFS_time" name="time" value="19:19" size="8" maxlength="20" /> -<span id="changeTime" class="nowrap jsShowInline nopadding sqTimeChange" style="position: relative; margin-left: 5px;"> -<img src="/v/820/img/icons_16x8_up.gif" onclick="shiftTime('HFS_time',1);" class="calLater" width="16" height="8" alt="Weiter zur vollen Stunde" title="Weiter zur vollen Stunde" /> -<img src="/v/820/img/icons_16x8_down.gif" onclick="shiftTime('HFS_time',-1);" class="calSooner" width="16" height="8" alt="Zurück zur vollen Stunde" title="Zurück zur vollen Stunde" /> - -</span> -<br /> -<input class="leftMargin radio" type="radio" id="dep" name="boardType" value="dep" checked="checked" /><label for="dep">Abfahrt</label> -<input class="radio" type="radio" id="arr" name="boardType" value="arr" /><label for="arr">Ankunft</label> -<br /> -</fieldset> -</div> -<div class="rightBlock"> -<fieldset> -<label class="front" for="HFS_trainName">Linie / Zugnummer (optional)</label> -<input type="text" id="HFS_trainName" name="REQTrain_name" value="" size="15" maxlength="15" /> -<br /> -</fieldset> -<fieldset> -<input type="hidden" name="advancedProductMode" /> -<label class="front" for="prod_0">Verkehrsmittel</label> -<table class="products"> -<tr class="cb"> -<td> -<input id="prod_0" class="checkbox " type="checkbox" name="GUIREQProduct_0" checked="checked" /> -</td> -<td> -<input id="prod_1" class="checkbox " type="checkbox" name="GUIREQProduct_1" checked="checked" /> -</td> -<td> -<input id="prod_2" class="checkbox " type="checkbox" name="GUIREQProduct_2" checked="checked" /> -</td> -<td> -<input id="prod_3" class="checkbox " type="checkbox" name="GUIREQProduct_3" checked="checked" /> -</td> -<td> -<input id="prod_4" class="checkbox " type="checkbox" name="GUIREQProduct_4" checked="checked" /> -</td> -<td> -<input id="prod_5" class="checkbox " type="checkbox" name="GUIREQProduct_5" /> -</td> -<td> -<input id="prod_6" class="checkbox " type="checkbox" name="GUIREQProduct_6" /> -</td> -<td> -<input id="prod_7" class="checkbox " type="checkbox" name="GUIREQProduct_7" /> -</td> -<td> -<input id="prod_8" class="checkbox " type="checkbox" name="GUIREQProduct_8" /> -</td> -</tr> -<tr class="icons"> -<td><img src="/v/820/img/ice_24x24.gif" alt="ICE-Züge" title="ICE-Züge" width="24" height="24" /></td> -<td><img src="/v/820/img/ec_ic_24x24.gif" alt="Intercity- und Eurocityzüge" title="Intercity- und Eurocityzüge" width="24" height="24" /></td> -<td><img src="/v/820/img/ir_24x24.gif" alt="Interregio- und Schnellzüge" title="Interregio- und Schnellzüge" width="24" height="24" /></td> -<td><img src="/v/820/img/re_24x24.gif" alt="Nahverkehr, sonstige Züge" title="Nahverkehr, sonstige Züge" width="24" height="24" /></td> -<td><img src="/v/820/img/sbahn_24x24.gif" alt="S-Bahn" title="S-Bahn" width="24" height="24" /></td> -<td><img src="/v/820/img/bus_24x24.gif" alt="Busse" title="Busse" width="24" height="24" /></td> -<td><img src="/v/820/img/faehre_24x24.gif" alt="Schiffe" title="Schiffe" width="24" height="24" /></td> -<td><img src="/v/820/img/ubahn_24x24.gif" alt="U-Bahnen" title="U-Bahnen" width="24" height="24" /></td> -<td><img src="/v/820/img/tram_24x24.gif" alt="Straßenbahnen" title="Straßenbahnen" width="24" height="24" /></td> -</tr> -</td> -</table> -</fieldset> -</div> -</div> -<p class="floatRight button-inside querybutton"> -<span class="button-border"> -<button type="submit" class="highlight" name="start" value="Suchen" title="" /> -<span>Suchen</span> -</button> -</span> -</p> -<p class="button-inside clearfix querybutton"> -<span class="button-border button-normal"> -<a class="highlight" href="http://reiseauskunft.bahn.de/bin/bhftafel.exe/dn?ld=96248&country=DEU&rt=1&" title="Alle Eingaben löschen">Eingaben löschen</a> -</span> -</p> -</form> -</div> -<div class="shadowbottom"> </div> -<div class="shadowtop"> </div> -<div id="sqResult" class="hafasContent"> -<h2> -<a class="arrowlink floatRight fontNormal" href="http://reiseauskunft.bahn.de/bin/bhftafel.exe/dn?ld=96248&country=DEU&rt=1&input=Essen Hbf%238000098&boardType=dep&time=actual&productsFilter=11111&start=yes">Aktualisieren</a> -<strong>Aktueller Abfahrtsplan von Essen Hbf um 19:19 Uhr</strong> -</h2> -<p> -</p> -<table class="result stboard dep"> -<tr> -<th class="time">Zeit</th> -<th class="icon"> </th> -<th class="train">Zug</th> -<th class="route">Richtung / Unterwegshaltestellen</th> -<th class="platform">Gleis</th> -<th class="ris">Aktuelles</th> -</tr> -<tr class="browse"> -<td class="time"> -<a href="http://reiseauskunft.bahn.de/bin/bhftafel.exe/dn?ld=96248&country=DEU&rt=1&input=Essen Hbf%238000098&boardType=dep&time=19:19%2D60&productsFilter=11111&&&date=06.07.11&selectDate=&maxJourneys=&start=yes" class="arrowlink arrowlinktop">früher</a> -</td> -<td colspan="2" class="train"> </td> -<td class="route"> -</td> -<td class="platform"> </td> -<td class="ris"> </td> -</tr> -<tr class="current"> -<td class="time">19:19</td> -<td class="train" colspan="2">aktuelle Uhrzeit</td> -<td class="route"> </td> -<td class="track"> </td> -<td class="ris"> </td> -</tr> -<tr> -<td class="time">19:21</td> -<td class="train"><a href="http://reiseauskunft.bahn.de/bin/traininfo.exe/dn/829575/383245/970550/208750/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:21&station_evaId=8000098&station_type=dep&"><img src="/v/820/img/re_24x24.gif" class="middle" alt="" /></a></td><td class="train"> -<a href="/bin/traininfo.exe/dn/829575/383245/970550/208750/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:21&station_evaId=8000098&station_type=dep&"> -RE 10228 -</a> -</td> -<td class="route"> -<span class="bold"> -<a onclick="sHC(this, '', '8000086','19:33'); return false;" href="/bin/bhftafel.exe/dn?input=Duisburg Hbf%238000086&boardType=dep&time=19:33&productsFilter=11111&start=yes"> -Duisburg Hbf -</a> -</span> -<br /> -Essen Hbf -19:21 -- -Mülheim(Ruhr)Hbf -19:26 -- -Duisburg Hbf -19:33 -</td> -<td class="platform"> -<strong>2</strong><br /> -</td> -<td class="ris"> -<span><span style="color:#50aa50;">pünktlich</span></span></td> -</tr> -<tr> -<td class="time">19:21</td> -<td class="train"><a href="http://reiseauskunft.bahn.de/bin/traininfo.exe/dn/950673/427599/812348/89295/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:21&station_evaId=8000098&station_type=dep&"><img src="/v/820/img/sbahn_24x24.gif" class="middle" alt="" /></a></td><td class="train"> -<a href="/bin/traininfo.exe/dn/950673/427599/812348/89295/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:21&station_evaId=8000098&station_type=dep&"> -S 9 -</a> -</td> -<td class="route"> -<span class="bold"> -<a onclick="sHC(this, '', '8000047','19:37'); return false;" href="/bin/bhftafel.exe/dn?input=Bottrop Hbf%238000047&boardType=dep&time=19:37&productsFilter=11111&start=yes"> -Bottrop Hbf -</a> -</span> -<br /> -Essen Hbf -19:21 -- -Essen West -19:23 -- -Essen-Borbeck Süd -19:26 -- -Essen-Borbeck -19:28 -- -Essen-Gerschede -19:30 -- -Essen-Dellwig Ost -19:33 -- -Bottrop Hbf -19:37 -</td> -<td class="platform"> -<strong>7</strong><br /> -</td> -<td class="ris"> -<span><span style="color:#50aa50;">pünktlich</span></span></td> -</tr> -<tr> -<td class="time">19:21</td> -<td class="train"><a href="http://reiseauskunft.bahn.de/bin/traininfo.exe/dn/111342/147883/664506/295140/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:21&station_evaId=8000098&station_type=dep&"><img src="/v/820/img/sbahn_24x24.gif" class="middle" alt="" /></a></td><td class="train"> -<a href="/bin/traininfo.exe/dn/111342/147883/664506/295140/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:21&station_evaId=8000098&station_type=dep&"> -S 9 -</a> -</td> -<td class="route"> -<span class="bold"> -<a onclick="sHC(this, '', '8000266','20:07'); return false;" href="/bin/bhftafel.exe/dn?input=Wuppertal Hbf%238000266&boardType=dep&time=20:07&productsFilter=11111&start=yes"> -Wuppertal Hbf -</a> -</span> -<br /> -Essen Hbf -19:21 -- -Essen-Steele -19:25 -- -Essen-Überruhr -19:28 -- -Essen-Holthausen -19:30 -- -Essen-Kupferdreh -19:33 -- -Velbert-Nierenhof -19:38 -- -Velbert-Langenberg -19:42 -- -Velbert-Neviges -19:46 -- -Velbert Rosenhügel -19:50 -- -Wülfrath-Aprath -19:53 -- -Wuppertal-Vohwinkel -19:58 -- -Wuppertal-Sonnborn -20:01 -- -Wuppertal-Zoologischer Garten -20:02 -- -Wuppertal-Steinbeck -20:05 -- -Wuppertal Hbf -20:07 -</td> -<td class="platform"> -<strong>11</strong><br /> -</td> -<td class="ris"> -<span><span style="color:#50aa50;">pünktlich</span></span></td> -</tr> -<tr> -<td class="time">19:21</td> -<td class="train"><a href="http://reiseauskunft.bahn.de/bin/traininfo.exe/dn/234612/849968/953510/398551/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:21&station_evaId=8000098&station_type=dep&"><img src="/v/820/img/re_24x24.gif" class="middle" alt="" /></a></td><td class="train"> -<a href="/bin/traininfo.exe/dn/234612/849968/953510/398551/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:21&station_evaId=8000098&station_type=dep&"> -RE 10228 -</a> -</td> -<td class="route"> -<span class="bold"> -<a onclick="sHC(this, '', '8000085','19:53'); return false;" href="/bin/bhftafel.exe/dn?input=Düsseldorf Hbf%238000085&boardType=dep&time=19:53&productsFilter=11111&start=yes"> -Düsseldorf Hbf -</a> -</span> -<br /> -Essen Hbf -19:21 -- -Mülheim(Ruhr)Hbf -19:26 -- -Duisburg Hbf -19:33 -- -Düsseldorf Flughafen -19:45 -- -Düsseldorf Hbf -19:53 -</td> -<td class="platform"> -<strong>2</strong><br /> -</td> -<td class="ris"> -<span><span style="color:#50aa50;">pünktlich</span></span></td> -</tr> -<tr> -<td class="time">19:26</td> -<td class="train"><a href="http://reiseauskunft.bahn.de/bin/traininfo.exe/dn/432654/251439/745638/228601/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:26&station_evaId=8000098&station_type=dep&"><img src="/v/820/img/sbahn_24x24.gif" class="middle" alt="" /></a></td><td class="train"> -<a href="/bin/traininfo.exe/dn/432654/251439/745638/228601/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:26&station_evaId=8000098&station_type=dep&"> -S 3 -</a> -</td> -<td class="route"> -<span class="bold"> -<a onclick="sHC(this, '', '8000286','19:43'); return false;" href="/bin/bhftafel.exe/dn?input=Oberhausen Hbf%238000286&boardType=dep&time=19:43&productsFilter=11111&start=yes"> -Oberhausen Hbf -</a> -</span> -<br /> -Essen Hbf -19:26 -- -Essen West -19:28 -- -Essen-Frohnhausen -19:30 -- -Mülheim(Ruhr)Hbf -19:34 -- -Mülheim(Ruhr)West -19:37 -- -Mülheim(Ruhr)Styrum -19:39 -- -Oberhausen Hbf -19:43 -</td> -<td class="platform"> -<strong>7</strong><br /> -</td> -<td class="ris"> -<span><span style="color:#50aa50;">pünktlich</span></span></td> -</tr> -<tr> -<td class="time">19:26</td> -<td class="train"><a href="http://reiseauskunft.bahn.de/bin/traininfo.exe/dn/62940/131335/800496/379269/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:26&station_evaId=8000098&station_type=dep&"><img src="/v/820/img/sbahn_24x24.gif" class="middle" alt="" /></a></td><td class="train"> -<a href="/bin/traininfo.exe/dn/62940/131335/800496/379269/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:26&station_evaId=8000098&station_type=dep&"> -S 1 -</a> -</td> -<td class="route"> -<span class="bold"> -<a onclick="sHC(this, '', '8000080','20:06'); return false;" href="/bin/bhftafel.exe/dn?input=Dortmund Hbf%238000080&boardType=dep&time=20:06&productsFilter=11111&start=yes"> -Dortmund Hbf -</a> -</span> -<br /> -Essen Hbf -19:26 -- -Essen-Steele -19:29 -- -Essen-Steele Ost -19:31 -- -Essen-Eiberg -19:34 -- -Wattenscheid-Höntrop -19:37 -- -Bochum-Ehrenfeld -19:41 -- -Bochum Hbf -19:43 -- -Bochum-Langendreer West -19:48 -- -Bochum-Langendreer -19:50 -- -Dortmund-Kley -19:53 -- -Dortmund-Oespel -19:55 -- -Dortmund Universität -19:58 -- -Dortmund-Dorstfeld Süd -20:00 -- -Dortmund-Dorstfeld -20:02 -- -Dortmund Hbf -20:06 -</td> -<td class="platform"> -<strong>11</strong><br /> -</td> -<td class="ris"> -<span><span style="color:#50aa50;">pünktlich</span></span></td> -</tr> -<tr> -<td class="time">19:28</td> -<td class="train"><a href="http://reiseauskunft.bahn.de/bin/traininfo.exe/dn/652038/324435/744806/155070/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:28&station_evaId=8000098&station_type=dep&"><img src="/v/820/img/sbahn_24x24.gif" class="middle" alt="" /></a></td><td class="train"> -<a href="/bin/traininfo.exe/dn/652038/324435/744806/155070/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:28&station_evaId=8000098&station_type=dep&"> -S 6 -</a> -</td> -<td class="route"> -<span class="bold"> -<a onclick="sHC(this, '', '8003372','21:08'); return false;" href="/bin/bhftafel.exe/dn?input=Köln-Nippes%238003372&boardType=dep&time=21:08&productsFilter=11111&start=yes"> -Köln-Nippes -</a> -</span> -<br /> -Essen Hbf -19:28 -- -Essen Süd -19:30 -- -Essen Stadtwald -19:33 -- -Essen-Hügel -19:36 -- -Essen-Werden -19:39 -- -Kettwig -19:43 -- -Kettwig Stausee -19:45 -- -Hösel -19:49 -- -Ratingen Ost -19:54 -- -Düsseldorf-Rath -19:58 -- -Düsseldorf-Rath Mitte -20:01 -- -Düsseldorf-Derendorf -20:04 -- -Düsseldorf-Zoo -20:06 -- -Düsseldorf Wehrhahn -20:08 -- -Düsseldorf Hbf -20:10 -- -Düsseldorf Volksgarten -20:14 -- -Düsseldorf-Oberbilk -20:16 -- -Düsseldorf-Eller Süd -20:19 -- -Düsseldorf-Reisholz -20:21 -- -Düsseldorf-Benrath -20:24 -- -Düsseldorf-Garath -20:27 -- -Düsseldorf-Hellerhof -20:29 -- -Langenfeld(Rhld)-Berghausen -20:32 -- -Langenfeld(Rhld) -20:34 -- -Leverkusen-Rheindorf -20:38 -- -Leverkusen-Küppersteg -20:41 -- -Leverkusen Mitte -20:43 -- -Bayerwerk -20:46 -- -Köln-Stammheim -20:49 -- -Köln-Mülheim -20:53 -- -Köln-Buchforst -20:56 -- -Köln Messe/Deutz Gl. 9-10 -21:00 -- -Köln Hbf -21:03 -- -Köln Hansaring -21:05 -- -Köln-Nippes -21:08 -</td> -<td class="platform"> -<strong>12</strong><br /> -</td> -<td class="ris"> -<span><span style="color:#50aa50;">pünktlich</span></span></td> -</tr> -<tr> -<td class="time">19:29</td> -<td class="train"><a href="http://reiseauskunft.bahn.de/bin/traininfo.exe/dn/847062/392953/328812/117958/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:29&station_evaId=8000098&station_type=dep&"><img src="/v/820/img/re_24x24.gif" class="middle" alt="" /></a></td><td class="train"> -<a href="/bin/traininfo.exe/dn/847062/392953/328812/117958/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:29&station_evaId=8000098&station_type=dep&"> -RE 10631 -</a> -</td> -<td class="route"> -<span class="bold"> -<a onclick="sHC(this, '', '8000252','21:30'); return false;" href="/bin/bhftafel.exe/dn?input=Minden(Westf)%238000252&boardType=dep&time=21:30&productsFilter=11111&start=yes"> -Minden(Westf) -</a> -</span> -<br /> -Essen Hbf -19:29 -- -Wattenscheid -19:34 -- -Bochum Hbf -19:39 -- -Dortmund Hbf -19:52 -- -Kamen -20:03 -- -Hamm(Westf) -20:13 -- -Heessen -20:18 -- -Ahlen(Westf) -20:23 -- -Neubeckum -20:30 -- -Oelde -20:36 -- -Rheda-Wiedenbrück -20:42 -- -Gütersloh Hbf -20:48 -- -Bielefeld Hbf -20:58 -- -Herford -21:07 -- -Löhne(Westf) -21:13 -- -Bad Oeynhausen -21:18 -- -Porta Westfalica -21:24 -- -Minden(Westf) -21:30 -</td> -<td class="platform"> -<strong>4</strong><br /> -</td> -<td class="ris"> -<span><span style="color:#50aa50;">pünktlich</span></span></td> -</tr> -<tr> -<td class="time">19:31</td> -<td class="train"><a href="http://reiseauskunft.bahn.de/bin/traininfo.exe/dn/735006/382159/528888/19442/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:31&station_evaId=8000098&station_type=dep&"><img src="/v/820/img/re_24x24.gif" class="middle" alt="" /></a></td><td class="train"> -<a href="/bin/traininfo.exe/dn/735006/382159/528888/19442/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:31&station_evaId=8000098&station_type=dep&"> -NWB75366 -</a> -</td> -<td class="route"> -<span class="bold"> -<a onclick="sHC(this, '', '8000346','20:27'); return false;" href="/bin/bhftafel.exe/dn?input=Borken(Westf)%238000346&boardType=dep&time=20:27&productsFilter=11111&start=yes"> -Borken(Westf) -</a> -</span> -<br /> -Essen Hbf -19:31 -- -Essen-Borbeck -19:36 -- -Bottrop Hbf -19:43 -- -Gladbeck West -19:50 -- -Gladbeck-Zweckel -19:53 -- -Feldhausen -19:56 -- -Dorsten -20:01 -- -Hervest-Dorsten -20:05 -- -Deuten -20:10 -- -Rhade -20:15 -- -Marbeck-Heiden -20:21 -- -Borken(Westf) -20:27 -</td> -<td class="platform"> -<strong>8</strong><br /> -</td> -<td class="ris"> -<span><span title="Es liegen keine aktuellen Informationen vor.">k.A.</span></span></td> -</tr> -<tr> -<td class="time">19:32</td> -<td class="train"><a href="http://reiseauskunft.bahn.de/bin/traininfo.exe/dn/934872/422339/473892/74683/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:32&station_evaId=8000098&station_type=dep&"><img src="/v/820/img/re_24x24.gif" class="middle" alt="" /></a></td><td class="train"> -<a href="/bin/traininfo.exe/dn/934872/422339/473892/74683/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:32&station_evaId=8000098&station_type=dep&"> -RE 10630 -</a> -</td> -<td class="route"> -<span class="bold"> -<a onclick="sHC(this, '', '8000085','20:05'); return false;" href="/bin/bhftafel.exe/dn?input=Düsseldorf Hbf%238000085&boardType=dep&time=20:05&productsFilter=11111&start=yes"> -Düsseldorf Hbf -</a> -</span> -<br /> -Essen Hbf -19:32 -- -Mülheim(Ruhr)Hbf -19:37 -- -Duisburg Hbf -19:44 -- -Düsseldorf Flughafen -19:56 -- -Düsseldorf Hbf -20:05 -</td> -<td class="platform"> -<strong>2</strong><br /> -</td> -<td class="ris"> -<span><span style="color:#50aa50;">pünktlich</span></span></td> -</tr> -<tr> -<td class="time">19:34</td> -<td class="train"><a href="http://reiseauskunft.bahn.de/bin/traininfo.exe/dn/287067/235284/57178/67100/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:34&station_evaId=8000098&station_type=dep&"><img src="/v/820/img/re_24x24.gif" class="middle" alt="" /></a></td><td class="train"> -<a href="/bin/traininfo.exe/dn/287067/235284/57178/67100/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:34&station_evaId=8000098&station_type=dep&"> -ABR89480 -</a> -</td> -<td class="route"> -<span class="bold"> -<a onclick="sHC(this, '', '8000046','21:54'); return false;" href="/bin/bhftafel.exe/dn?input=Siegen%238000046&boardType=dep&time=21:54&productsFilter=11111&start=yes"> -Siegen -</a> -</span> -<br /> -Essen Hbf -19:34 -- -Wattenscheid -19:40 -- -Bochum Hbf -19:46 -- -Witten Hbf -19:56 -- -Wetter(Ruhr) -20:01 -- -Hagen Hbf -20:09 -- -Hohenlimburg -20:25 -- -Letmathe -20:30 -- -Altena(Westf) -20:40 -- -Werdohl -20:48 -- -Plettenberg -20:55 -- -Finnentrop -21:07 -- -Lennestadt-Grevenbrück -21:11 -- -Lennestadt-Meggen -21:15 -- -Lennestadt-Altenhundem -21:19 -- -Kirchhundem -21:22 -- -Welschen Ennest -21:30 -- -Kreuztal-Littfeld -21:34 -- -Eichen(Kr Siegen) -21:38 -- -Kreuztal -21:41 -- -Siegen-Geisweid -21:46 -- -Siegen-Weidenau -21:49 -- -Siegen -21:54 -</td> -<td class="platform"> -<strong>9</strong><br /> -</td> -<td class="ris"> -<span><span title="Es liegen keine aktuellen Informationen vor.">k.A.</span></span></td> -</tr> -<tr> -<td class="time">19:34</td> -<td class="train"><a href="http://reiseauskunft.bahn.de/bin/traininfo.exe/dn/980208/487956/578808/37332/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:34&station_evaId=8000098&station_type=dep&"><img src="/v/820/img/re_24x24.gif" class="middle" alt="" /></a></td><td class="train"> -<a href="/bin/traininfo.exe/dn/980208/487956/578808/37332/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:34&station_evaId=8000098&station_type=dep&"> -ABR89540 -</a> -</td> -<td class="route"> -<span class="bold"> -<a onclick="sHC(this, '', '8000186','20:42'); return false;" href="/bin/bhftafel.exe/dn?input=Iserlohn%238000186&boardType=dep&time=20:42&productsFilter=11111&start=yes"> -Iserlohn -</a> -</span> -<br /> -Essen Hbf -19:34 -- -Wattenscheid -19:40 -- -Bochum Hbf -19:46 -- -Witten Hbf -19:56 -- -Wetter(Ruhr) -20:01 -- -Hagen Hbf -20:09 -- -Hohenlimburg -20:25 -- -Letmathe -20:30 -- -Letmathe Dechenhöhle -20:38 -- -Iserlohn -20:42 -</td> -<td class="platform"> -<strong>9</strong><br /> -</td> -<td class="ris"> -<span><span title="Es liegen keine aktuellen Informationen vor.">k.A.</span></span></td> -</tr> -<tr> -<td class="time">19:35</td> -<td class="train"><a href="http://reiseauskunft.bahn.de/bin/traininfo.exe/dn/103056/142750/494120/212715/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:35&station_evaId=8000098&station_type=dep&"><img src="/v/820/img/sbahn_24x24.gif" class="middle" alt="" /></a></td><td class="train"> -<a href="/bin/traininfo.exe/dn/103056/142750/494120/212715/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:35&station_evaId=8000098&station_type=dep&"> -S 1 -</a> -</td> -<td class="route"> -<span class="bold"> -<a onclick="sHC(this, '', '8000087','20:47'); return false;" href="/bin/bhftafel.exe/dn?input=Solingen Hbf%238000087&boardType=dep&time=20:47&productsFilter=11111&start=yes"> -Solingen Hbf -</a> -</span> -<br /> -Essen Hbf -19:35 -- -Essen West -19:37 -- -Essen-Frohnhausen -19:40 -- -Mülheim(Ruhr)Hbf -19:45 -- -Mülheim(Ruhr)Styrum -19:48 -- -Duisburg Hbf -19:53 -- -Duisburg-Schlenk -19:57 -- -Duisburg-Buchholz -20:00 -- -Duisburg-Großenbaum -20:02 -- -Duisburg-Rahm -20:05 -- -Angermund -20:07 -- -Düsseldorf Flughafen -20:11 -- -Düsseldorf-Unterrath -20:14 -- -Düsseldorf-Derendorf -20:17 -- -Düsseldorf-Zoo -20:19 -- -Düsseldorf Wehrhahn -20:21 -- -Düsseldorf Hbf -20:23 -- -Düsseldorf Volksgarten -20:26 -- -Düsseldorf-Oberbilk -20:28 -- -Düsseldorf-Eller Mitte -20:31 -- -Düsseldorf-Eller -20:33 -- -Hilden -20:38 -- -Hilden Süd -20:40 -- -Solingen Vogelpark -20:44 -- -Solingen Hbf -20:47 -</td> -<td class="platform"> -<strong>7</strong><br /> -</td> -<td class="ris"> -<span><span style="color:#50aa50;">pünktlich</span></span></td> -</tr> -<tr> -<td class="time">19:36</td> -<td class="train"><a href="http://reiseauskunft.bahn.de/bin/traininfo.exe/dn/632781/319361/284026/68928/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:36&station_evaId=8000098&station_type=dep&"><img src="/v/820/img/sbahn_24x24.gif" class="middle" alt="" /></a></td><td class="train"> -<a href="/bin/traininfo.exe/dn/632781/319361/284026/68928/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:36&station_evaId=8000098&station_type=dep&"> -S 3 -</a> -</td> -<td class="route"> -<span class="bold"> -<a onclick="sHC(this, '', '8002640','19:55'); return false;" href="/bin/bhftafel.exe/dn?input=Hattingen(R) Mitte%238002640&boardType=dep&time=19:55&productsFilter=11111&start=yes"> -Hattingen(R) Mitte -</a> -</span> -<br /> -Essen Hbf -19:36 -- -Essen-Steele -19:39 -- -Essen-Steele Ost -19:42 -- -Essen-Horst -19:44 -- -Bochum-Dahlhausen -19:47 -- -Hattingen(Ruhr) -19:52 -- -Hattingen(R) Mitte -19:55 -</td> -<td class="platform"> -<strong>11</strong><br /> -</td> -<td class="ris"> -<span><span style="color:#50aa50;">pünktlich</span></span></td> -</tr> -<tr> -<td class="time">19:36</td> -<td class="train"><a href="http://reiseauskunft.bahn.de/bin/traininfo.exe/dn/109038/179904/414878/171093/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:36&station_evaId=8000098&station_type=dep&"><img src="/v/820/img/ice_24x24.gif" class="middle" alt="" /></a></td><td class="train"> -<a href="/bin/traininfo.exe/dn/109038/179904/414878/171093/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:36&station_evaId=8000098&station_type=dep&"> -ICE 605 -</a> -</td> -<td class="route"> -<span class="bold"> -<a onclick="sHC(this, '', '8000026','00:58'); return false;" href="/bin/bhftafel.exe/dn?input=Basel Bad Bf%238000026&boardType=dep&time=00:58&productsFilter=11111&start=yes"> -Basel Bad Bf -</a> -</span> -<br /> -Essen Hbf -19:36 -- -Duisburg Hbf -19:47 -- -Düsseldorf Flughafen -19:57 -- -Düsseldorf Hbf -20:12 -- -Köln Messe/Deutz Gl.11-12 -20:36 -- -Siegburg/Bonn -20:58 -- -Montabaur -21:19 -- -Limburg Süd -21:29 -- -Frankfurt(M) Flughafen Fernbf -21:51 -- -Mannheim Hbf -22:24 -- -Karlsruhe Hbf -23:00 -- -Baden-Baden -23:28 -- -Offenburg -23:48 -- -Freiburg(Breisgau) Hbf -00:20 -- -Basel Bad Bf -00:58 -</td> -<td class="platform"> -<strong>1</strong><br /> -</td> -<td class="ris"> -<span><span style="color:#50aa50;">pünktlich</span></span></td> -</tr> -<tr> -<td class="time">19:36</td> -<td class="train"><a href="http://reiseauskunft.bahn.de/bin/traininfo.exe/dn/453681/308651/321274/9410/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:36&station_evaId=8000098&station_type=dep&"><img src="/v/820/img/ec_ic_24x24.gif" class="middle" alt="" /></a></td><td class="train"> -<a href="/bin/traininfo.exe/dn/453681/308651/321274/9410/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:36&station_evaId=8000098&station_type=dep&"> -IC 118 -</a> -</td> -<td class="route"> -<span class="bold"> -<a onclick="sHC(this, '', '8000263','20:29'); return false;" href="/bin/bhftafel.exe/dn?input=Münster(Westf)Hbf%238000263&boardType=dep&time=20:29&productsFilter=11111&start=yes"> -Münster(Westf)Hbf -</a> -</span> -<br /> -Essen Hbf -19:36 -- -Gelsenkirchen Hbf -19:44 -- -Wanne-Eickel Hbf -19:50 -- -Recklinghausen Hbf -19:58 -- -Münster(Westf)Hbf -20:29 -</td> -<td class="platform"> -<strong>6</strong><br /> -</td> -<td class="ris"> -<span><span style="color:#f00;">ca. +15</span></span>,<br/><span class="red">Grund: Stellwerksstörung /-ausfall</span></td> -</tr> -<tr> -<td class="time">19:41</td> -<td class="train"><a href="http://reiseauskunft.bahn.de/bin/traininfo.exe/dn/612687/314938/939896/265731/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:41&station_evaId=8000098&station_type=dep&"><img src="/v/820/img/sbahn_24x24.gif" class="middle" alt="" /></a></td><td class="train"> -<a href="/bin/traininfo.exe/dn/612687/314938/939896/265731/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:41&station_evaId=8000098&station_type=dep&"> -S 9 -</a> -</td> -<td class="route"> -<span class="bold"> -<a onclick="sHC(this, '', '8000145','20:27'); return false;" href="/bin/bhftafel.exe/dn?input=Haltern am See%238000145&boardType=dep&time=20:27&productsFilter=11111&start=yes"> -Haltern am See -</a> -</span> -<br /> -Essen Hbf -19:41 -- -Essen West -19:43 -- -Essen-Borbeck Süd -19:46 -- -Essen-Borbeck -19:48 -- -Essen-Gerschede -19:50 -- -Essen-Dellwig Ost -19:53 -- -Bottrop Hbf -19:57 -- -Bottrop-Boy -20:01 -- -Gladbeck West -20:05 -- -Gelsenkirchen-Buer Nord -20:10 -- -Gelsenkirchen-Hassel -20:13 -- -Marl Mitte -20:17 -- -Marl-Hamm -20:20 -- -Haltern am See -20:27 -</td> -<td class="platform"> -<strong>7</strong><br /> -</td> -<td class="ris"> -<span><span style="color:#50aa50;">pünktlich</span></span></td> -</tr> -<tr> -<td class="time">19:41</td> -<td class="train"><a href="http://reiseauskunft.bahn.de/bin/traininfo.exe/dn/194409/207931/152134/11264/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:41&station_evaId=8000098&station_type=dep&"><img src="/v/820/img/ice_24x24.gif" class="middle" alt="" /></a></td><td class="train"> -<a href="/bin/traininfo.exe/dn/194409/207931/152134/11264/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:41&station_evaId=8000098&station_type=dep&"> -ICE 846 -</a> -</td> -<td class="route"> -<span class="bold"> -<a onclick="sHC(this, '', '8000207','20:33'); return false;" href="/bin/bhftafel.exe/dn?input=Köln Hbf%238000207&boardType=dep&time=20:33&productsFilter=11111&start=yes"> -Köln Hbf -</a> -</span> -<br /> -Essen Hbf -19:41 -- -Duisburg Hbf -19:52 -- -Düsseldorf Hbf -20:06 -- -Köln Hbf -20:33 -</td> -<td class="platform"> -<strong>2</strong><br /> -</td> -<td class="ris"> -<span><span style="color:#50aa50;">pünktlich</span></span></td> -</tr> -<tr> -<td class="time">19:44</td> -<td class="train"><a href="http://reiseauskunft.bahn.de/bin/traininfo.exe/dn/441111/253759/648808/177367/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:44&station_evaId=8000098&station_type=dep&"><img src="/v/820/img/re_24x24.gif" class="middle" alt="" /></a></td><td class="train"> -<a href="/bin/traininfo.exe/dn/441111/253759/648808/177367/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:44&station_evaId=8000098&station_type=dep&"> -RE 10231 -</a> -</td> -<td class="route"> -<span class="bold"> -<a onclick="sHC(this, '', '8000263','20:50'); return false;" href="/bin/bhftafel.exe/dn?input=Münster(Westf)Hbf%238000263&boardType=dep&time=20:50&productsFilter=11111&start=yes"> -Münster(Westf)Hbf -</a> -</span> -<br /> -Essen Hbf -19:44 -- -Gelsenkirchen Hbf -19:52 -- -Wanne-Eickel Hbf -19:57 -- -Recklinghausen Hbf -20:03 -- -Marl-Sinsen -20:09 -- -Haltern am See -20:15 -- -Sythen -20:19 -- -Dülmen -20:24 -- -Buldern -20:29 -- -Nottuln-Appelhülsen -20:33 -- -Bösensell -20:37 -- -Münster-Albachten -20:41 -- -Münster(Westf)Hbf -20:50 -</td> -<td class="platform"> -<strong>4</strong><br /> -</td> -<td class="ris"> -<span><span style="color:#50aa50;">pünktlich</span></span></td> -</tr> -<tr> -<td class="time">19:46</td> -<td class="train"><a href="http://reiseauskunft.bahn.de/bin/traininfo.exe/dn/692907/1002715/585568/61815/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:46&station_evaId=8000098&station_type=dep&"><img src="/v/820/img/re_24x24.gif" class="middle" alt="" /></a></td><td class="train"> -<a href="/bin/traininfo.exe/dn/692907/1002715/585568/61815/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:46&station_evaId=8000098&station_type=dep&"> -RE 10028 -</a> -</td> -<td class="route"> -<span class="bold"> -<a onclick="sHC(this, '', '8000253','20:41'); return false;" href="/bin/bhftafel.exe/dn?input=Mönchengladbach Hbf%238000253&boardType=dep&time=20:41&productsFilter=11111&start=yes"> -Mönchengladbach Hbf -</a> -</span> -<br /> -Essen Hbf -19:46 -- -Mülheim(Ruhr)Hbf -19:51 -- -Duisburg Hbf -19:58 -- -Rheinhausen -20:05 -- -Krefeld-Uerdingen -20:10 -- -Krefeld Hbf -20:16 -- -Viersen -20:27 -- -Mönchengladbach Hbf -20:41 -</td> -<td class="platform"> -<strong>1</strong><br /> -</td> -<td class="ris"> -<span><span style="color:#50aa50;">pünktlich</span></span></td> -</tr> -<tr> -<td class="time">19:48</td> -<td class="train"><a href="http://reiseauskunft.bahn.de/bin/traininfo.exe/dn/88806/137766/507708/224254/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:48&station_evaId=8000098&station_type=dep&"><img src="/v/820/img/sbahn_24x24.gif" class="middle" alt="" /></a></td><td class="train"> -<a href="/bin/traininfo.exe/dn/88806/137766/507708/224254/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:48&station_evaId=8000098&station_type=dep&"> -S 6 -</a> -</td> -<td class="route"> -<span class="bold"> -<a onclick="sHC(this, '', '8003372','21:28'); return false;" href="/bin/bhftafel.exe/dn?input=Köln-Nippes%238003372&boardType=dep&time=21:28&productsFilter=11111&start=yes"> -Köln-Nippes -</a> -</span> -<br /> -Essen Hbf -19:48 -- -Essen Süd -19:50 -- -Essen Stadtwald -19:53 -- -Essen-Hügel -19:56 -- -Essen-Werden -19:59 -- -Kettwig -20:03 -- -Kettwig Stausee -20:05 -- -Hösel -20:09 -- -Ratingen Ost -20:14 -- -Düsseldorf-Rath -20:18 -- -Düsseldorf-Rath Mitte -20:21 -- -Düsseldorf-Derendorf -20:24 -- -Düsseldorf-Zoo -20:26 -- -Düsseldorf Wehrhahn -20:28 -- -Düsseldorf Hbf -20:30 -- -Düsseldorf Volksgarten -20:34 -- -Düsseldorf-Oberbilk -20:36 -- -Düsseldorf-Eller Süd -20:39 -- -Düsseldorf-Reisholz -20:41 -- -Düsseldorf-Benrath -20:44 -- -Düsseldorf-Garath -20:47 -- -Düsseldorf-Hellerhof -20:49 -- -Langenfeld(Rhld)-Berghausen -20:52 -- -Langenfeld(Rhld) -20:54 -- -Leverkusen-Rheindorf -20:58 -- -Leverkusen-Küppersteg -21:01 -- -Leverkusen Mitte -21:03 -- -Bayerwerk -21:06 -- -Köln-Stammheim -21:09 -- -Köln-Mülheim -21:13 -- -Köln-Buchforst -21:16 -- -Köln Messe/Deutz Gl. 9-10 -21:20 -- -Köln Hbf -21:23 -- -Köln Hansaring -21:25 -- -Köln-Nippes -21:28 -</td> -<td class="platform"> -<strong>12</strong><br /> -</td> -<td class="ris"> -<span><span style="color:#50aa50;">pünktlich</span></span></td> -</tr> -<tr> -<td class="time">19:50</td> -<td class="train"><a href="http://reiseauskunft.bahn.de/bin/traininfo.exe/dn/111363/180613/497286/211522/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:50&station_evaId=8000098&station_type=dep&"><img src="/v/820/img/ice_24x24.gif" class="middle" alt="" /></a></td><td class="train"> -<a href="/bin/traininfo.exe/dn/111363/180613/497286/211522/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:50&station_evaId=8000098&station_type=dep&"> -ICE 1746 -</a> -</td> -<td class="route"> -<span class="bold"> -<a onclick="sHC(this, '', '8000085','20:16'); return false;" href="/bin/bhftafel.exe/dn?input=Düsseldorf Hbf%238000085&boardType=dep&time=20:16&productsFilter=11111&start=yes"> -Düsseldorf Hbf -</a> -</span> -<br /> -Essen Hbf -19:50 -- -Duisburg Hbf -20:02 -- -Düsseldorf Hbf -20:16 -</td> -<td class="platform"> -<strong>2</strong><br /> -</td> -<td class="ris"> -<span><span style="color:#50aa50;">pünktlich</span></span></td> -</tr> -<tr> -<td class="time">19:51</td> -<td class="train"><a href="http://reiseauskunft.bahn.de/bin/traininfo.exe/dn/910140/414152/334288/136236/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:51&station_evaId=8000098&station_type=dep&"><img src="/v/820/img/sbahn_24x24.gif" class="middle" alt="" /></a></td><td class="train"> -<a href="/bin/traininfo.exe/dn/910140/414152/334288/136236/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:51&station_evaId=8000098&station_type=dep&"> -S 9 -</a> -</td> -<td class="route"> -<span class="bold"> -<a onclick="sHC(this, '', '8000266','20:37'); return false;" href="/bin/bhftafel.exe/dn?input=Wuppertal Hbf%238000266&boardType=dep&time=20:37&productsFilter=11111&start=yes"> -Wuppertal Hbf -</a> -</span> -<br /> -Essen Hbf -19:51 -- -Essen-Steele -19:55 -- -Essen-Überruhr -19:58 -- -Essen-Holthausen -20:00 -- -Essen-Kupferdreh -20:03 -- -Velbert-Nierenhof -20:08 -- -Velbert-Langenberg -20:12 -- -Velbert-Neviges -20:16 -- -Velbert Rosenhügel -20:20 -- -Wülfrath-Aprath -20:23 -- -Wuppertal-Vohwinkel -20:28 -- -Wuppertal-Sonnborn -20:31 -- -Wuppertal-Zoologischer Garten -20:32 -- -Wuppertal-Steinbeck -20:35 -- -Wuppertal Hbf -20:37 -</td> -<td class="platform"> -<strong>11</strong><br /> -</td> -<td class="ris"> -<span><span style="color:#50aa50;">pünktlich</span></span></td> -</tr> -<tr> -<td class="time">19:53</td> -<td class="train"><a href="http://reiseauskunft.bahn.de/bin/traininfo.exe/dn/270825/199240/792524/305987/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:53&station_evaId=8000098&station_type=dep&"><img src="/v/820/img/re_24x24.gif" class="middle" alt="" /></a></td><td class="train"> -<a href="/bin/traininfo.exe/dn/270825/199240/792524/305987/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:53&station_evaId=8000098&station_type=dep&"> -RE 10135 -</a> -</td> -<td class="route"> -<span class="bold"> -<a onclick="sHC(this, '', '8000149','20:36'); return false;" href="/bin/bhftafel.exe/dn?input=Hamm(Westf)%238000149&boardType=dep&time=20:36&productsFilter=11111&start=yes"> -Hamm(Westf) -</a> -</span> -<br /> -Essen Hbf -19:53 -- -Wattenscheid -19:58 -- -Bochum Hbf -20:03 -- -Dortmund Hbf -20:15 -- -Kamen -20:25 -- -Hamm(Westf) -20:36 -</td> -<td class="platform"> -<strong>6</strong><br /> -</td> -<td class="ris"> -<span><span style="color:#50aa50;">pünktlich</span></span></td> -</tr> -<tr> -<td class="time">19:56</td> -<td class="train"><a href="http://reiseauskunft.bahn.de/bin/traininfo.exe/dn/291048/204237/500602/153286/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:56&station_evaId=8000098&station_type=dep&"><img src="/v/820/img/sbahn_24x24.gif" class="middle" alt="" /></a></td><td class="train"> -<a href="/bin/traininfo.exe/dn/291048/204237/500602/153286/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:56&station_evaId=8000098&station_type=dep&"> -S 3 -</a> -</td> -<td class="route"> -<span class="bold"> -<a onclick="sHC(this, '', '8000286','20:13'); return false;" href="/bin/bhftafel.exe/dn?input=Oberhausen Hbf%238000286&boardType=dep&time=20:13&productsFilter=11111&start=yes"> -Oberhausen Hbf -</a> -</span> -<br /> -Essen Hbf -19:56 -- -Essen West -19:58 -- -Essen-Frohnhausen -20:00 -- -Mülheim(Ruhr)Hbf -20:04 -- -Mülheim(Ruhr)West -20:07 -- -Mülheim(Ruhr)Styrum -20:09 -- -Oberhausen Hbf -20:13 -</td> -<td class="platform"> -<strong>7</strong><br /> -</td> -<td class="ris"> -<span><span style="color:#50aa50;">pünktlich</span></span></td> -</tr> -<tr> -<td class="time">19:56</td> -<td class="train"><a href="http://reiseauskunft.bahn.de/bin/traininfo.exe/dn/435786/255626/81684/104420/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:56&station_evaId=8000098&station_type=dep&"><img src="/v/820/img/sbahn_24x24.gif" class="middle" alt="" /></a></td><td class="train"> -<a href="/bin/traininfo.exe/dn/435786/255626/81684/104420/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:56&station_evaId=8000098&station_type=dep&"> -S 1 -</a> -</td> -<td class="route"> -<span class="bold"> -<a onclick="sHC(this, '', '8000080','20:36'); return false;" href="/bin/bhftafel.exe/dn?input=Dortmund Hbf%238000080&boardType=dep&time=20:36&productsFilter=11111&start=yes"> -Dortmund Hbf -</a> -</span> -<br /> -Essen Hbf -19:56 -- -Essen-Steele -19:59 -- -Essen-Steele Ost -20:01 -- -Essen-Eiberg -20:04 -- -Wattenscheid-Höntrop -20:07 -- -Bochum-Ehrenfeld -20:11 -- -Bochum Hbf -20:13 -- -Bochum-Langendreer West -20:18 -- -Bochum-Langendreer -20:20 -- -Dortmund-Kley -20:23 -- -Dortmund-Oespel -20:25 -- -Dortmund Universität -20:28 -- -Dortmund-Dorstfeld Süd -20:30 -- -Dortmund-Dorstfeld -20:32 -- -Dortmund Hbf -20:36 -</td> -<td class="platform"> -<strong>11</strong><br /> -</td> -<td class="ris"> -<span><span style="color:#50aa50;">pünktlich</span></span></td> -</tr> -<tr> -<td class="time">19:59</td> -<td class="train"><a href="http://reiseauskunft.bahn.de/bin/traininfo.exe/dn/372702/279706/611116/181324/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:59&station_evaId=8000098&station_type=dep&"><img src="/v/820/img/ec_ic_24x24.gif" class="middle" alt="" /></a></td><td class="train"> -<a href="/bin/traininfo.exe/dn/372702/279706/611116/181324/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=19:59&station_evaId=8000098&station_type=dep&"> -EC 6 -</a> -</td> -<td class="route"> -<span class="bold"> -<a onclick="sHC(this, '', '8002553','23:30'); return false;" href="/bin/bhftafel.exe/dn?input=Hamburg-Altona%238002553&boardType=dep&time=23:30&productsFilter=11111&start=yes"> -Hamburg-Altona -</a> -</span> -<br /> -Essen Hbf -19:59 -- -Bochum Hbf -20:08 -- -Dortmund Hbf -20:21 -- -Münster(Westf)Hbf -20:54 -- -Osnabrück Hbf -21:21 -- -Diepholz -21:46 -- -Bremen Hbf -22:18 -- -Hamburg-Harburg -23:03 -- -Hamburg Hbf -23:15 -- -Hamburg Dammtor -23:21 -- -Hamburg-Altona -23:30 -</td> -<td class="platform"> -<strong>4</strong><br /> -</td> -<td class="ris"> -<span><span style="color:#f00;">ca. +15</span></span>,<br/><span class="red">Grund: Stellwerksstörung /-ausfall</span></td> -</tr> -<tr> -<td class="time">20:00</td> -<td class="train"><a href="http://reiseauskunft.bahn.de/bin/traininfo.exe/dn/526677/318952/652836/150859/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=20:00&station_evaId=8000098&station_type=dep&"><img src="/v/820/img/ec_ic_24x24.gif" class="middle" alt="" /></a></td><td class="train"> -<a href="/bin/traininfo.exe/dn/526677/318952/652836/150859/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=20:00&station_evaId=8000098&station_type=dep&"> -IC 2315 -</a> -</td> -<td class="route"> -<span class="bold"> -<a onclick="sHC(this, '', '8000105','23:11'); return false;" href="/bin/bhftafel.exe/dn?input=Frankfurt(Main)Hbf%238000105&boardType=dep&time=23:11&productsFilter=11111&start=yes"> -Frankfurt(Main)Hbf -</a> -</span> -<br /> -Essen Hbf -20:00 -- -Duisburg Hbf -20:10 -- -Düsseldorf Hbf -20:25 -- -Köln Hbf -20:50 -- -Bonn Hbf -21:12 -- -Koblenz Hbf -21:46 -- -Mainz Hbf -22:38 -- -Frankfurt(M) Flughafen Fernbf -22:59 -- -Frankfurt(Main)Hbf -23:11 -</td> -<td class="platform"> -<strong>2</strong><br /> -</td> -<td class="ris"> -<span><span style="color:#50aa50;">pünktlich</span></span></td> -</tr> -<tr> -<td class="time">20:05</td> -<td class="train"><a href="http://reiseauskunft.bahn.de/bin/traininfo.exe/dn/155067/160070/775204/335913/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=20:05&station_evaId=8000098&station_type=dep&"><img src="/v/820/img/sbahn_24x24.gif" class="middle" alt="" /></a></td><td class="train"> -<a href="/bin/traininfo.exe/dn/155067/160070/775204/335913/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=20:05&station_evaId=8000098&station_type=dep&"> -S 1 -</a> -</td> -<td class="route"> -<span class="bold"> -<a onclick="sHC(this, '', '8000087','21:17'); return false;" href="/bin/bhftafel.exe/dn?input=Solingen Hbf%238000087&boardType=dep&time=21:17&productsFilter=11111&start=yes"> -Solingen Hbf -</a> -</span> -<br /> -Essen Hbf -20:05 -- -Essen West -20:07 -- -Essen-Frohnhausen -20:10 -- -Mülheim(Ruhr)Hbf -20:15 -- -Mülheim(Ruhr)Styrum -20:18 -- -Duisburg Hbf -20:23 -- -Duisburg-Schlenk -20:27 -- -Duisburg-Buchholz -20:30 -- -Duisburg-Großenbaum -20:32 -- -Duisburg-Rahm -20:35 -- -Angermund -20:37 -- -Düsseldorf Flughafen -20:41 -- -Düsseldorf-Unterrath -20:44 -- -Düsseldorf-Derendorf -20:47 -- -Düsseldorf-Zoo -20:49 -- -Düsseldorf Wehrhahn -20:51 -- -Düsseldorf Hbf -20:53 -- -Düsseldorf Volksgarten -20:56 -- -Düsseldorf-Oberbilk -20:58 -- -Düsseldorf-Eller Mitte -21:01 -- -Düsseldorf-Eller -21:03 -- -Hilden -21:08 -- -Hilden Süd -21:10 -- -Solingen Vogelpark -21:14 -- -Solingen Hbf -21:17 -</td> -<td class="platform"> -<strong>7</strong><br /> -</td> -<td class="ris"> -<span><span style="color:#50aa50;">pünktlich</span></span></td> -</tr> -<tr> -<td class="time">20:06</td> -<td class="train"><a href="http://reiseauskunft.bahn.de/bin/traininfo.exe/dn/939699/421653/539178/43644/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=20:06&station_evaId=8000098&station_type=dep&"><img src="/v/820/img/sbahn_24x24.gif" class="middle" alt="" /></a></td><td class="train"> -<a href="/bin/traininfo.exe/dn/939699/421653/539178/43644/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=20:06&station_evaId=8000098&station_type=dep&"> -S 3 -</a> -</td> -<td class="route"> -<span class="bold"> -<a onclick="sHC(this, '', '8002640','20:25'); return false;" href="/bin/bhftafel.exe/dn?input=Hattingen(R) Mitte%238002640&boardType=dep&time=20:25&productsFilter=11111&start=yes"> -Hattingen(R) Mitte -</a> -</span> -<br /> -Essen Hbf -20:06 -- -Essen-Steele -20:09 -- -Essen-Steele Ost -20:12 -- -Essen-Horst -20:14 -- -Bochum-Dahlhausen -20:17 -- -Hattingen(Ruhr) -20:22 -- -Hattingen(R) Mitte -20:25 -</td> -<td class="platform"> -<strong>11</strong><br /> -</td> -<td class="ris"> -<span><span style="color:#50aa50;">pünktlich</span></span></td> -</tr> -<tr> -<td class="time">20:07</td> -<td class="train"><a href="http://reiseauskunft.bahn.de/bin/traininfo.exe/dn/279441/231405/931188/372461/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=20:07&station_evaId=8000098&station_type=dep&"><img src="/v/820/img/re_24x24.gif" class="middle" alt="" /></a></td><td class="train"> -<a href="/bin/traininfo.exe/dn/279441/231405/931188/372461/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=20:07&station_evaId=8000098&station_type=dep&"> -ABR 5681 -</a> -</td> -<td class="route"> -<span class="bold"> -<a onclick="sHC(this, '', '8000142','20:46'); return false;" href="/bin/bhftafel.exe/dn?input=Hagen Hbf%238000142&boardType=dep&time=20:46&productsFilter=11111&start=yes"> -Hagen Hbf -</a> -</span> -<br /> -Essen Hbf -20:07 -- -Essen-Kray Süd -20:10 -- -Wattenscheid -20:14 -- -Bochum Hbf -20:20 -- -Witten Hbf -20:32 -- -Wetter(Ruhr) -20:37 -- -Hagen-Vorhalle -20:41 -- -Hagen Hbf -20:46 -</td> -<td class="platform"> -<strong>10</strong><br /> -</td> -<td class="ris"> -<span><span title="Es liegen keine aktuellen Informationen vor.">k.A.</span></span></td> -</tr> -<tr> -<td class="time">20:09</td> -<td class="train"><a href="http://reiseauskunft.bahn.de/bin/traininfo.exe/dn/287949/204662/623744/215890/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=20:09&station_evaId=8000098&station_type=dep&"><img src="/v/820/img/re_24x24.gif" class="middle" alt="" /></a></td><td class="train"> -<a href="/bin/traininfo.exe/dn/287949/204662/623744/215890/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=20:09&station_evaId=8000098&station_type=dep&"> -RE 10138 -</a> -</td> -<td class="route"> -<span class="bold"> -<a onclick="sHC(this, '', '8000001','22:07'); return false;" href="/bin/bhftafel.exe/dn?input=Aachen Hbf%238000001&boardType=dep&time=22:07&productsFilter=11111&start=yes"> -Aachen Hbf -</a> -</span> -<br /> -Essen Hbf -20:09 -- -Mülheim(Ruhr)Hbf -20:14 -- -Duisburg Hbf -20:20 -- -Düsseldorf Flughafen -20:31 -- -Düsseldorf Hbf -20:37 -- -Düsseldorf-Benrath -20:45 -- -Leverkusen Mitte -20:54 -- -Köln-Mülheim -21:01 -- -Köln Messe/Deutz -21:07 -- -Köln Hbf -21:12 -- -Köln-Ehrenfeld -21:19 -- -Horrem -21:27 -- -Düren -21:38 -- -Langerwehe -21:45 -- -Eschweiler Hbf -21:52 -- -Stolberg(Rheinl)Hbf -21:56 -- -Aachen-Rothe Erde -22:02 -- -Aachen Hbf -22:07 -</td> -<td class="platform"> -<strong>2</strong><br /> -</td> -<td class="ris"> -<span><span style="color:#50aa50;">pünktlich</span></span></td> -</tr> -<tr> -<td class="time">20:11</td> -<td class="train"><a href="http://reiseauskunft.bahn.de/bin/traininfo.exe/dn/340353/224231/18196/104353/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=20:11&station_evaId=8000098&station_type=dep&"><img src="/v/820/img/sbahn_24x24.gif" class="middle" alt="" /></a></td><td class="train"> -<a href="/bin/traininfo.exe/dn/340353/224231/18196/104353/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=20:11&station_evaId=8000098&station_type=dep&"> -S 9 -</a> -</td> -<td class="route"> -<span class="bold"> -<a onclick="sHC(this, '', '8000047','20:28'); return false;" href="/bin/bhftafel.exe/dn?input=Bottrop Hbf%238000047&boardType=dep&time=20:28&productsFilter=11111&start=yes"> -Bottrop Hbf -</a> -</span> -<br /> -Essen Hbf -20:11 -- -Essen West -20:13 -- -Essen-Borbeck Süd -20:16 -- -Essen-Borbeck -20:18 -- -Essen-Gerschede -20:21 -- -Essen-Dellwig Ost -20:24 -- -Bottrop Hbf -20:28 -</td> -<td class="platform"> -<strong>7</strong><br /> -</td> -<td class="ris"> -<span><span style="color:#50aa50;">pünktlich</span></span></td> -</tr> -<tr> -<td class="time">20:14</td> -<td class="train"><a href="http://reiseauskunft.bahn.de/bin/traininfo.exe/dn/158772/824721/523722/208940/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=20:14&station_evaId=8000098&station_type=dep&"><img src="/v/820/img/re_24x24.gif" class="middle" alt="" /></a></td><td class="train"> -<a href="/bin/traininfo.exe/dn/158772/824721/523722/208940/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=20:14&station_evaId=8000098&station_type=dep&"> -RE 10029 -</a> -</td> -<td class="route"> -<span class="bold"> -<a onclick="sHC(this, '', '8000149','21:10'); return false;" href="/bin/bhftafel.exe/dn?input=Hamm(Westf)%238000149&boardType=dep&time=21:10&productsFilter=11111&start=yes"> -Hamm(Westf) -</a> -</span> -<br /> -Essen Hbf -20:14 -- -Wattenscheid -20:19 -- -Bochum Hbf -20:24 -- -Dortmund Hbf -20:37 -- -Dortmund-Scharnhorst -20:50 -- -Dortmund-Kurl -20:53 -- -Kamen-Methler -20:56 -- -Kamen -20:59 -- -Hamm(Westf) -21:10 -</td> -<td class="platform"> -<strong>6</strong><br /> -</td> -<td class="ris"> -<span><span style="color:#50aa50;">pünktlich</span></span></td> -</tr> -<tr> -<td class="time">20:17</td> -<td class="train"><a href="http://reiseauskunft.bahn.de/bin/traininfo.exe/dn/996606/474621/929754/132675/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=20:17&station_evaId=8000098&station_type=dep&"><img src="/v/820/img/ice_24x24.gif" class="middle" alt="" /></a></td><td class="train"> -<a href="/bin/traininfo.exe/dn/996606/474621/929754/132675/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=20:17&station_evaId=8000098&station_type=dep&"> -ICE 947 -</a> -</td> -<td class="route"> -<span class="bold"> -<a onclick="sHC(this, '', '8098160','00:46'); return false;" href="/bin/bhftafel.exe/dn?input=Berlin Hbf (tief)%238098160&boardType=dep&time=00:46&productsFilter=11111&start=yes"> -Berlin Hbf (tief) -</a> -</span> -<br /> -Essen Hbf -20:17 -- -Bochum Hbf -20:28 -- -Dortmund Hbf -20:41 -- -Hamm(Westf) -20:59 -- -Bielefeld Hbf -21:27 -- -Hannover Hbf -22:28 -- -Wolfsburg Hbf -23:21 -- -Stendal -00:02 -- -Berlin-Spandau -00:36 -- -Berlin Hbf (tief) -00:46 -</td> -<td class="platform"> -<strong>4</strong><br /> -</td> -<td class="ris"> -<span><span style="color:#50aa50;">pünktlich</span></span></td> -</tr> -<tr> -<td class="time">20:18</td> -<td class="train"><a href="http://reiseauskunft.bahn.de/bin/traininfo.exe/dn/197847/173512/85568/23165/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=20:18&station_evaId=8000098&station_type=dep&"><img src="/v/820/img/re_24x24.gif" class="middle" alt="" /></a></td><td class="train"> -<a href="/bin/traininfo.exe/dn/197847/173512/85568/23165/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=20:18&station_evaId=8000098&station_type=dep&"> -RB 11245 -</a> -</td> -<td class="route"> -<span class="bold"> -<a onclick="sHC(this, '', '8000263','21:22'); return false;" href="/bin/bhftafel.exe/dn?input=Münster(Westf)Hbf%238000263&boardType=dep&time=21:22&productsFilter=11111&start=yes"> -Münster(Westf)Hbf -</a> -</span> -<br /> -Essen Hbf -20:18 -- -Gelsenkirchen Hbf -20:25 -- -Wanne-Eickel Hbf -20:30 -- -Recklinghausen Süd -20:34 -- -Recklinghausen Hbf -20:38 -- -Marl-Sinsen -20:43 -- -Haltern am See -20:49 -- -Sythen -20:53 -- -Dülmen -20:58 -- -Buldern -21:03 -- -Nottuln-Appelhülsen -21:07 -- -Bösensell -21:11 -- -Münster-Albachten -21:14 -- -Münster(Westf)Hbf -21:22 -</td> -<td class="platform"> -<strong>9</strong><br /> -</td> -<td class="ris"> -<span><span style="color:#50aa50;">pünktlich</span></span></td> -</tr> -<tr> -<td class="time">20:18</td> -<td class="train"><a href="http://reiseauskunft.bahn.de/bin/traininfo.exe/dn/150147/158211/543588/221745/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=20:18&station_evaId=8000098&station_type=dep&"><img src="/v/820/img/sbahn_24x24.gif" class="middle" alt="" /></a></td><td class="train"> -<a href="/bin/traininfo.exe/dn/150147/158211/543588/221745/80?ld=96248&country=DEU&rt=1&date=06.07.11&time=20:18&station_evaId=8000098&station_type=dep&"> -S 6 -</a> -</td> -<td class="route"> -<span class="bold"> -<a onclick="sHC(this, '', '8003372','21:58'); return false;" href="/bin/bhftafel.exe/dn?input=Köln-Nippes%238003372&boardType=dep&time=21:58&productsFilter=11111&start=yes"> -Köln-Nippes -</a> -</span> -<br /> -Essen Hbf -20:18 -- -Essen Süd -20:20 -- -Essen Stadtwald -20:23 -- -Essen-Hügel -20:26 -- -Essen-Werden -20:29 -- -Kettwig -20:33 -- -Kettwig Stausee -20:35 -- -Hösel -20:39 -- -Ratingen Ost -20:44 -- -Düsseldorf-Rath -20:48 -- -Düsseldorf-Rath Mitte -20:51 -- -Düsseldorf-Derendorf -20:54 -- -Düsseldorf-Zoo -20:56 -- -Düsseldorf Wehrhahn -20:58 -- -Düsseldorf Hbf -21:00 -- -Düsseldorf Volksgarten -21:04 -- -Düsseldorf-Oberbilk -21:06 -- -Düsseldorf-Eller Süd -21:09 -- -Düsseldorf-Reisholz -21:11 -- -Düsseldorf-Benrath -21:14 -- -Düsseldorf-Garath -21:17 -- -Düsseldorf-Hellerhof -21:19 -- -Langenfeld(Rhld)-Berghausen -21:22 -- -Langenfeld(Rhld) -21:24 -- -Leverkusen-Rheindorf -21:28 -- -Leverkusen-Küppersteg -21:31 -- -Leverkusen Mitte -21:33 -- -Bayerwerk -21:36 -- -Köln-Stammheim -21:39 -- -Köln-Mülheim -21:43 -- -Köln-Buchforst -21:46 -- -Köln Messe/Deutz Gl. 9-10 -21:50 -- -Köln Hbf -21:53 -- -Köln Hansaring -21:55 -- -Köln-Nippes -21:58 -</td> -<td class="platform"> -<strong>12</strong><br /> -</td> -<td class="ris"> -<span><span style="color:#50aa50;">pünktlich</span></span></td> -</tr> -<tr class="browse"> -<td class="time"> -<a href="http://reiseauskunft.bahn.de/bin/bhftafel.exe/dn?ld=96248&country=DEU&rt=1&input=Essen Hbf%238000098&boardType=dep&time=19:19%2B60&productsFilter=11111&&&date=06.07.11&&selectDate=&maxJourneys=&start=yes" class="arrowlink arrowlinkbottom">später</a> -</td> -<td colspan="2" class="train"> </td> -<td class="route"> -</td> -<td class="platform"> </td> -<td class="ris"> </td> -</tr> -</table> -<p class="lastParagraph"> -Anzeige aller Halte bis zu diesem Zeichen <img src="/v/820/img/sq_sep.gif" />, dahinter Anzeige der wichtigsten Halte. -</p> -<a name="end"></a> -</div> -<div id="hafasContentEnd"> </div> -</div> -<div id="hafasLegend" > -<div class="content"> -<div class="woIcon clearfix">Alle <a href="http://www.bahn.de/app_hilfe_angabengewaehr_pk_de_DEU.shtml" onclick="popUp('about:blank','angaben','cms');" target="angaben" >Angaben</a> ohne Gewähr.</div> -</div> -<div class="end"> -</div> -</div> -<div id="hafasSystembar" class="box site-actions"> -<ul class="clearfix"> -<li><a href="javascript:window.print(self)" id="link-print">Seite drucken</a></li> -<li><a href="#" id="link-top">Zum Seitenanfang</a></li> -</ul> -</div> -</div> -<div id="footer"> -<!-- Footer navigation --> -<ul id="footer-nav"> -<li><span>© Deutsche Bahn AG</span></li> -<li><a href="http://www.bahn.de/app_agb_pk_de_DEU.shtml" target="_blank">AGB</a></li> -<li><a href="http://www.bahn.de/app_impressum_pk_de_DEU.shtml" target="_blank">Impressum</a></li> -<li><a href="http://www.bahn.de/app_datenschutz_pk_de_DEU.shtml" target="_blank">Datenschutzgrundsätze</a></li> -<li><a href="http://www.deutschebahn.com" target="_blank">www.deutschebahn.com</a></li> -</ul> -<form method="get" action="/"> -<fieldset> -<input type="hidden" name="bufferUpdater" id="bufferUpdater" disabled="disabled" value="" /> -</fieldset> -</form> -<div class="bar"></div> -<!-- Softwareversion/Datenstand: HAFAS 5.29.DB.R8.20.k [5.29.DB.R8.20.m/8.20.14(11)_data:f35bcbe2] 96248 --> -</div> -<div class="webtrack"> -<!-- SiteCatalyst Version: H.20.3. Copyright 1996-2009 Adobe, Inc. All Rights Reserved--> -<script language="JavaScript">var s_account="dbbahnprod";</script> -<script language="JavaScript" type="text/javascript" src="/v/760/js/s_code.js"></script> -<script language="JavaScript" type="text/javascript"><!-- -s.pageName="Auskunft_Abfahrtsplan"; -s.channel="Auskunft"; -s.prop4="Auskunft"; -/* Conversion Variables */ -s.eVar4="Auskunft"; -/************* DO NOT ALTER ANYTHING BELOW THIS LINE ! *************/ -var s_code=s.t();if(s_code)document.write(s_code)//--></script> -<script language="JavaScript" type="text/javascript"><!-- -if(navigator.appVersion.indexOf('MSIE')>=0)document.write(unescape('%3C')+'\!-'+'-') -//--></script> -<noscript><img -src="http://t.bahn.de/b/ss/dbbahnprod/1/H.20.3--NS/1802787822?pageName=Auskunft_Abfahrtsplan&ch=Auskunft&c4=Auskunft&v4=Auskunft" -height="1" width="1" border="0" alt="" /></a></noscript><!--/NICHT -ENTFERNEN/--> -<!-- End SiteCatalyst Code Version: H.20.3. --> -</div> -</div> -</body> -</html> |