#!/usr/bin/env perl use Mojolicious::Lite; use Cache::File; use Travel::Status::DE::DeutscheBahn; our $VERSION = '0.00'; sub get_results_for { my ($station) = @_; my $cache = Cache::File->new( cache_root => '/tmp/db-fake', default_expires => '900 sec' ); my $results = $cache->thaw($station); if ( not $results ) { my $status = Travel::Status::DE::DeutscheBahn->new( station => $station ); $results = [ $status->results ]; $cache->freeze( $station, $results ); } return @{$results}; } get '/' => sub { my $self = shift; my $station = $self->param('station'); $self->stash( 'version', $VERSION ); if ( not $station ) { return $self->render; } $self->redirect_to("/${station}"); } => 'index'; get '/:station' => sub { my $self = shift; my $station = $self->stash('station'); my @departures; my @results = get_results_for($station); $self->stash( 'version', $VERSION ); if ( not @results ) { $self->render( 'index', error => "Got no results for '$station'", ); return; } for my $result (@results) { push( @departures, { time => $result->time, train => $result->train, via => [ $result->route_interesting(3) ], destination => $result->destination, platform => ( split( / /, $result->platform ) )[0], info => $result->info, } ); } $self->render( 'multi', departures => \@departures, version => $VERSION, title => "departures for ${station}" ); }; get '/multi/:station' => sub { my $self = shift; my $station = $self->stash('station'); $self->redirect_to("/${station}"); }; app->start(); __DATA__ @@ index.html.ep DB Fakedisplay

DB-Fakedisplay displays the next departures at a DB station, just like the big LC display in the station itself.

<% if (my $error = stash 'error') { %> Error: <%= $error %>
<% } %> <%= form_for index => begin %>

Station name:
<%= text_field 'station' %>
<%= submit_button 'Display' %>

<% end %>

(For example: "Koeln Hbf" or "Essen West")

This is db-fakedisplay v<%= $version %>

@@ multi.html.ep <%= $title %>
% my $i = 0; % for my $departure (@{$departures}) { % $i++;
%= $departure->{platform}
%= $departure->{time}
%= $departure->{train}
% my $via_max = @{$departure->{via}}; % my $via_cur = 0; % for my $stop (@{$departure->{via}}) { % $via_cur++; <%= $stop %><% if ($via_cur < $via_max) { %> - <% } %> % }
%= $departure->{destination}
% if ($departure->{info}) {
%= $departure->{info}
% }
% }
db-fakedisplay v<%= $version %>