Skip feed entries which can't be read but continue

This commit is contained in:
2025-04-26 11:43:13 +02:00
parent 7f713330d7
commit e2c0a9b4c2

View File

@@ -7,7 +7,10 @@ use clap::{
};
use feed_rs::{
parser::parse,
model::Feed,
model::{
Entry,
Feed,
},
};
use reqwest::{
@@ -59,7 +62,6 @@ fn read_feed_file(path: &str) -> Result<FeedFile> {
continue;
}
let url = Url::parse(&line)?;
println!("{}", url);
urls.push(url);
}
@@ -70,25 +72,48 @@ fn read_feed_file(path: &str) -> Result<FeedFile> {
})
}
fn make_feed_item(entry: Entry) -> Result<FeedItem> {
Ok(FeedItem {
link: entry.links
.first()
.context("Unable to retrieve link from feed entry")?
.href
.clone(),
title: entry.title
.context("Unable to retrieve title from feed entry")?
.content
.clone(),
time: match entry.published {
Some(time) => Some(time),
None => entry.updated,
},
})
}
fn main() -> Result<()> {
let cli = Cli::parse();
let mut feed_items = Vec::new();
let feed_file = read_feed_file(&cli.feeds)?;
let mut items: Vec<FeedItem> = Vec::new();
for feed_url in feed_file.urls {
feed_items.extend(fetch_feed(feed_url)?.entries);
println!("Loading feed {}", feed_url);
let feed_entries = fetch_feed(feed_url)?.entries;
for entry in feed_entries {
match make_feed_item(entry) {
Ok(item) => {
items.push(item);
},
Err(e) => {
println!("\t{}, skipping", e);
},
}
}
}
let mut items: Vec<FeedItem> = feed_items.into_iter().map(|item| FeedItem {
link: item.links.first().unwrap().href.clone(),
title: item.title.unwrap().content.clone(),
time: match item.published {
Some(time) => Some(time),
None => item.updated,
},
}).collect();
items.sort_by(|a, b| a.time.unwrap_or(chrono::DateTime::UNIX_EPOCH).cmp(&b.time.unwrap_or(chrono::DateTime::UNIX_EPOCH)).reverse());
let mut out = String::new();