3 个版本

0.1.4 2024年4月9日
0.1.3 2023年7月21日
0.1.2 2023年6月22日
0.1.1 2023年6月22日
0.1.0 2023年6月22日

#api-version 中排名 34

Download history 170/week @ 2024-04-08

每月下载 229

MIT 许可证

74KB
2K SLoC

TFL API 包装器

A rust crate 用于使用 伦敦交通(TFL)API

注意:目前仅支持线路API。其他API正在开发中

安装

使用 cargo,将以下内容添加到您的项目 Cargo.toml

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

用法

从 TFL API 站点获取密钥

  1. 如果您还没有账户,请注册 TFL API 站点
  2. 访问 产品 链接,为 500 请求每分钟 创建新的订阅(允许每分钟500次请求)。
  3. 接下来,访问您的 个人资料,滚动到您的订阅的 主密钥 部分,点击 显示 并复制值。您可以使用 主密钥辅助密钥 中的任何一个。

使用 crate

设置 APP_KEY 环境变量。

使用以下方式实例化 Client

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

在这里 APP_KEY 可以是 主密钥辅助密钥

示例

获取 API 版本

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();
}

列出有效模式

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

    let client = Client::new(env::var("APP_KEY").unwrap().into());
    let valid_modes = client.list_modes().fetch().await.unwrap();
}

列出严重类型

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

    let client = Client::new(env::var("APP_KEY").unwrap().into());
    let severity_types = client.list_severity_types().fetch().await.unwrap();
}

按模式列出路线

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

    let client = Client::new(env::var("APP_KEY").unwrap().into());
    let modes: Vec<models::Mode> = vec![models::Mode::Bus, models::Mode::Tube];
    let routes = client
        .list_lines_routes_by_modes()
        .mode(modes)
        .fetch()
        .await
        .unwrap();
}

按线路获取到达预测

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();
}

按模式获取中断信息

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

    let client = Client::new(env::var("APP_KEY").unwrap().into());
    let modes: Vec<models::Mode> = vec![models::Mode::Bus, models::Mode::Tube];
    let disruptions = client
        .disruptions_by_mode()
        .mode(modes)
        .fetch()
        .await
        .unwrap();
}

测试

您可以通过运行以下命令来运行测试

APP_KEY=hjdhajsdas cargo test

开发者

由于此库维护一个 LineID 枚举,我们有一个工具可以将其与API的有效路线列表进行比较。它报告 LineID 的状态,列出哪些线路缺失,哪些有不匹配的 to_string() 映射,以及哪些不再使用。

运行

APP_KEY=hjdhajsdas cargo run --bin line-id-check

实现的API

  • 版本 - 显示 API 版本
  • 线路
    • 获取所有线路的有效路线,包括每条路线的起始站和终点站的名称和ID。
    • 获取给定线路ID的所有有效路线,包括每条路线的起始站和终点站的名称和ID。
    • 获取给定模式的给定线路的所有中断。
    • 获取给定线路ID的中断。
    • 根据给定的站点获取指定线路ID的到达预测列表
    • 获取服务给定线路ID的站点列表
    • 获取有效的中断类别列表
    • 获取有效的模式列表
    • 获取用于过滤的有效ServiceTypes列表
    • 获取有效的严重程度代码列表
    • 获取给定模式的所有线路及其有效路线,包括每条路线的起点和终点站名称及ID
    • 获取给定线路ID的所有有效路线,包括每条路线上的停靠站序列。
    • 获取与指定线路ID匹配的线路
    • 获取服务给定模式的线路
    • 获取所有给定严重程度的线路状态
    • 获取在提供日期期间给定线路ID的线路状态,例如小延误
    • 获取给定模式的所有线路的状态
    • 获取给定线路ID的状态,例如小延误
    • 获取指定站点的线路时刻表
    • 获取指定站点的线路时刻表,带有指定的目的地
    • 搜索与查询字符串匹配的线路或路线

限制条件

  • 目前,为线路创建的枚举类型不包含以数字字符开头的公交车(例如101)。

参考文献/致谢

  1. 现有的tfl包装器
    1. tfl-api-wrapper - TFL API的NodeJS包装器,使用TypeScript编写。
    2. tfl-api-wrapper-py - TFL API的Python包装器
    3. go-tfl - TFL API的Go客户端
  2. Adzuna-rs - Adzuna API现有包装器实现

依赖关系

~6–18MB
~275K SLoC