From 2948379496f270494bf8014c32d060dd0e16b42a Mon Sep 17 00:00:00 2001 From: Birte Kristina Friesel Date: Sun, 12 Nov 2023 13:55:45 +0100 Subject: HAFAS: add documentation --- lib/Travel/Routing/DE/HAFAS.pm | 215 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 215 insertions(+) (limited to 'lib/Travel') diff --git a/lib/Travel/Routing/DE/HAFAS.pm b/lib/Travel/Routing/DE/HAFAS.pm index 6203223..8d3e416 100644 --- a/lib/Travel/Routing/DE/HAFAS.pm +++ b/lib/Travel/Routing/DE/HAFAS.pm @@ -621,3 +621,218 @@ sub get_active_service { } # }}} + +1; + +__END__ + +=head1 NAME + +Travel::Routing::DE::HAFAS - Interface to HAFAS itinerary services + +=head1 SYNOPSIS + + use Travel::Routing::DE::HAFAS; + + my $hafas = Travel::Routing::DE::HAFAS->new( + from_stop => 'Eichlinghofen H-Bahn, Dortmund', + to_stop => 'Gangelplatz, Düsseldorf', + ); + + if (my $err = $hafas->errstr) { + die("Request error: ${err}\n"); + } + + for my $con ( $hafas->connections ) { + for my $sec ($con->sections) { + if ( $sec->type eq 'JNY' ) { + printf("%s → %s\n%s ab %s\n%s an %s\n\n", + $sec->name, $sec->direction, + $sec->dep_datetime->strftime('%H:%M'), + $sec->dep_loc->name, + $sec->arr_datetime->strftime('%H:%M'), + $sec->arr_loc->name, + ); + } + } + print "\n\n"; + } + +=head1 VERSION + +version 0.01 + +=head1 DESCRIPTION + +Travel::Routing::DE::HAFAS is an interface to HAFAS itinerary services +using the mgate.exe interface. It works best with the legacy instance of +Deutsche Bahn, but supports other transit services as well. + +=head1 METHODS + +=over + +=item $hafas = Travel::Routing::DE::HAFAS->new(I<%opt>) + +Request connections as specified by I<%opt> and return a new +Travel::Routing::DE::HAFAS instance with the results. Dies if the wrong +I<%opt> were passed. I<%opt> must contain B and B and +supports the following additional flags: + +=over + +=item B => I (mandatory) + +Origin stop, e.g. "Essen HBf" or "Alfredusbad, Essen (Ruhr)". The stop +must be specified either by name or by EVA ID (e.g. 8000080 for Dortmund Hbf). + +=item B => I (mandatory) + +Destination stop, e.g. "Essen HBf" or "Alfredusbad, Essen (Ruhr)". The stop +must be specified either by name or by EVA ID (e.g. 8000080 for Dortmund Hbf). + +=item B => I + +Store HAFAS replies in the provided cache object. This module works with +real-time data, so the object should be configured for an expiry of one to two +minutes. + +=item B => I (station) + +Date and time for itinerary request. Defaults to now. + +=item B => [I, I, ...] (geoSearch, station) + +By default, all modes of transport (trains, trams, buses etc.) are considered. +If this option is set, all modes appearing in I, I, ... will +be excluded. The supported modes depend on B, use +B or B to get the supported values. + +=item B => [I, I, ...] (geoSearch, station) + +If this option is set, only the modes of transport appearing in I, +I, ... will be considered. The supported modes depend on B, +use B or B to get the supported values. + +=item B => I + +Request text messages to be provided in I. Supported languages depend +on B, use B or B to get the supported +values. Providing an unsupported or invalid value may lead to garbage output. + +=item B => I<\%hashref> + +Passed on to C<< LWP::UserAgent->new >>. Defaults to C<< { timeout => 10 } >>, +pass an empty hashref to call the LWP::UserAgent constructor without arguments. + +=item B => I + +Request results from I, defaults to "DB". +See B (and C<< hafas-m --list >>) for a list of supported +services. + +=back + +=item $hafas_p = Travel::Routing::DE::HAFAS->new_p(I<%opt>) + +Return a promise that resolves into a Travel::Routing::DE::HAFAS instance +($hafas) on success and rejects with an error message on failure. If the +failure occured after receiving a response from the HAFAS backend, the rejected +promise contains a Travel::Routing::DE::HAFAS instance as a second argument. +In addition to the arguments of B, the following mandatory arguments must +be set. + +=over + +=item B => I + +Promises implementation to use for internal promises as well as B return +value. Recommended: Mojo::Promise(3pm). + +=item B => I + +User agent instance to use for asynchronous requests. The object must implement +a B function. Recommended: Mojo::UserAgent(3pm). + +=back + +=item $hafas->errcode + +In case of an error in the HAFAS backend, returns the corresponding error code +as string. If no backend error occurred, returns undef. + +=item $hafas->errstr + +In case of an error in the HTTP request or HAFAS backend, returns a string +describing it. If no error occurred, returns undef. + +=item $hafas->connections + +Returns a list of Travel::Routing::DE::HAFAS::Connection(3pm) objects, each of +which describes a single connection from I to I. + +Returns a false value if no connections were found or the parser / http request +failed. + +=item $hafas->messages + +Returns a list of Travel::Status::DE::HAFAS::Message(3pm) objects with service +messages. Each message belongs to at least one connection, connection section, +or stop along a section's journey. + +=item $hafas->get_active_service + +Returns a hashref describing the active service when a service is active and +nothing otherwise. The hashref contains the keys B (URL to the station +board service), and B (arrayref describing the supported modes of +transport, may contain duplicates). + +=item Travel::Routing::DE::HAFAS::get_services() + +Returns an array containing all supported HAFAS services. Each element is a +hashref and contains all keys mentioned in B. +It also contains a B key, which is the service name used by +the constructor's B parameter. + +=item Travel::Routing::DE::HAFAS::get_service(I<$service>) + +Returns a hashref describing the service I<$service>. Returns nothing if +I<$service> is not supported. See B for the hashref layout. + +=back + +=head1 DIAGNOSTICS + +None. + +=head1 DEPENDENCIES + +=over + +=item * Class::Accessor(3pm) + +=item * DateTime(3pm) + +=item * DateTime::Format::Strptime(3pm) + +=item * LWP::UserAgent(3pm) + +=item * Travel::Status::DE::HAFAS::Message(3pm) + +=back + +=head1 BUGS AND LIMITATIONS + +The non-default services (anything other than DB) are not well tested. + +=head1 SEE ALSO + +Travel::Routing::DE::HAFAS::Connection(3pm) + +=head1 AUTHOR + +Copyright (C) 2023 by Birte Kristina Friesel Ederf@finalrewind.orgE + +=head1 LICENSE + +This module is licensed under the same terms as Perl itself. -- cgit v1.2.3