Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/rust-syndication/rss
Library for serializing the RSS web content syndication format
https://github.com/rust-syndication/rss
feed parser rss rust
Last synced: 3 months ago
JSON representation
Library for serializing the RSS web content syndication format
- Host: GitHub
- URL: https://github.com/rust-syndication/rss
- Owner: rust-syndication
- License: apache-2.0
- Created: 2015-02-25T01:49:09.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2024-07-29T07:45:51.000Z (4 months ago)
- Last Synced: 2024-07-29T09:19:44.339Z (4 months ago)
- Topics: feed, parser, rss, rust
- Language: Rust
- Homepage: https://crates.io/crates/rss
- Size: 77.8 MB
- Stars: 416
- Watchers: 8
- Forks: 52
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE-APACHE
Awesome Lists containing this project
README
# rss
[![Build status](https://github.com/rust-syndication/rss/workflows/Build/badge.svg)](https://github.com/rust-syndication/rss/actions?query=branch%3Amaster)
[![Codecov](https://codecov.io/gh/rust-syndication/rss/branch/master/graph/badge.svg)](https://codecov.io/gh/rust-syndication/rss)
[![crates.io Status](https://img.shields.io/crates/v/rss.svg)](https://crates.io/crates/rss)
[![Docs](https://docs.rs/rss/badge.svg)](https://docs.rs/rss)Library for deserializing and serializing the RSS web content syndication format.
### Supported Versions
Reading from the following RSS versions is supported:
* RSS 0.90
* RSS 0.91
* RSS 0.92
* RSS 1.0
* RSS 2.0Writing support is limited to RSS 2.0.
### Documentation
- [Released](https://docs.rs/rss/)
- [Master](https://rust-syndication.github.io/rss/rss/)## Usage
Add the dependency to your `Cargo.toml`.
```toml
[dependencies]
rss = "2.0"
```## Reading
A channel can be read from any object that implements the `BufRead` trait.
### From a file
```rust
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();
```### From a buffer
**Note**: This example requires [reqwest](https://crates.io/crates/reqwest) crate.
```rust
use std::error::Error;
use rss::Channel;async fn example_feed() -> Result> {
let content = reqwest::get("http://example.com/feed.xml")
.await?
.bytes()
.await?;
let channel = Channel::read_from(&content[..])?;
Ok(channel)
}
```## Writing
A channel can be written to any object that implements the `Write` trait or converted to an XML string using the `ToString` trait.
**Note**: Writing a channel does not perform any escaping of XML entities.
```rust
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
```## Creation
Builder methods are provided to assist in the creation of channels.
**Note**: This requires the `builders` feature, which is enabled by default.
```rust
use rss::ChannelBuilder;let channel = ChannelBuilder::default()
.title("Channel Title")
.link("http://example.com")
.description("An RSS feed.")
.build()
.unwrap();
```## Validation
Validation methods are provided to validate the contents of a channel against the RSS specification.
**Note**: This requires enabling the `validation` feature.
```rust
use rss::Channel;
use rss::validation::Validate;let channel = Channel::default();
channel.validate().unwrap();
```## Extensions
Elements which have non-default namespaces will be considered extensions. Extensions are stored in `Channel.extensions` and `Item.extensions`.
For convenience, [Dublin Core](http://dublincore.org/documents/dces/), [Syndication](http://web.resource.org/rss/1.0/modules/syndication/) and [iTunes](https://help.apple.com/itc/podcasts_connect/#/itcb54353390) extensions are extracted to structs and stored in as properties on channels and items.
## Invalid Feeds
As a best effort to parse invalid feeds `rss` will default elements declared as "required" by the RSS 2.0 specification to an empty string.
## License
Licensed under either of
* Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
* MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)at your option.