all new
This commit is contained in:
@@ -0,0 +1,24 @@
|
||||
use actix_web::{web, HttpResponse};
|
||||
use diesel::RunQueryDsl;
|
||||
|
||||
use crate::{
|
||||
database::establish_connection, json_serialization::new_feed::NewFeedSchema,
|
||||
models::feed::new_feed::NewFeed, schema::feed,
|
||||
};
|
||||
|
||||
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 new_feed = NewFeed::new(title, url);
|
||||
|
||||
let insert_result = diesel::insert_into(feed::table)
|
||||
.values(&new_feed)
|
||||
.execute(&mut connection);
|
||||
|
||||
match insert_result {
|
||||
Ok(_) => HttpResponse::Created().await.unwrap(),
|
||||
Err(_) => HttpResponse::Conflict().await.unwrap(),
|
||||
}
|
||||
}
|
||||
+22
-9
@@ -1,17 +1,35 @@
|
||||
use crate::{auth::jwt::JwtToken, reader::feeds, json_serialization::articles::Articles};
|
||||
use actix_web::{HttpRequest, Responder};
|
||||
use scraper::{Html, Selector };
|
||||
|
||||
use super::structs::{article::{Article, self}, feed::Feed};
|
||||
use super::structs::{article::Article, feed::Feed};
|
||||
|
||||
pub async fn get(req: HttpRequest) -> impl Responder {
|
||||
// let _token: JwtToken = JwtToken::decode_from_request(req).unwrap();
|
||||
let request = req.clone();
|
||||
let _token: JwtToken = JwtToken::decode_from_request(req).unwrap();
|
||||
|
||||
let feed = feeds::get_feed("https://www.heise.de/rss/heise-Rubrik-Wissen.rdf").await.unwrap();
|
||||
|
||||
let feed_title: String = feed.title.clone();
|
||||
let feed_items: Vec<Article> = feed.into_items().into_iter().map(|item| {
|
||||
let title = item.title.unwrap();
|
||||
let content = item.content.unwrap();
|
||||
let frag = Html::parse_fragment(&item.content.unwrap());
|
||||
let mut content = "".to_string();
|
||||
let frag_clone = frag.clone();
|
||||
frag.tree.into_iter().for_each(|node| {
|
||||
let selector_img = Selector::parse("img").unwrap();
|
||||
|
||||
for element in frag_clone.select(&selector_img) {
|
||||
if !content.starts_with("<img") {
|
||||
content.push_str(&element.html());
|
||||
content.push_str("<br>")
|
||||
}
|
||||
}
|
||||
if let scraper::node::Node::Text(text) = node {
|
||||
content.push_str(&text.text);
|
||||
}
|
||||
|
||||
});
|
||||
Article {
|
||||
title,
|
||||
content,
|
||||
@@ -22,10 +40,5 @@ pub async fn get(req: HttpRequest) -> impl Responder {
|
||||
|
||||
let articles: Articles = Articles { feeds };
|
||||
|
||||
articles.respond_to(&req)
|
||||
//
|
||||
//
|
||||
// HttpResponse::Ok()
|
||||
// .content_type("text/html; charset=utf-8")
|
||||
// .body(feed.to_string())
|
||||
articles.respond_to(&request)
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
use actix_web::web;
|
||||
|
||||
use crate::views::path::Path;
|
||||
mod add;
|
||||
pub mod feeds;
|
||||
mod get;
|
||||
pub mod structs;
|
||||
@@ -14,4 +15,8 @@ pub fn feed_factory(app: &mut web::ServiceConfig) {
|
||||
&base_path.define(String::from("/get")),
|
||||
web::get().to(get::get),
|
||||
);
|
||||
app.route(
|
||||
&base_path.define(String::from("/add")),
|
||||
web::post().to(add::add),
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user