diff options
Diffstat (limited to 'lib/Travel')
-rw-r--r-- | lib/Travel/Routing/DE/HAFAS.pm | 215 |
1 files changed, 215 insertions, 0 deletions
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<from_stop> and B<to_stop> and +supports the following additional flags: + +=over + +=item B<from_stop> => I<stop> (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<to_stop> => I<stop> (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<cache> => I<Cache::File object> + +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<datetime> => I<DateTime object> (station) + +Date and time for itinerary request. Defaults to now. + +=item B<excluded_mots> => [I<mot1>, I<mot2>, ...] (geoSearch, station) + +By default, all modes of transport (trains, trams, buses etc.) are considered. +If this option is set, all modes appearing in I<mot1>, I<mot2>, ... will +be excluded. The supported modes depend on B<service>, use +B<get_services> or B<get_service> to get the supported values. + +=item B<exclusive_mots> => [I<mot1>, I<mot2>, ...] (geoSearch, station) + +If this option is set, only the modes of transport appearing in I<mot1>, +I<mot2>, ... will be considered. The supported modes depend on B<service>, +use B<get_services> or B<get_service> to get the supported values. + +=item B<language> => I<language> + +Request text messages to be provided in I<language>. Supported languages depend +on B<service>, use B<get_services> or B<get_service> to get the supported +values. Providing an unsupported or invalid value may lead to garbage output. + +=item B<lwp_options> => 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<service> => I<service> + +Request results from I<service>, defaults to "DB". +See B<get_services> (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<new>, the following mandatory arguments must +be set. + +=over + +=item B<promise> => I<promises module> + +Promises implementation to use for internal promises as well as B<new_p> return +value. Recommended: Mojo::Promise(3pm). + +=item B<user_agent> => I<user agent> + +User agent instance to use for asynchronous requests. The object must implement +a B<post_p> 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<origin> to I<destination>. + +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> (URL to the station +board service), and B<productbits> (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<get_active_service>. +It also contains a B<shortname> key, which is the service name used by +the constructor's B<service> 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<get_active_service> 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 E<lt>derf@finalrewind.orgE<gt> + +=head1 LICENSE + +This module is licensed under the same terms as Perl itself. |