43个版本 (21个稳定版)
2.0.8 | 2024年5月11日 |
---|---|
2.0.7 | 2024年1月13日 |
2.0.6 | 2023年8月12日 |
2.0.5 | 2023年7月26日 |
0.0.1 | 2015年2月12日 |
#28 在 解析器实现
每月31,894 次下载
用于 104 个crate(86个直接使用)
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。
文档
用法
将依赖项添加到您的 Cargo.toml
。
[dependencies]
rss = "2.0"
读取
任何实现了 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 crate。
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许可证,版本2.0,(LICENSE-APACHE或https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT或http://opensource.org/licenses/MIT)
任选。
依赖项
~5.5MB
~157K SLoC