#sitemap #parser #crawler #derive-debug

sitemapo

支持txt & xml格式的Sitemap.xml(或URL包含)协议的实现,以及视频、图像、新闻扩展

2个不稳定版本

0.2.0 2023年7月31日
0.1.0 2023年7月15日

#1587 in 解析器实现

MIT 许可证

68KB
1.5K SLoC

sitemapo

Build Status Crate Docs Crate Version Crate Coverage

还可以查看其他 xwde 项目 这里

Rust编程语言中Sitemap(或URL包含)协议的实现,支持txt & xml格式,以及videoimagenews扩展(根据谷歌规范)。

功能

  • 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