16 个版本
0.6.0 | 2022年6月6日 |
---|---|
0.5.1 | 2021年9月28日 |
0.5.0-beta | 2021年1月31日 |
0.4.0 | 2020年1月22日 |
0.3.0-async-preview-1 | 2019年7月30日 |
#801 在 网页编程
58 每月下载量
120KB
1.5K SLoC
lta-rs
🚍 新加坡 LTA Datamall 异步优先 Rust 客户端。lta-rs 用于与 lta-datamall 交互
lta-rs 应用示例
Cargo.toml 配置
[dependencies]
# extra features available: blocking
lta = { version = "0.6.0" }
API 密钥配置
您可以从 此处 获取您的 API 密钥
use lta::{LTAResult, LTAClient, Client, Traffic, TrafficRequests};
#[tokio::main]
async fn main() -> LTAResult<()> {
let api_key = std::env::var("API_KEY").expect("API_KEY not found!");
let client = LTAClient::with_api_key(api_key)?;
let erp_rates = Traffic::get_erp_rates(&client, None).await?;
println!("{:?}", erp_rates);
Ok(())
}
示例
获取公交车时刻表
use lta::{LTAResult, LTAClient, Client, Bus, BusRequests};
fn get_bus_arrival() -> LTAResult<()> {
let api_key = std::env::var("API_KEY").expect("API_KEY not found!");
let client = LTAClient::with_api_key(api_key);
let arrivals = Bus::get_arrival(&client, 83139, None)?;
println!("{:?}", arrivals);
Ok(())
}
获取其他数据
// All the APIs in this library are designed to be used like this
// `lta::RequestType::get_something`
// All of them return lta::utils::LTAResult<T>
// The example below is Bus::get_bus_services()
// and Traffic::get_erp_rates()
// Do note that the API calling convention is similar across all the APIs except for
// bus::get_arrival
// Most of the APIs returns only 500 record
// If you want to get records 501 - 1000 take a look at get_erp() example
use lta::{LTAResult, LTAClient, Client, Bus, Traffic, BusRequests, TrafficRequests};
async fn bus_services() -> LTAResult<()> {
let api_key = std::env::var("API_KEY").expect("API_KEY not found!");
let client = LTAClient::with_api_key(api_key)?;
let bus_services= Bus::get_bus_services(&client, None)?;
println!("{:?}", bus_services);
Ok(())
}
async fn get_erp() -> LTAResult<()> {
let api_key = std::env::var("API_KEY").expect("API_KEY not found!");
let client = LTAClient::with_api_key(api_key)?;
let erp_rates = Traffic::get_erp_rates(&client, 500)?;
println!("{:?}", erp_rates);
Ok(())
}
自定义客户端
在某些情况下,您可能需要自定义 reqwest 客户端,因为存在某些限制。
use lta::r#async::client::LTAClient;
use lta::reqwest::ClientBuilder;
use std::time::Duration;
use lta::Client;
fn my_custom_client() -> LTAClient {
let client = ClientBuilder::new()
.no_gzip()
.connect_timeout(Duration::new(420, 0))
.build()
.unwrap();
LTAClient::new("API_KEY", client)
}
一般建议
- 重复使用
LTAClient
,因为它内部持有连接池 - 减少调用 API 的次数,查看文档中的
Update Freq
,并防止自己被列入黑名单。使用缓存机制。
获取帮助
- 您可以通过 GitHub 问题来获取帮助。我会尽力回答您的问题 😄
变更日志
变更日志可以在 此处 找到
要求
- Rust 编译器 1.56
常见问题
-
这个库正在积极开发中吗?
- 项目目前处于维护模式。不会有任何新功能。只有错误修复,小升级等。
-
有哪些可用的 API?
- 所有 API 都已实现。请查看官方 LTA 文档。
-
我从哪里获取 lta 的官方文档?
- 您可以从 此处 获取
许可证
lta-rs 根据 MIT 许可证授权(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
捐赠
对于新加坡用户,您可以使用 paylah 进行捐赠!
依赖项
~7–21MB
~342K SLoC