Your homework assignment is to develop a application that takes in departure location, arrival location and date and time of departure and returns all possible routes on certain date that start in departure location and finish in arrival location. The data for routes can be found on Deutschebahn (DB) website.
Application must accept input from two different sources:
- API
/search?departure=Berlin+HBF&arrival=Frankfurt(M)Flughafen&date=2016-03-01+13:37:00 - Command line
php search.php --departure="Berlin+HBF" --arrival="Frankfurt(M)Flughafen" --date="2016-03-01 13:37:00"
Names of GET parameters (departure=...), command line script (search.php) and script arguments (--departure=...) can be renamed as you like. Just provide me with a proper usage commands.
The application has to consists of three main parts:
- Getting search params from the user.
- Executing search on DB and parsing the HTML data.
- Returning result in human readable matter.
The data for the example can be found at:
Keep in mind that to get all the data for the whole day, you have to click "Later" button a couple of times.
So for the example data, the response should look something like.
For the command line
$ php search.php --departure="Berlin HBF" --arrival="Frankfurt(M)Flughafen" --date="2016-03-01 13:37:00"
Berlin Hbf Frankfurt(M)Flughafen 13:34 18:04 89 EUR 125 EUR
Berlin Hbf Frankfurt(M)Flughafen 13:49 18:21 49 EUR 125 EUR
....
The search returned 17 routes in 12.23 seconds.For the API
{
"data": {
"routes": [
{
"departure": "Berlin Hbf",
"location": "Frankfurt(M)Flughafen",
"departure_time": "13:34",
"arrival_time": "18:04",
"price_low": 89,
"price_high": 125,
"currency": "EUR",
},
{
"departure": "Berlin Hbf",
"location": "Frankfurt(M)Flughafen",
"departure_time": "13:49",
"arrival_time": "18:21",
"price_low": 49,
"price_high": 125,
"currency": "EUR",
},...
]
},
"found": 17,
"time_taken": 12.23
}The number of routes fetched and number of seconds that the script took, should also be provided.
- PHP: 5.5.*
- Database: MySQL / MariaDB or PostgreSQL. (if needed)
- Framework: Laravel5, Symfony3, Lumen or Silex. (You can also use custom solution without a framework. But usage of external libraries is encouraged.)
- Composer for installing external libraries.
- Git for tracking code changes
- Application has to work on Ubuntu 14.04 LTS (but can be developed on any other OS).
Disclaimer: If needed you can use different tech stack, but has to be confirmed by me first. So contact me if needed.
- Working code (on some git repository). I encourage usage of public github projects. So just fork this repo.
- Manual on how to set up the application on the linux system. (add this below)
- Short example of usage. (add this below)
- Fully working application
- Simplicity of application
- Architecture of application
- Smart usage of external libraries.
- Performance of application
- Coding style & standard
- Code documentation
- Proper usage of Git with meaningful messages.
- General impression on the solution.
For some extra points
- Automated Tests (unit and/or functional)
- Caching of searches (so the second search with same params is faster than the previous one)
Describe here how to install and use your application.
$ echo "Add your install process here."
$ git clone git@github.com:goavio/homework.git homework
$ cd homework
# Install composer like stated here https://getcomposer.org/download/.
$ php composer.phar install$ echo "Add your usage info here."