diff --git a/archive/noodlemagazine.rs b/archive/noodlemagazine.rs deleted file mode 100644 index 18adee2..0000000 --- a/archive/noodlemagazine.rs +++ /dev/null @@ -1,196 +0,0 @@ -use crate::util::parse_abbreviated_number; -use crate::DbPool; -use crate::providers::Provider; -use crate::util::cache::VideoCache; -use crate::util::flaresolverr::{FlareSolverrRequest, Flaresolverr}; -use crate::util::time::parse_time_to_seconds; -use crate::videos::{ServerOptions, VideoItem}; -use error_chain::error_chain; -use htmlentity::entity::{ICodedDataTrait, decode}; -use std::env; -use std::vec; -use wreq::{Client, Proxy}; -use wreq_util::Emulation; - -error_chain! { - foreign_links { - Io(std::io::Error); - HttpRequest(wreq::Error); - } -} - -#[derive(Debug, Clone)] -pub struct NoodlemagazineProvider { - url: String, -} -impl NoodlemagazineProvider { - pub fn new() -> Self { - NoodlemagazineProvider { - url: "https://noodlemagazine.com".to_string(), - } - } - async fn get( - &self, - cache: VideoCache, - page: u8, - options: ServerOptions, - ) -> Result> { - - let video_url = format!("{}/popular/recent?p={}", self.url, page-1); - let old_items = match cache.get(&video_url) { - Some((time, items)) => { - if time.elapsed().unwrap_or_default().as_secs() < 60 * 5 { - return Ok(items.clone()); - } else { - items.clone() - } - } - None => { - vec![] - } - }; - - let mut requester = options.requester.clone().unwrap(); - - let text = requester.get(&video_url, None).await.unwrap(); - let video_items: Vec = self.get_video_items_from_html(text.clone()); - if !video_items.is_empty() { - cache.remove(&video_url); - cache.insert(video_url.clone(), video_items.clone()); - } else { - return Ok(old_items); - } - Ok(video_items) - } - - async fn query( - &self, - cache: VideoCache, - page: u8, - query: &str, - options: ServerOptions, - ) -> Result> { - let search_string = query.replace(" ", "%20"); - let video_url = format!("{}/video/{}?p={}", self.url, search_string, page); - // Check our Video Cache. If the result is younger than 1 hour, we return it. - let old_items = match cache.get(&video_url) { - Some((time, items)) => { - if time.elapsed().unwrap_or_default().as_secs() < 60 * 5 { - return Ok(items.clone()); - } else { - let _ = cache.check().await; - return Ok(items.clone()); - } - } - None => { - vec![] - } - }; - - let mut requester = options.requester.clone().unwrap(); - - let text = requester.get(&video_url, None).await.unwrap(); - let video_items: Vec = self.get_video_items_from_html(text.clone()); - if !video_items.is_empty() { - cache.remove(&video_url); - cache.insert(video_url.clone(), video_items.clone()); - } else { - return Ok(old_items); - } - Ok(video_items) - } - - fn get_video_items_from_html(&self, html: String) -> Vec { - if html.is_empty() { - println!("HTML is empty"); - return vec![]; - } - let mut items: Vec = Vec::new(); - let raw_videos = html.split("- Made with >()[0] - .split("
") - .collect::>()[1..] - .to_vec(); - for video_segment in &raw_videos { - // let vid = video_segment.split("\n").collect::>(); - // for (index, line) in vid.iter().enumerate() { - // println!("Line {}: {}", index, line); - // } - let video_url: String = format!("{}{}",self.url, video_segment.split(">()[1] - .split("\"") - .collect::>()[0].to_string()); - let mut title = video_segment.split("\"title\">").collect::>()[1] - .split("<") - .collect::>()[0] - .to_string(); - // html decode - title = decode(title.as_bytes()).to_string().unwrap_or(title); - let id = video_url.split("/").collect::>()[4].to_string(); - let raw_duration = video_segment.split("#clock-o").collect::>()[1] - .split("").collect::>()[1] - .split("<").collect::>()[0] - .to_string(); - let duration = parse_time_to_seconds(&raw_duration).unwrap_or(0) as u32; - - let thumb = video_segment.split(">()[1] - .split("data-src=\"").collect::>()[1] - .split("\"") - .collect::>()[0] - .to_string(); - - let views_part = video_segment.split("#eye").collect::>()[1] - .split("").collect::>()[1] - .split("<").collect::>()[0] - .to_string(); - let duration = parse_time_to_seconds(&raw_duration).unwrap_or(0) as u32; - let views = parse_abbreviated_number(&views_part).unwrap_or(0) as u32; - - let video_item = VideoItem::new( - id, - title, - video_url.to_string(), - "noodlemagazine".to_string(), - thumb, - duration, - ) - .views(views) - ; - items.push(video_item); - } - return items; - } - - -} - -impl Provider for NoodlemagazineProvider { - async fn get_videos( - &self, - cache: VideoCache, - pool: DbPool, - sort: String, - query: Option, - page: String, - per_page: String, - options: ServerOptions, - ) -> Vec { - let _ = per_page; - let _ = pool; - let videos: std::result::Result, Error> = match query { - Some(q) => { - self.query(cache, page.parse::().unwrap_or(1), &q,options) - .await - } - None => { - self.get(cache, page.parse::().unwrap_or(1), options) - .await - } - }; - match videos { - Ok(v) => v, - Err(e) => { - println!("Error fetching videos: {}", e); - vec![] - } - } - } -} diff --git a/src/util/cache.rs b/src/util/cache.rs index a93f656..401be30 100644 --- a/src/util/cache.rs +++ b/src/util/cache.rs @@ -49,7 +49,6 @@ impl VideoCache { for (key, (time, _items)) in iter { if let Ok(elapsed) = time.elapsed() { if elapsed > Duration::from_secs(60*60){ - println!("Key: {}, elapsed: {:?}", key, elapsed); self.remove(&key); } }