diff --git a/src/providers/pornhub.rs b/src/providers/pornhub.rs index 947e342..a0c4a9d 100644 --- a/src/providers/pornhub.rs +++ b/src/providers/pornhub.rs @@ -1,3 +1,4 @@ +use crate::util::parse_abbreviated_number; use crate::DbPool; use crate::providers::Provider; use crate::util::cache::VideoCache; @@ -200,6 +201,10 @@ impl PornhubProvider { .collect::>()[0] .to_string(); let duration = parse_time_to_seconds(&raw_duration).unwrap_or(0) as u32; + let views = parse_abbreviated_number(video_segment.split("iews\">").collect::>()[1] + .split("").collect::>()[1] + .split("<") + .collect::>()[0]).unwrap_or(0); let thumb = video_segment.split("src=\"").collect::>()[1] .split("\"") @@ -212,7 +217,9 @@ impl PornhubProvider { "pornhub".to_string(), thumb, duration, - ); + ) + .views(views) + ; items.push(video_item); } return items; diff --git a/src/util/mod.rs b/src/util/mod.rs index dce15b4..8684934 100644 --- a/src/util/mod.rs +++ b/src/util/mod.rs @@ -1,3 +1,21 @@ pub mod time; pub mod flaresolverr; -pub mod cache; \ No newline at end of file +pub mod cache; + +pub fn parse_abbreviated_number(s: &str) -> Option { + let s = s.trim(); + if s.is_empty() { + return None; + } + let (num_part, suffix) = s + .chars() + .partition::(|c| c.is_ascii_digit() || *c == '.'); + let multiplier = match suffix.trim().to_ascii_uppercase().as_str() { + "K" => 1_000.0, + "M" => 1_000_000.0, + "B" => 1_000_000_000.0, + "" => 1.0, + _ => return None, + }; + num_part.parse::().ok().map(|n| (n * multiplier) as u32) +} \ No newline at end of file