diff --git a/ghost-upload/src/main.rs b/ghost-upload/src/main.rs index 90531ce..2a663d5 100644 --- a/ghost-upload/src/main.rs +++ b/ghost-upload/src/main.rs @@ -228,10 +228,47 @@ async fn get_existing_post_id(slug: &str, token: &str) -> Option { } async fn fetch_feed(url: &str) -> Vec { - let content = reqwest::get(url).await.unwrap().text().await.unwrap(); - - let feed = parser::parse(content.as_bytes()).unwrap(); + println!("Fetching RSS feed from: {}", url); + + let response = reqwest::get(url).await; + let response = match response { + Ok(resp) => resp, + Err(e) => { + println!("Failed to fetch RSS feed: {}", e); + return vec![]; + } + }; + + if !response.status().is_success() { + println!("RSS feed request failed with status: {}", response.status()); + return vec![]; + } + + let content = match response.text().await { + Ok(text) => text, + Err(e) => { + println!("Failed to read RSS feed content: {}", e); + return vec![]; + } + }; + + if content.trim().is_empty() { + println!("RSS feed content is empty"); + return vec![]; + } + + println!("RSS feed content preview: {}", &content[..content.len().min(200)]); + + let feed = match parser::parse(content.as_bytes()) { + Ok(f) => f, + Err(e) => { + println!("Failed to parse RSS feed: {:?}", e); + println!("Feed content starts with: {}", &content[..content.len().min(500)]); + return vec![]; + } + }; + println!("Successfully parsed RSS feed with {} entries", feed.entries.len()); feed.entries } @@ -328,6 +365,13 @@ async fn main() { // Prepare the post data let entries = fetch_feed(feed).await; + + if entries.is_empty() { + println!("No entries found in RSS feed or feed parsing failed. Exiting."); + return; + } + + println!("Processing {} entries from RSS feed", entries.len()); let post_exists_futures = entries.into_iter().map(|entry| { let entry_clone = entry.clone();