BMS 难度表数据获取与解析库
使用 Rust 实现的 BMS 难度表数据获取与解析库。支持从网页或头部 JSON 构建完整数据结构,覆盖表头、课程、奖杯与谱面条目等。
功能特性
- 从 HTML
<meta name="bmstable">提取头部 JSON 地址(启用scraper特性) - 解析表头 JSON 为
BmsTableHeader,未识别字段保留在extra - 解析谱面数据为
BmsTableData,兼容数组与{ charts: [...] }两种格式 - 将课程中的
md5/sha256列表自动转换为ChartItem - 一站式网络获取 API(启用
reqwest特性)
默认启用 reqwest 特性;如需 HTML 解析,请启用 scraper 特性(reqwest 特性已包含 scraper)。
快速开始
use Result;
use fetch_bms_table;
async
项目结构
bms-table-rs/
├── Cargo.toml
├── src/
│ ├── lib.rs # 核心数据结构与crate级文档
│ ├── fetch.rs # HTML解析与响应解析(需scraper特性)
│ └── fetch/reqwest.rs # 网络获取接口(默认启用reqwest特性)
├── examples/
│ ├── demo.rs # 单表获取与展示
│ └── multi_fetch.rs # 并发获取多个难度表
└── tests/ # 单元测试
API 概览
BmsTable:顶层数据结构,包含header与dataBmsTableHeader:表头元数据;未识别字段保留在extraBmsTableData:谱面数据数组CourseInfo:课程信息,支持md5/sha256列表自动转换为谱面ChartItem:谱面条目,空字符串在反序列化时自动转换为NoneTrophy:奖杯要求(最大 miss 率、最低得分率)fetch::reqwest::fetch_bms_table(url):从网页或头部 JSON 源拉取并解析完整表fetch::get_web_header_json_value(s):将响应字符串解析为头部 JSON 或其 URLfetch::extract_bmstable_url(html):从 HTML 中提取 bmstable 头部地址
特性说明
reqwest:网络获取接口(默认启用)scraper:HTML 解析与头部地址提取
最低支持的 Rust 版本
rustc 1.78.0