2个不稳定版本
0.2.0 | 2023年7月31日 |
---|---|
0.1.0 | 2023年7月15日 |
#1587 in 解析器实现
68KB
1.5K SLoC
sitemapo
还可以查看其他 xwde
项目 这里。
Rust编程语言中Sitemap(或URL包含)协议的实现,支持txt
& xml
格式,以及video
、image
、news
扩展(根据谷歌规范)。
功能
extension
以启用所有XML sitemap扩展。 默认启用。tokio
以启用异步解析器 & 构建器。
示例
- 自动解析器:
AutoParser
。
#[derive(Debug, thiserror::Error)]
enum CustomError {
// ..
#[error("sitemap error: {0}")]
Sitemap(#[from] sitemapo::Error),
//..
}
fn main() -> Result<(), CustomError> {
type SyncReader = std::io::BufReader<std::io::Cursor<Vec<u8>>>;
fn fetch(_: url::Url) -> Result<SyncReader, CustomError> {
// ..
unreachable!()
}
let sitemaps = Vec::default(); // Sitemaps listed in the robots.txt file.
let mut parser = sitemapo::AutoParser::new_sync(&sitemaps, fetch);
while let Some(_record) = parser.read_sync()? {
// ..
}
Ok(())
}
- 解析器:
TxtParser
&XmlParser
。
use sitemapo::{
parse::{Parser, TxtParser},
Error,
};
fn main() -> Result<(), Error> {
let buf = "https://example.com/file1.html".as_bytes();
let mut parser = TxtParser::new(buf)?;
let _rec = parser.read()?;
let _buf = parser.close()?;
Ok(())
}
- 构建器:
TxtBuilder
&XmlBuilder
。
use sitemapo::{
build::{Builder, XmlBuilder},
record::EntryRecord,
Error,
};
fn main() -> Result<(), Error> {
let buf = Vec::new();
let rec = EntryRecord::new("https://example.com/".try_into()?);
let mut builder = XmlBuilder::new(buf)?;
builder.write(&rec)?;
let _buf = builder.close()?;
Ok(())
}
链接
注意
- 扩展尚未实现。
AutoParser
尚不支持txt sitemap。
仓库
依赖关系
~3.5–6MB
~148K SLoC