将远程 BMS 难度表镜像为本地的静态 JSON 文件集。通过配置多个索引端点与直连表页 URL,本工具并发抓取并生成可归档的目录结构,适合离线浏览、备份或下游处理。
- 抓取并合并多个表索引端点(
table_index),原始索引 JSON 同步保存至indexes/。 - 直接添加额外表页 URL(
add_table_url),无需索引端点即可拉取。 - 禁用指定表页 URL(
disable_table_url),从最终抓取列表中移除。 - 为每个表生成目录:
tables/<表名经清洗>/,包含:header.json:原始 header JSON,自动将data_url替换为data.json。data.json:原始数据 JSON。info.json:表的基本信息(源索引中的name/url/symbol等)。
- 自定义日志器:控制台输出 + 将
warn级别写入根目录warnings.log。 - 目录名自动清洗,兼容 Windows 文件系统的特殊字符与结尾规则。
- 根目录文件:
.gitignore,Cargo.toml,Cargo.lock,LICENSE,tables.toml- 目录:
.github/workflows/,indexes/,src/,tables/
- 生成产物:
indexes/<索引名>.jsontables/<清洗后表名>/header.jsontables/<清洗后表名>/data.jsontables/<清洗后表名>/info.json
- 安装 Rust(支持 edition 2024),推荐使用
rustup:- Windows/macOS/Linux 均可运行;需要可用的网络环境以访问表源。
- 配置
tables.toml:table_index = [ { name = "DARKSABUN", url = "https://script.google.com/macros/s/AKfycbzaQbcI9UZDcDlSHHl2NHilhmePrNrwxRdOFkmIXsfnbfksKKmAB3V65WZ8jPWU-7E/exec?table=tablelist" }, ] add_table_url = [ # 在此添加表页 URL,例如: # "https://example.com/my-bms-table" ] disable_table_url = [ # 在此禁用某些表页 URL,例如: # "https://example.com/old-table" ]
- 运行:
- 开发模式:
cargo run - 发布模式:
cargo run --release
- 开发模式:
运行后将在根目录生成 indexes/ 与 tables/。若网络响应较慢或表数量较多,首次运行可能耗时较长。
- 默认日志级别为
info,可通过环境变量调整:- Windows PowerShell:
$env:RUST_LOG = "warn"; cargo run --release - Bash/zsh:
RUST_LOG=warn cargo run --release
- Windows PowerShell:
warn级别日志会额外写入根目录warnings.log,便于筛查抓取失败或数据异常。
src/filesystem.rs 中的 sanitize_filename 将:
- 将非法字符(
<>:"/\|?*)替换为对应全角字符,如:→:。 - 将控制字符(ASCII ≤ 31)折叠为单个下划线
_。 - 若目录名以
.或空格结尾,替换为全角.或,避免 Windows 封禁的结尾。
src/main.rs:入口;加载配置、抓取索引、合并 URL、并发拉取每张表,输出至indexes/与tables/。src/config.rs:定义与解析tables.toml配置(TableIndexSource/TableConfig)。src/filesystem.rs:目录名清洗工具,保证跨平台文件系统兼容。src/logger.rs:自定义日志器,控制台输出 +warn级别文件记录。
- 主要依赖:
bms-table,reqwest,tokio,env_logger,log,serde,toml,anyhow,serde_json。 - 并发:使用
tokio::task::JoinSet并发抓取各表;失败不阻断其他任务,warn级别记录错误信息。
- 抓取失败/超时:检查网络环境或代理;失败会在控制台与
warnings.log中出现。 - 重复运行:同名目录将被覆盖写入(文件用
tokio::fs::write),如需保留旧数据可手动备份。 - 规模较大:
tables/目录下可能包含大量难度表,建议在发布模式运行以提升性能。
本项目使用 Apache-2.0 许可证。详见根目录 LICENSE 文件。
bms-tablecrate 提供了完整的表索引与数据抓取能力。- 所有难度表与索引的版权归各自作者/站点所有,本工具仅提供镜像与归档用途。