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 )