Make titles optional on feeds and entries

This commit is contained in:
2023-05-17 23:10:23 -04:00
parent bf40b803a9
commit 9059894021
6 changed files with 31 additions and 24 deletions

View File

@@ -1,7 +1,7 @@
use feed_rs::parser;
use reqwest::Client;
use sqlx::PgPool;
use tracing::info;
use tracing::{info, warn};
use crate::models::feed::get_feeds;
use crate::models::entry::{upsert_entries, CreateEntry};
@@ -16,18 +16,17 @@ pub async fn crawl(pool: &PgPool) -> anyhow::Result<()> {
let parsed_feed = parser::parse(&bytes[..])?;
let mut payload = Vec::with_capacity(parsed_feed.entries.len());
for entry in parsed_feed.entries {
let entry = CreateEntry {
title: entry
.title
.map_or_else(|| "No title".to_string(), |t| t.content),
url: entry
.links
.get(0)
.map_or_else(|| "https://example.com".to_string(), |l| l.href.clone()),
description: entry.summary.map(|s| s.content),
feed_id: feed.id,
};
payload.push(entry);
if let Some(link) = entry.links.get(0) {
let entry = CreateEntry {
title: entry.title.map(|t| t.content),
url: link.href.clone(),
description: entry.summary.map(|s| s.content),
feed_id: feed.id,
};
payload.push(entry);
} else {
warn!("Feed entry has no links: {:?}", entry);
}
}
let entries = upsert_entries(pool, payload).await?;
info!("Created {} entries for feed {}", entries.len(), feed.id);