Travel-Status-MOTIS
view release on metacpan or search on metacpan
bin/motis-m view on Meta::CPAN
}
else {
say JSON->new->convert_blessed->encode( [ $status->results ] );
}
exit 0;
}
if ( $opt{stop_id} ) {
my $max_route_name = max map { length( $_->route_name ) } $status->results;
my $max_headsign
= max map { length( $_->headsign // q{} ) } $status->results;
my $max_delay = max map { length( $_->stopover->departure_delay // q{} ) }
$status->results;
my $max_track = max map {
length( $_->stopover->track // $_->stopover->scheduled_track // q{} )
} $status->results;
$max_delay += 1;
my @results = map { $_->[1] }
sort { $a->[0] <=> $b->[0] }
map {
[ ( $_->stopover->departure // $_->stopover->arrival )->epoch, $_ ]
} $status->results;
printf( "%s\n\n", $results[0]->stopover->stop->name );
for my $result (@results) {
printf(
"%s %s %${max_route_name}s %${max_headsign}s %${max_track}s\n",
$result->is_cancelled ? '--:--'
: $result->stopover->departure->strftime('%H:%M'),
$result->stopover->departure_delay ? sprintf(
"(%+${max_delay}d)", $result->stopover->departure_delay
)
: q{ } x ( $max_delay + 2 ),
$result->route_name,
$result->headsign // q{???},
$result->stopover->track // q{}
);
if ($show_trip_ids) {
say $result->id;
}
}
}
elsif ( $opt{trip_id} ) {
my $trip = $status->result;
bin/motis-m view on Meta::CPAN
stop id. For each departure, B<motis-m> shows
=over
=item * estimated departure time,
=item * delay, if known,
=item * trip route name,
=item * headsign / destination if known, and
=item * track, if known.
=back
=head2 Trip details (I<trip_id>)
List intermediate stops of I<trip_id> (as given by the departure board when
invoked with B<-i> / B<--show-trip-ids>) with arrival/departure time, delay (if
available), track (if available), and stop name. Also includes some generic
lib/Travel/Status/MOTIS.pm view on Meta::CPAN
service => 'RNV',
stop_id => 'rnv_241721',
);
for my $result ($status->results) {
printf(
"%s +%-3d %10s -> %s\n",
$result->stopover->departure->strftime('%H:%M'),
$result->stopover->delay,
$result->route_name,
$result->headsign,
);
}
Non-blocking variant;
use Mojo::Promise;
use Mojo::UserAgent;
use Travel::Status::MOTIS;
Travel::Status::MOTIS->new_p(
lib/Travel/Status/MOTIS.pm view on Meta::CPAN
promise => 'Mojo::Promise',
user_agent => Mojo::UserAgent->new
)->then(sub {
my ($status) = @_;
for my $result ($status->results) {
printf(
"%s +%-3d %10s -> %s\n",
$result->stopover->departure->strftime('%H:%M'),
$result->stopover->delay,
$result->route_name,
$result->headsign,
);
}
})->wait;
=head1 VERSION
version 0.03
=head1 DESCRIPTION
lib/Travel/Status/MOTIS/Trip.pm view on Meta::CPAN
our $VERSION = '0.03';
Travel::Status::MOTIS::Trip->mk_ro_accessors(
qw(
id
mode
agency
route_name
route_color
route_text_color
headsign
is_realtime
is_cancelled
arrival
scheduled_arrival
realtime_arrival
departure
scheduled_departure
lib/Travel/Status/MOTIS/Trip.pm view on Meta::CPAN
my $json = $opt{json}{legs}[0];
my $time_zone = $opt{time_zone};
my $ref = {
id => $json->{tripId},
mode => $json->{mode},
agency => $json->{agencyName},
route_name => $json->{routeShortName},
route_color => $json->{routeColor},
route_text_color => $json->{routeTextColor},
headsign => $json->{headsign},
is_cancelled => $json->{cancelled},
is_realtime => $json->{realTime},
raw_stopovers =>
[ $json->{from}, @{ $json->{intermediateStops} }, $json->{to} ],
raw_polyline => $json->{legGeometry},
time_zone => $time_zone,
};
lib/Travel/Status/MOTIS/TripAtStopover.pm view on Meta::CPAN
our $VERSION = '0.03';
Travel::Status::MOTIS::TripAtStopover->mk_ro_accessors(
qw(
id
mode
agency
route_name
route_color
route_text_color
headsign
is_cancelled
is_realtime
stopover
)
);
sub new {
my ( $obj, %opt ) = @_;
lib/Travel/Status/MOTIS/TripAtStopover.pm view on Meta::CPAN
my $json = $opt{json};
my $time_zone = $opt{time_zone};
my $ref = {
id => $json->{tripId},
mode => $json->{mode},
agency => $json->{agencyName},
route_name => $json->{routeShortName},
route_color => $json->{routeColor},
route_text_color => $json->{routeTextColor},
headsign => $json->{headsign},
is_cancelled => $json->{cancelled},
is_realtime => $json->{realTime},
stopover => Travel::Status::MOTIS::Stopover->new(
json => $json->{place},
# NOTE: $json->{place}->{cancelled} isn't set, we just override this here.
cancelled => $json->{cancelled},
realtime => $json->{realTime},
( run in 0.848 second using v1.01-cache-2.11-cpan-5511b514fd6 )