#rss #feed #parser

rss-for-mikan

针对 Mikan 项目修改的 rust-syndication/rss

2 个版本 (1 个稳定版)

2.0.4 2024 年 1 月 22 日

#760解析器实现


用于 blooming

MIT/Apache

215KB
3.5K SLoC

rss

Build status Codecov crates.io Status Docs

一个用于反序列化和序列化 RSS 网络内容聚合格式的库。

支持的版本

支持从以下 RSS 版本读取

  • RSS 0.90
  • RSS 0.91
  • RSS 0.92
  • RSS 1.0
  • RSS 2.0
  • RSS 2.0 与 Mikan 补丁(在 item 中添加了额外的 torrent 字段)

写入支持仅限于 RSS 2.0。

文档

使用方法

将依赖项添加到您的 Cargo.toml

[dependencies]
rss = "2.0"

如果您想使用 Mikan 补丁,请向您的 Cargo.toml 添加额外的补丁。

[patch.crates-io]
rss = { git = "https://github.com/RinChanNOWWW/rss", branch = "patch-mikan" }

读取

任何实现了 BufRead 特性的对象都可以读取通道。

从文件读取

use std::fs::File;
use std::io::BufReader;
use rss::Channel;

let file = File::open("example.xml").unwrap();
let channel = Channel::read_from(BufReader::new(file)).unwrap();

从缓冲区读取

注意:此示例需要 reqwest 包。

use std::error::Error;
use rss::Channel;

async fn example_feed() -> Result<Channel, Box<dyn Error>> {
    let content = reqwest::get("http://example.com/feed.xml")
        .await?
        .bytes()
        .await?;
    let channel = Channel::read_from(&content[..])?;
    Ok(channel)
}

写入

任何实现了 Write 特性的对象都可以写入通道,或者可以使用 ToString 特性转换为 XML 字符串。

注意:写入通道不会对 XML 实体进行转义。

use rss::Channel;

let channel = Channel::default();
channel.write_to(::std::io::sink()).unwrap(); // // write to the channel to a writer
let string = channel.to_string(); // convert the channel to a string

创建

提供了构建器方法来协助创建通道。

注意:这需要 builders 功能,该功能默认启用。

use rss::ChannelBuilder;

let channel = ChannelBuilder::default()
    .title("Channel Title")
    .link("http://example.com")
    .description("An RSS feed.")
    .build()
    .unwrap();

验证

提供了验证方法来验证通道内容是否符合 RSS 规范。

注意:这需要启用 validation 功能。

use rss::Channel;
use rss::validation::Validate;

let channel = Channel::default();
channel.validate().unwrap();

扩展

具有非默认命名空间的元素将被视为扩展。扩展存储在 Channel.extensionsItem.extensions

为了方便起见,Dublin CoreSyndicationiTunes 扩展已提取到结构体中,并存储在通道和项目属性上。

无效的源

为了尽可能解析无效源,rss 将默认将 RSS 2.0 规范中声明为“必需”的元素设置为空字符串。

许可

许可协议

任选其一。

依赖项

~5.5MB
~158K SLoC