summaryrefslogtreecommitdiff
path: root/lib/Travel
diff options
context:
space:
mode:
authorDaniel Friesel <derf@finalrewind.org>2011-07-27 12:07:02 +0200
committerDaniel Friesel <derf@finalrewind.org>2011-07-27 12:07:02 +0200
commit047cb7b3e9f694c3e6654102bff3ae2bfd457be8 (patch)
tree703020cd25a42fe538f4d9e45e1f8ee38f000fb7 /lib/Travel
parent53cf789f02f754f10650ce94e2b01997dda61a4d (diff)
DeutscheBahn.pm: Improve error handling (add ->errstr accessor)
Diffstat (limited to 'lib/Travel')
-rw-r--r--lib/Travel/Status/DE/DeutscheBahn.pm37
1 files changed, 32 insertions, 5 deletions
diff --git a/lib/Travel/Status/DE/DeutscheBahn.pm b/lib/Travel/Status/DE/DeutscheBahn.pm
index baf1fe2..136cf51 100644
--- a/lib/Travel/Status/DE/DeutscheBahn.pm
+++ b/lib/Travel/Status/DE/DeutscheBahn.pm
@@ -54,12 +54,14 @@ sub new {
}
}
+ bless( $ref, $obj );
+
$reply = $ua->post( 'http://reiseauskunft.bahn.de/bin/bhftafel.exe/dn?rt=1',
$ref->{post} );
if ( $reply->is_error ) {
- my $errstr = $reply->status_line();
- confess("Could not submit POST request: ${errstr}");
+ $ref->{errstr} = $reply->status_line();
+ return $ref;
}
$ref->{html} = $reply->content;
@@ -71,7 +73,7 @@ sub new {
suppress_warnings => 1,
);
- return bless( $ref, $obj );
+ return $ref;
}
sub new_from_html {
@@ -94,6 +96,12 @@ sub new_from_html {
return bless( $ref, $obj );
}
+sub errstr {
+ my ($self) = @_;
+
+ return $self->{errstr};
+}
+
sub results {
my ($self) = @_;
my $mode = $self->{post}->{boardType};
@@ -116,6 +124,9 @@ sub results {
if ( defined $self->{results} ) {
return @{ $self->{results} };
}
+ if ( not defined $self->{tree} ) {
+ return;
+ }
for my $tr ( @{ $self->{tree}->findnodes($xp_element) } ) {
@@ -194,6 +205,10 @@ arrival/departure monitor
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",
@@ -224,7 +239,11 @@ unspecified).
=item my $status = Travel::Status::DE::DeutscheBahn->new(I<%opts>)
-Returns a new Travel::Status::DE::DeutscheBahn element. Supported I<opts> are:
+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
+I<opts> were passed.
+
+Supported I<opts> are:
=over
@@ -259,11 +278,19 @@ By default, the following are shown: ice, ic_ec, d, nv, s.
=back
-=item $status->results()
+=item $status->error
+
+In case of an error in the HTTP request, returns a string describing it. If
+no error occured, 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.
+
=back
=head1 DIAGNOSTICS