#war #web-api #starcraft #response #region #brood

bw-web-api-rs

StarCraft Brood War API 的 Rust 库

3 个版本

0.1.2 2024年6月26日
0.1.1 2024年6月26日
0.1.0 2024年6月26日

637网页编程

每月40次下载

MIT 许可证

40KB
957 代码行

BW Web API (rust 版本)

crates.io License

用于与 StarCraft Brood War API 交互的 Rust 库。

这是 TypeScript 编写的 bw-web-api 库的移植版本。您可以在那里找到更多有关端点文档、预期响应形状等信息。

并非每个端点都可用,这仍然是一个正在进行中的项目。然而,最有用的端点已实现并可用(例如 aurora_profile_by_toon)。

安装

cargoadd bw-web-api-rs

用法

此库使用了 async/await,因此您需要使用您首选的异步运行时,例如 tokio

use bw_api::{AuroraProfileByToonV2FieldMask, BWClient, Region, SCApi};

#[tokio::main]
async fn main() {
    let client = BWClient::new("https://127.0.0.1/:12345").unwrap();
    let api = SCApi::new(client).unwrap();

    let response = api
        .aurora_profile_by_toon(
            "By.SnOw1",
            Region::Korea,
            AuroraProfileByToonV2FieldMask::ScrProfile,
        )
        .await;

    match response {
        Ok(profile) => println!("{:?}", profile),
        Err(e) => eprintln!("Error: {}", e),
    }
}

您可以在此处找到端点的粗略文档。

StarCraft 端口

StarCraft 为网页 API 打开的端口不一定相同。您可以通过以下方式在 Windows 上确定端口

(作为管理员)

(Get-NetTCPConnection -OwningProcess (Get-Process -Name StarCraft | Select-Object -ExpandProperty Id) | Where-Object {$_.State -eq "Listen"} | Sort-Object -Property LocalPort | Select-Object -First 1).LocalPort

在 Rust 中运行此命令的示例

use std::process::Command;
use std::str;

fn get_starcraft_port() -> Result<String, Box<dyn std::error::Error>> {
    let output = Command::new("powershell")
        .arg("-Command")
        .arg("(Get-NetTCPConnection -OwningProcess (Get-Process -Name StarCraft | Select-Object -ExpandProperty Id) | Where-Object { $_.State -eq 'Listen' } | Sort-Object -Property LocalPort | Select-Object -First 1).LocalPort")
        .output()?;

    if output.status.success() {
        let port = str::from_utf8(&output.stdout)?.trim().to_string();
        Ok(port)
    } else {
        let error_message = str::from_utf8(&output.stderr)?;
        Err(Box::from(error_message))
    }
}

依赖项

~4–15MB
~208K SLoC