Expand description
BMS 难度表获取与解析
提供从网页或头部 JSON 构建完整的 BMS 难度表数据结构,涵盖表头、课程、奖杯与谱面条目。 结合特性开关实现网络抓取与 HTML 解析,适用于 CLI 工具、服务端程序或数据处理流水线。
§功能一览
- 解析表头 JSON,未识别字段保留在
extra以保证向前兼容; - 解析谱面数据,兼容纯数组与
{ charts: [...] }两种格式; - 课程支持将
md5/sha256列表自动转换为谱面条目,缺失level时补为 “0”; - 从 HTML 的
<meta name="bmstable">提取头部 JSON 地址; - 一站式网络获取 API(网页 → 头部 JSON → 谱面数据);
- 支持获取难度表列表。
§特性开关
serde:启用类型的序列化/反序列化支持(默认启用)。scraper:启用 HTML 解析与 bmstable 头部地址提取(默认启用;reqwest隐式启用该特性)。reqwest:启用网络获取实现(默认启用;需要tokio运行时)。
§快速上手(网络获取)
use bms_table::fetch::reqwest::{fetch_table, make_lenient_client};
let client = make_lenient_client()?;
let table = fetch_table(&client, "https://stellabms.xyz/sl/table.html").await?;
println!("{}: {} charts", table.header.name, table.data.charts.len());§无网络使用(直接解析 JSON)
use bms_table::{BmsTable, BmsTableHeader, BmsTableData};
let header_json = r#"{ "name": "Test", "symbol": "t", "data_url": "charts.json", "course": [], "level_order": [] }"#;
let data_json = r#"{ "charts": [] }"#;
let header: BmsTableHeader = serde_json::from_str(header_json)?;
let data: BmsTableData = serde_json::from_str(data_json)?;
let _table = BmsTable { header, data };§获取难度表列表示例
use bms_table::fetch::reqwest::{fetch_table_list, make_lenient_client};
let client = make_lenient_client()?;
let indexes = fetch_table_list(&client, "https://example.com/table_index.json").await?;
assert!(!indexes.is_empty());提示:启用 reqwest 特性将隐式启用 scraper,以支持从网页内容中定位 bmstable 头部地址。
Modules§
Structs§
- BmsTable
- 顶层 BMS 难度表数据结构。
- BmsTable
Data - BMS 表数据。
- BmsTable
Header - BMS 表头信息。
- BmsTable
Info - BMS 难度表列表条目。
- BmsTable
List - BMS 难度表列表包装类型。
- BmsTable
Raw - 完整的原始 JSON 字符串集合。
- Chart
Item - 谱面数据项。
- Course
Info - 课程信息。
- Trophy
- 奖杯信息。