2 个版本 (1 个稳定版)
2.0.4 | 2024 年 1 月 22 日 |
---|
#760 在 解析器实现
用于 blooming
215KB
3.5K SLoC
rss
一个用于反序列化和序列化 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.extensions
和 Item.extensions
。
为了方便起见,Dublin Core、Syndication 和 iTunes 扩展已提取到结构体中,并存储在通道和项目属性上。
无效的源
为了尽可能解析无效源,rss
将默认将 RSS 2.0 规范中声明为“必需”的元素设置为空字符串。
许可
许可协议
- Apache License, Version 2.0,(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 协议 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
依赖项
~5.5MB
~158K SLoC