add erothots

This commit is contained in:
Simon
2025-06-19 11:12:39 +00:00
parent f8fe0aa1ec
commit 6405cbb269
5 changed files with 352 additions and 13 deletions

View File

@@ -9,6 +9,7 @@ use crate::util::flaresolverr::{FlareSolverrRequest, Flaresolverr};
use crate::videos::{self, VideoItem};
use crate::DbPool;
use crate::USER_AGENT; // Make sure Provider trait is imported
use std::collections::HashMap;
error_chain! {
foreign_links {
@@ -101,7 +102,7 @@ impl SpankbangProvider {
}
}
async fn query(&self, cache: VideoCache, page: u8, query: &str,) -> Result<Vec<VideoItem>> {
async fn query(&self, cache: VideoCache, page: u8, query: &str) -> Result<Vec<VideoItem>> {
let url = format!("{}s/{}/{}/", self.url, query.replace(" ", "+"), page);
let old_items = match cache.get(&url) {
@@ -134,6 +135,26 @@ impl SpankbangProvider {
};
let response = client.get(url.clone()).send().await?;
if let Some(cookies) = response.headers().get_all("set-cookie").iter().next() {
for value in response.headers().get_all("set-cookie").iter() {
let mut cookies_map = HashMap::new();
for value in response.headers().get_all("set-cookie").iter() {
if let Ok(cookie_str) = value.to_str() {
if let Some((k, v)) = cookie_str.split_once('=') {
let key = k.trim();
let val = v.split(';').next().unwrap_or("").trim();
cookies_map.insert(key.to_string(), val.to_string());
}
}
}
let cookies_string = cookies_map
.iter()
.map(|(k, v)| format!("{}={}", k, v))
.collect::<Vec<String>>()
.join("; ");
println!("Cookie: {}", cookies_string);
}
}
if response.status().is_success() {
let text = response.text().await?;
let video_items: Vec<VideoItem> = self.get_video_items_from_html(text.clone());
@@ -180,11 +201,20 @@ impl SpankbangProvider {
return vec![];
}
let mut items: Vec<VideoItem> = Vec::new();
let video_listing_content = html.split("class=\"video-list ").collect::<Vec<&str>>()[1];
let raw_videos = video_listing_content
let split_html = html.split("class=\"video-list ").collect::<Vec<&str>>();
if split_html.len() < 2 {
println!("Could not find video-list in HTML");
return items;
}
let video_listing_content = split_html[1];
let raw_videos_vec = video_listing_content
.split("class=\"video-item\"")
.collect::<Vec<&str>>()[1..]
.to_vec();
.collect::<Vec<&str>>();
if raw_videos_vec.len() < 2 {
println!("Could not find video-item in HTML");
return items;
}
let raw_videos = raw_videos_vec[1..].to_vec();
for video_segment in &raw_videos {
let vid = video_segment.split("\n").collect::<Vec<&str>>();
//for (index,line) in vid.iter().enumerate(){