From 9c326773655664e18d5b846ed4136fea9fafacf8 Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Tue, 19 Mar 2019 17:02:30 +0100 Subject: [PATCH] API: Status: group properties, add station UIC/lon/lat --- index.pl | 49 +++++++++++++++++++++++++++++++-------- templates/account.html.ep | 24 ++++++++++++------- 2 files changed, 55 insertions(+), 18 deletions(-) diff --git a/index.pl b/index.pl index 06318fa..46a6873 100755 --- a/index.pl +++ b/index.pl @@ -1070,17 +1070,40 @@ get '/api/v0/:action/:token' => sub { } if ( $api_action eq 'status' ) { my $status = $self->get_user_status($uid); + + my @station_descriptions; + my $station_eva = undef; + my $station_lon = undef; + my $station_lat = undef; + + if ( $status->{station_ds100} ) { + @station_descriptions + = Travel::Status::DE::IRIS::Stations::get_station( + $status->{station_ds100} ); + } + if ( @station_descriptions == 1 ) { + ( undef, undef, $station_eva, $station_lon, $station_lat ) + = @{ $station_descriptions[0] }; + } $self->render( json => { - checked_in => $status->{checked_in} ? \1 : \0, - station_ds100 => $status->{station_ds100}, - station_name => $status->{station_name}, - train_type => $status->{train_type}, - train_line => $status->{train_line}, - train_no => $status->{train_no}, - action_ts => $status->{timestamp}->epoch, - sched_ts => $status->{sched_ts}->epoch, - real_ts => $status->{real_ts}->epoch, + deprecated => \0, + checked_in => $status->{checked_in} ? \1 : \0, + station => { + ds100 => $status->{station_ds100}, + name => $status->{station_name}, + uic => $station_eva, + longitude => $station_lon, + latitude => $station_lat, + }, + train => { + type => $status->{train_type}, + line => $status->{train_line}, + no => $status->{train_no}, + }, + action_ts => $status->{timestamp}->epoch, + sched_ts => $status->{sched_ts}->epoch, + real_ts => $status->{real_ts}->epoch, }, ); } @@ -1483,7 +1506,13 @@ post '/delete' => sub { my $now = DateTime->now( time_zone => 'Europe/Berlin' )->epoch; if ( $self->param('action') eq 'delete' ) { - if (not $self->authenticate($self->current_user->{name}, $self->param('password'))) { + if ( + not $self->authenticate( + $self->current_user->{name}, + $self->param('password') + ) + ) + { $self->render( 'account', invalid => 'password' ); return; } diff --git a/templates/account.html.ep b/templates/account.html.ep index 17b5e48..f7cac36 100644 --- a/templates/account.html.ep +++ b/templates/account.html.ep @@ -148,9 +148,6 @@

Status

-

- Das Format der API v0 kann sich noch ändern, ab v1 ist es stabil. -

% if ($token->{status}) { curl <%= $api_root %>/status/<%= $acc->{id} %>-<%= $token->{status} // 'TOKEN' %> @@ -159,14 +156,25 @@ curl <%= $api_root %>/status/TOKEN % }

+

+ Beispiel / Layout: +

{
+ "deprecated" : true / false, (falls true: Diese API-Version wird irgendwann abgeschaltet, bitte auf eine neue umsteigen)
"checked_in" : true / false,
- "station_ds100" : "EE", (DS100-Kürzel der letzten Station)
- "station_name" : "Essen Hbf", (Name der letzten Station)
- "train_type" : "ICE", (aktueller / letzter Zugtyp)
- "train_line" : "", (Linie, ggf. null)
- "train_no" : "1234", (Zugnummer)
+ "station" : {
+ "name" : "Essen Hbf", (Name der letzten Station)
+ "ds100" : "EE", (DS100-Kürzel)
+ "uic" : 8000098, (Internationale Bahnhofsnummer)
+ "longitude" : 7.014793,
+ "latitude" : 51.451355,
+ },
+ "train" : {
+ "type" : "ICE", (aktueller / letzter Zugtyp)
+ "line" : null, (Linie als String, nicht immer numerisch, ggf. null)
+ "no" : "1234", (Zugnummer als String)
+ },
"action_ts" : 1234567, (UNIX-Timestamp des letzten Checkin/Checkout)
"sched_ts" : 1234567, (UNIX-Timestamp der zugehörigen Ankunft/Abfahrt gemäß Fahrplan. Ggf. 0)
"real_ts" : 1234567, (UNIX-Timestamp der zugehörigen Ankunft/Abfahrt laut Echtzeitdaten. Ggf. 0)