Add new feed url

This commit is contained in:
2023-11-10 17:17:29 +01:00
parent f9f274f6e2
commit d920f5b9b9
5 changed files with 67 additions and 9 deletions
+16
View File
@@ -6,12 +6,28 @@ use crate::{
models::feed::new_feed::NewFeed, schema::feed,
};
use super::feeds;
pub async fn add(new_feed: web::Json<NewFeedSchema>) -> HttpResponse {
let mut connection = establish_connection();
let title: String = new_feed.title.clone();
let url: String = new_feed.url.clone();
let user_id: i32 = new_feed.user_id;
let result = feeds::get_feed(&url).await;
match result {
Ok(channel) => {
log::info!("valid channel");
if channel.items.is_empty() {
return HttpResponse::ServiceUnavailable().await.unwrap();
}
}
Err(e) => {
log::error!("{:?}", e);
return HttpResponse::NotFound().await.unwrap();
}
}
let new_feed = NewFeed::new(title, url, user_id);
let insert_result = diesel::insert_into(feed::table)
+10 -3
View File
@@ -19,7 +19,8 @@ use scraper::{Html, Selector};
fn create_feed_item(item: Item, feed: &Feed, connection: &mut PgConnection) {
let item_title = item.title.clone().unwrap();
let frag = Html::parse_fragment(&item.content.clone().unwrap());
log::info!("Create feed item: {}", item_title);
let frag = Html::parse_fragment(&item.content.clone().unwrap_or_default());
let mut content = "".to_string();
let frag_clone = frag.clone();
frag.tree.into_iter().for_each(|node| {
@@ -41,13 +42,19 @@ fn create_feed_item(item: Item, feed: &Feed, connection: &mut PgConnection) {
.filter(title.eq(&item_title))
.load(connection)
.unwrap();
// todo;
if existing_item.is_empty() {
log::info!("{:?}", item.pub_date());
let mut time: NaiveDateTime = Local::now().naive_local();
if item.pub_date().is_some() {
let format_string = "%a, %d %b %Y %H:%M:%S %z";
time = NaiveDateTime::parse_from_str(item.pub_date().unwrap(), format_string).unwrap();
time = match NaiveDateTime::parse_from_str(item.pub_date().unwrap(), format_string) {
Ok(date) => date,
Err(err) => {
log::error!("could not unwrap pub date: {}", err);
time
}
};
}
let new_feed_item = NewFeedItem::new(
feed.id,