3 个版本
0.1.4 | 2024年4月9日 |
---|---|
0.1.3 | 2023年7月21日 |
0.1.2 | 2023年6月22日 |
0.1.1 |
|
0.1.0 |
|
在 #api-version 中排名 34
每月下载 229 次
74KB
2K SLoC
TFL API 包装器
A rust crate 用于使用 伦敦交通(TFL)API。
注意:目前仅支持线路API。其他API正在开发中
安装
使用 cargo
,将以下内容添加到您的项目 Cargo.toml
[dependencies]
tfl-api-wrapper = "0.1.3"
用法
从 TFL API 站点获取密钥
- 如果您还没有账户,请注册 TFL API 站点。
- 访问 产品 链接,为
500 请求每分钟
创建新的订阅(允许每分钟500次请求)。 - 接下来,访问您的 个人资料,滚动到您的订阅的
主密钥
部分,点击显示
并复制值。您可以使用主密钥
或辅助密钥
中的任何一个。
使用 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)。
参考文献/致谢
- 现有的tfl包装器
- tfl-api-wrapper - TFL API的NodeJS包装器,使用TypeScript编写。
- tfl-api-wrapper-py - TFL API的Python包装器
- go-tfl - TFL API的Go客户端
- Adzuna-rs - Adzuna API现有包装器实现
依赖关系
~6–18MB
~275K SLoC