The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Travel::Status::DE::EFA - unofficial EFA departure monitor

SYNOPSIS

use Travel::Status::DE::EFA;

my $status = Travel::Status::DE::EFA->new(
    service => 'VRR',
    name => 'Essen Helenenstr'
);

for my $d ($status->results) {
    printf(
        "%s %-8s %-5s %s\n",
        $d->datetime->strftime('%H:%M'),
        $d->platform_name, $d->line, $d->destination
    );
}

VERSION

version 3.01

DESCRIPTION

Travel::Status::DE::EFA is an unofficial interface to EFA-based departure monitors.

It reports all upcoming tram/bus/train departures at a given place.

METHODS

my $status = Travel::Status::DE::EFA->new(%opt)

Requests the departures as specified by opts and returns a new Travel::Status::DE::EFA object. service and name are mandatory. Dies if the wrong opts were passed.

Arguments:

service => name

EFA service. See efa-m --list for known services. If you found a service not listed there, please notify <derf+efa@finalrewind.org>.

place => place

Name of the place/city

type => address|poi|stop|stopID

Type of the following name. poi means "point of interest". Defaults to stop (stop/station name).

name => name

address / poi / stop name to list departures for.

datetime => DateTime object

Request departures for the date/time specified by DateTime object. Default: now.

efa_encoding => encoding

Some EFA servers do not correctly specify their response encoding. If you observe encoding issues, you can manually specify it here. Example: iso-8859-15.

full_routes => 0|1

If true: Request full routes for all departures from the backend. This enables the route_pre, route_post and route_interesting accessors in Travel::Status::DE::EFA::Departure(3pm).

proximity_search => 0|1

If true: Show departures for stops in the proximity of the requested place as well.

timeout => seconds

Request timeout, the argument is passed on to LWP::UserAgent(3pm). Default: 10 seconds. Set to 0 or a negative value to disable it.

my $status_p = Travel::Status::DE::EFA->new_p(%opt)

Returns a promise that resolves into a Travel::Status::DE::EFA instance ($status) on success and rejects with an error message on failure. In addition to the arguments of new, the following mandatory arguments must be set.

promise => promises module

Promises implementation to use for internal promises as well as new_p return value. Recommended: Mojo::Promise(3pm).

user_agent => user agent

User agent instance to use for asynchronous requests. The object must implement a post_p function. Recommended: Mojo::UserAgent(3pm).

$status->errstr

In case of an HTTP request or EFA error, returns a string describing it. If none occured, returns undef.

$status->lines

Returns a list of Travel::Status::DE::EFA::Line(3pm) objects, each one describing one line servicing the selected station.

$status->name_candidates

Returns a list of name candidates if name is ambiguous. Returns nothing (undef / empty list) otherwise.

$status->place_candidates

Returns a list of place candidates if place is ambiguous. Returns nothing (undef / empty list) otherwise.

$status->results

Returns a list of Travel::Status::DE::EFA::Departure(3pm) objects, each one describing one departure.

Travel::Status::DE::EFA::get_service_ids()

Returns the list of supported services (backends).

Travel::Status::DE::EFA::get_service(service)

Returns a hashref describing the requested service ID with the following keys.

name => string

Provider name, e.g. Verkehrsverbund Oberelbe.

url => string

Backend base URL.

homepage => string (optional)

Provider homepage.

languages => arrayref (optional)

Supportde languages, e.g. de, en.

coverage => hashref

Area in which the service provides near-optimal coverage. Typically, this means a (nearly) complete list of departures and real-time data. The hashref contains two optional keys: area (GeoJSON) and regions (list of strings, e.g. "DE" or "CH-BE").

DIAGNOSTICS

None.

DEPENDENCIES

  • Class::Accessor(3pm)

  • DateTime(3pm)

  • DateTime::Format::Strptime(3pm)

  • JSON(3pm)

  • LWP::UserAgent(3pm)

BUGS AND LIMITATIONS

The API is not exposed completely.

SEE ALSO

efa-m(1), Travel::Status::DE::EFA::Departure(3pm).

AUTHOR

Copyright (C) 2011-2024 by Birte Kristina Friesel <derf@finalrewind.org>

LICENSE

This module is licensed under the same terms as Perl itself.