Crate bms_table

Crate bms_table 

Source
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;

let table = fetch_table("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_index;
let indexes = fetch_table_index("https://example.com/table_index.json").await?;
assert!(!indexes.is_empty());

提示:启用 reqwest 特性将隐式启用 scraper,以支持从网页内容中定位 bmstable 头部地址。

Modules§

deserde
反序列化实现模块
fetchscraper
数据获取与 HTML 解析辅助模块

Structs§

BmsTable
顶层 BMS 难度表数据结构。
BmsTableData
BMS 表数据。
BmsTableHeader
BMS 表头信息。
BmsTableIndex
BMS 表索引列表包装类型。
BmsTableIndexItem
BMS 表索引条目。
BmsTableRaw
完整的原始 JSON 字符串集合。
ChartItem
谱面数据项。
CourseInfo
课程信息。
Trophy
奖杯信息。