Skip to content

API wrapper written in rust for interacting with TFL API 🦀

License

Notifications You must be signed in to change notification settings

ishantanu/tfl-rust

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TFL API Wrapper

A rust crate for using the Transport for London (TFL) API.

Note: This is currently WIP and not ready for use.

Installation

Using cargo, add this to your project's Cargo.toml:

[dependencies]
tfl-api-wrapper = "0.1.2"

Usage

Get the Keys from TFL API Portal

  1. If you don't already have an account, register on TFL API Portal.
  2. Vist the Products link and create a new subscription for 500 Requests per min (allows 500 requests per min).
  3. Next, visit your profile, scroll down to the Primary key section of your subscription, click on Show and copy the value. You can use either of Primary key or Secondary key.

Use the crate

Set the APP_KEY environment variable.

Instantiate the Client using:

use tfl_api_wrapper::{Client, RequestBuilder};
let client = Client::new(std::env::var("APP_KEY").unwrap());

Here APP_KEY could be either Primary key or Secondary key.

Example

Get the API version:

async fn it_is_version_1() {
    use tfl_api_wrapper::{Client, RequestBuilder};
    let client = Client::new(std::env::var("APP_KEY").unwrap());
    let ver = client.api_version().fetch().await.unwrap();
}

Get arrival predictions by lines

async fn get_arrivals_by_lines() {
    use tfl_api_wrapper::{Client, RequestBuilder, linemodels};
    use std::env;

    let client = Client::new(env::var("APP_KEY").unwrap().into());
    let lines: Vec<linemodels::LineID> = vec![linemodels::LineID::Bakerloo, linemodels::LineID::Jubilee];
    let arrivals = client
        .arrival_predictions_by_lines()
        .line(lines)
        .fetch()
        .await
        .unwrap();
}

Tests

You can run the tests by running:

APP_KEY=hjdhajsdas cargo test

Implemented APIs

  • Version - Shows the API version
  • Line
    • Get all valid routes for all lines, including the name and id of the originating and terminating stops for each route.
    • Get all valid routes for given line ids, including the name and id of the originating and terminating stops for each route.
    • Get disruptions for all lines of the given modes.
    • Get disruptions for the given line ids.
    • Get the list of arrival predictions for given line ids based at the given stop
    • Gets a list of the stations that serve the given line id
    • Gets a list of valid disruption categories
    • Gets a list of valid modes
    • Gets a list of valid ServiceTypes to filter on
    • Gets a list of valid severity codes
    • Gets all lines and their valid routes for given modes, including the name and id of the originating and terminating stops for each route
    • Gets all valid routes for given line id, including the sequence of stops on each route.
    • Gets lines that match the specified line ids
    • Gets lines that serve the given modes.
    • Gets the line status for all lines with a given severity

Limitations

  • Currently, the enum types created for Lines does not contain buses starting with numeric characters (e.g. 101).

References/Credits

  1. Existing tfl wrappers
    1. tfl-api-wrapper - NodeJS wrapper for TFL API, made with TypeScript.
    2. tfl-api-wrapper-py - Python wrapper for TFL API
    3. go-tfl - Go client for TFL API
  2. Adzuna-rs - For existing wrapper implementation for Adzuna API.

About

API wrapper written in rust for interacting with TFL API 🦀

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •  

Languages