#transport #api-wrapper #api-bindings #munich #munchen #opnv

mvg

慕尼黑公共交通系统的时刻表信息和其他数据查询的 API 封装器

3 个版本

0.1.2 2024年2月24日
0.1.1 2024年2月22日
0.1.0 2024年2月22日

#1481 in 网页编程

Download history 14/week @ 2024-03-10 1/week @ 2024-03-17 23/week @ 2024-03-31

86 每月下载量

MIT 许可证

12KB
114 代码行

关于

此 crate 提供了一个 Rust API,用于与未记录的 MVG (Münchner Verkehrsgesellschaft) API 进行通信。

请参阅下面的示例部分,该部分展示了如何查询慕尼黑及周边地区的公共交通时刻表信息等。

由于在 MVG 开发者网站 上找不到有关官方 API 的信息,因此归功于 此 Python 项目,它记录了一些可用的端点。

目前,这还是一个正在进行的工程项目,因为只实现了“成功路径”解决方案,该方案基本上只记录了 API 端点。

免责声明

这不是一个官方项目。请参考官方 MVG 网站上的 版权声明,并尊重其中的版权部分,该部分指出

[...] 我们的系统用于直接与客户互动。第三方处理我们的内容或数据需要我们明确的同意。 未经我们明确的同意,仅允许在私人、非商业用途下适度使用。 任何形式的数据挖掘都不属于适度使用 [...]

示例

#[tokio::main]
async fn main() {
    // prints
    // "Starnberg Nord"
    // "P+R Starnberg Nord"
    // "B+R Starnberg-Nord 02 (Hans-Zellner-Weg)"
    let locations = mvg::locations("Starnberg Nord").await.unwrap();
    for l in locations.iter().take(3) {
        println!("{:?}", l.name.as_ref().unwrap());
    }

    // prints e.g.
    // SBAHN S6 Tutzing - 20:51:00
    // SBAHN S6 Ostbahnhof - 21:01:00
    // SBAHN S6 Tutzing - 21:04:00
    let starnberg_nord_gid = locations.first().unwrap().global_id.as_ref().unwrap();
    mvg::departures(starnberg_nord_gid)
        .await
        .unwrap()
        .iter()
        .take(3)
        .for_each(|d| {
            println!(
                "{} {} {} - {}",
                d.transport_type.as_ref().unwrap(),
                d.label.as_ref().unwrap(),
                d.destination.as_ref().unwrap(),
                ts_to_hms(d.realtime_departure_time.unwrap() / 1000)
            )
        });

    // prints
    // Marienplatz (Theatinerstraße) - 142 meters
    // Marienplatz - 189 meters
    // Marienplatz (Rindermarkt) - 338 meters
    let frauenkirche = (48.138611, 11.573889);
    mvg::nearby_locations(frauenkirche.0, frauenkirche.1)
        .await
        .unwrap()
        .iter()
        .take(3)
        .for_each(|l| {
            println!(
                "{} - {} meters",
                l.name.as_ref().unwrap(),
                l.distance_in_meters.unwrap(),
            )
        });

    // prints
    // Karlsplatz (Stachus) - (48.13951, 11.56613)
    // Marienplatz - (48.13725, 11.57542)
    // Isartor - (48.13364, 11.58303)
    let stations = mvg::stations().await.unwrap();
    stations.iter().take(3).for_each(|s| {
        println!(
            "{} - ({}, {})",
            s.name.as_ref().unwrap(),
            s.latitude.unwrap(),
            s.longitude.unwrap()
        )
    });

    // prints
    // de:09162:1
    // de:09162:2
    // de:09162:3
    let station_global_ids = mvg::station_global_ids().await.unwrap();
    station_global_ids
        .iter()
        .take(3)
        .for_each(|id| println!("{id}"));

    // prints
    // S1 - SBAHN
    // S2 - SBAHN
    // S3 - SBAHN
    let lines = mvg::lines().await.unwrap();
    lines.iter().take(3).for_each(|l| {
        println!(
            "{} - {}",
            l.name.as_ref().unwrap(),
            l.product.as_ref().unwrap()
        )
    });
}

依赖项

~3–16MB
~232K SLoC