pub struct BmsTableParser { /* private fields */ }Expand description
BMS表格解析器
提供从BMS表格网站获取和解析数据的功能。 使用HTTP客户端来获取HTML和JSON数据,并提供完整的解析流程。
Implementations§
Source§impl BmsTableParser
impl BmsTableParser
Sourcepub async fn extract_bmstable_url(&self, html_url: &str) -> Result<String>
pub async fn extract_bmstable_url(&self, html_url: &str) -> Result<String>
从HTML页面中提取bmstable字段
解析HTML页面的head标签,查找包含bmstable字段的meta标签, 提取指向JSON配置文件的URL。
§参数
html_url- HTML页面的URL
§返回值
返回提取到的bmstable URL字符串,如果未找到则返回错误。
§错误
如果无法获取HTML页面、解析失败或未找到bmstable字段,将返回错误。
§示例
use bms_table::fetch::BmsTableParser;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let parser = BmsTableParser::new();
let url = parser.extract_bmstable_url("https://example.com/table.html").await?;
println!("bmstable URL: {}", url);
Ok(())
}Sourcepub async fn get_table_header(&self, header_url: &str) -> Result<BmsTableHeader>
pub async fn get_table_header(&self, header_url: &str) -> Result<BmsTableHeader>
获取并解析BMS表格头信息
从指定的URL获取JSON格式的BMS表格头信息,并解析为结构体。
§参数
header_url- 表格头信息JSON文件的URL
§返回值
返回解析后的BmsTableHeader结构体,包含表格名称、符号、课程信息等。
§错误
如果无法获取JSON文件或解析失败,将返回错误。
§示例
use bms_table::fetch::BmsTableParser;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let parser = BmsTableParser::new();
let header = parser.get_table_header("https://example.com/header.json").await?;
println!("表格名称: {}", header.name);
Ok(())
}Sourcepub async fn get_score_data(&self, score_url: &str) -> Result<Vec<ScoreItem>>
pub async fn get_score_data(&self, score_url: &str) -> Result<Vec<ScoreItem>>
获取并解析分数数据
从指定的URL获取JSON格式的分数数据,并解析为结构体数组。
§参数
score_url- 分数数据JSON文件的URL
§返回值
返回解析后的ScoreItem数组,包含所有BMS文件的分数数据。
§错误
如果无法获取JSON文件或解析失败,将返回错误。
§示例
use bms_table::fetch::BmsTableParser;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let parser = BmsTableParser::new();
let scores = parser.get_score_data("https://example.com/score.json").await?;
println!("分数数据数量: {}", scores.len());
Ok(())
}Sourcepub async fn fetch_complete_table(
&self,
base_url: &str,
) -> Result<(BmsTableHeader, Vec<ScoreItem>)>
pub async fn fetch_complete_table( &self, base_url: &str, ) -> Result<(BmsTableHeader, Vec<ScoreItem>)>
完整的BMS表格数据获取流程
执行完整的BMS表格数据获取流程:
- 从HTML页面提取bmstable字段
- 获取并解析表格头信息
- 获取并解析分数数据
§参数
base_url- BMS表格HTML页面的URL
§返回值
返回一个元组,包含表格头信息和分数数据数组。
§错误
如果在任何步骤中发生错误(网络错误、解析错误等),将返回错误。
§示例
use bms_table::fetch::BmsTableParser;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let parser = BmsTableParser::new();
let (header, scores) = parser.fetch_complete_table("https://example.com/table.html").await?;
println!("表格名称: {}", header.name);
println!("分数数据数量: {}", scores.len());
// 显示第一个分数数据
if let Some(first_score) = scores.first() {
if let Some(title) = &first_score.title {
println!("第一个歌曲: {}", title);
}
}
Ok(())
}Trait Implementations§
Auto Trait Implementations§
impl Freeze for BmsTableParser
impl !RefUnwindSafe for BmsTableParser
impl Send for BmsTableParser
impl Sync for BmsTableParser
impl Unpin for BmsTableParser
impl !UnwindSafe for BmsTableParser
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more