# bahn_ex [![Build Status](https://travis-ci.org/pfitz/bahn_ex.svg?branch=master)](https://travis-ci.org/pfitz/bahn_ex) [![Hex.pm](http://img.shields.io/hexpm/v/bahn_ex.svg?style=flat)](https://hex.pm/packages/bahn_ex)
An Elixir wrapper for the api of [Deutsche Bahn Fahrplan API](https://developer.deutschebahn.com/store/apis/info?name=Fahrplan&version=v1&provider=DBOpenData)
## Installation
If [available in Hex](https://hex.pm/docs/publish), the package can be installed
by adding `bahn_ex` to your list of dependencies in `mix.exs`:
```elixir
def deps do
[
{:bahn_ex, "~> 0.1.0"}
]
end
```
Documentation can be generated with [ExDoc](https://github.com/elixir-lang/ex_doc)
and published on [HexDocs](https://hexdocs.pm). Once published, the docs can
be found at [https://hexdocs.pm/bahn_ex](https://hexdocs.pm/bahn_ex).
## Configuration
To access the api one needs an api key from Deutsche Bahn. Either you write an request via Email or
you could register at the [Bahn Developer Portal](https://developer.deutschebahn.com/) and retrieve
on api key there.
Once you got an api key add it to the config like so:
1) Make a file in `config/` called `bahn_ex_secret.exs`
2) Fill it with the following content
use Mix.Config
config :bahn_ex, api_key: "your api key here"
Or define the enviroment variable `BAHNEX_API_KEY`.
## Documentation
Use the documentation at [hexdocs](https://hexdocs.pm/bahn_ex) or this file.
## Usage
Please check the api documentation or use the help command inside `iex`.
## Examples
Get the location for Köln:
iex(1)> BahnEx.get_location("Köln")
Get the arrival board for Dresden at `2017-08-23T19:00:00Z`:
iex(1)> BahnEx.arrival_board(8010085, "2017-08-23T19:00:00Z")
[%BahnEx.Train{boardId: 8010085, dateTime: #DateTime<2017-08-23 19:35:00Z>,
detailsId: "304116%2F104694%2F528716%2F162986%2F80%3fstation_evaId%3D8010085",
name: "ICE 1653", origin: "Frankfurt(M) Flughafen Fernbf", stopId: 8010085,
stopName: "Dresden Hbf", track: "3", type: "ICE"},
%BahnEx.Train{boardId: 8010085, dateTime: #DateTime<2017-08-23 20:36:00Z>,
detailsId: "521202%2F179326%2F919084%2F285808%2F80%3fstation_evaId%3D8010085",
name: "IC 2047", origin: "Dortmund Hbf", stopId: 8010085,
stopName: "Dresden Hbf", track: "1", type: "IC"}]
Get the departure board for Dresden at `2017-08-23T19:00:00Z`:
iex(1)> BahnEx.arrival_board(8010085, "2017-08-23T19:00:00Z")
[%BahnEx.Train{boardId: 8010085, dateTime: #DateTime<2017-08-23 19:35:00Z>,
detailsId: "304116%2F104694%2F528716%2F162986%2F80%3fstation_evaId%3D8010085",
name: "ICE 1653", origin: "Frankfurt(M) Flughafen Fernbf", stopId: 8010085,
stopName: "Dresden Hbf", track: "3", type: "ICE"},
%BahnEx.Train{boardId: 8010085, dateTime: #DateTime<2017-08-23 20:36:00Z>,
detailsId: "521202%2F179326%2F919084%2F285808%2F80%3fstation_evaId%3D8010085",
name: "IC 2047", origin: "Dortmund Hbf", stopId: 8010085,
stopName: "Dresden Hbf", track: "1", type: "IC"}]
Get the journey information for `EC 171` from Dresden to Prague:
iex(1)> BahnEx.journey_details("475620%252F175342%252F176320%252F70380%252F80%253fstation_evaId%253D8010085")
https://api.deutschebahn.com/fahrplan-plus/v1/journeyDetails/475620%252F175342%252F176320%252F70380%252F80%253fstation_evaId%253D8010085
[%BahnEx.TrainLoc{arrTime: nil, depTime: ~T[07:03:00], lat: "52.525589",
lon: "13.369549", operator: "DPN", stopId: 8098160,
stopName: "Berlin Hbf (tief)", train: "EC 171", type: "EC"},
%BahnEx.TrainLoc{arrTime: ~T[07:08:00], depTime: ~T[07:10:00],
lat: "52.475043", lon: "13.365315", operator: "DPN", stopId: 8011113,
stopName: "Berlin Südkreuz", train: "EC 171", type: "EC"}]
## Issues
Please use the [issue traker at github](https://github.com/pfitz/bahn_ex/issues) to file issues. If you could I really like to
have a pull request.
## Contribution
Feel free to make a pull request.
## License
BahnEx is licensed under the MIT license.