16 个版本

0.6.0 2022年6月6日
0.5.1 2021年9月28日
0.5.0-beta2021年1月31日
0.4.0 2020年1月22日
0.3.0-async-preview-12019年7月30日

#801网页编程

Download history 6/week @ 2024-03-11 35/week @ 2024-04-01

58 每月下载量

MIT 许可证

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