heavyfetish and other changes
This commit is contained in:
1255
src/providers/heavyfetish.rs
Normal file
1255
src/providers/heavyfetish.rs
Normal file
File diff suppressed because it is too large
Load Diff
@@ -47,6 +47,7 @@ pub mod youjizz;
|
||||
// pub mod pornxp;
|
||||
pub mod chaturbate;
|
||||
pub mod freepornvideosxxx;
|
||||
pub mod heavyfetish;
|
||||
pub mod hentaihaven;
|
||||
pub mod hqporner;
|
||||
pub mod hypnotube;
|
||||
@@ -205,6 +206,10 @@ pub static ALL_PROVIDERS: Lazy<HashMap<&'static str, DynProvider>> = Lazy::new(|
|
||||
"freepornvideosxxx",
|
||||
Arc::new(freepornvideosxxx::FreepornvideosxxxProvider::new()) as DynProvider,
|
||||
);
|
||||
m.insert(
|
||||
"heavyfetish",
|
||||
Arc::new(heavyfetish::HeavyfetishProvider::new()) as DynProvider,
|
||||
);
|
||||
m.insert(
|
||||
"hentaihaven",
|
||||
Arc::new(hentaihaven::HentaihavenProvider::new()) as DynProvider,
|
||||
|
||||
@@ -204,8 +204,12 @@ impl PimpbunnyProvider {
|
||||
}
|
||||
|
||||
fn root_headers(&self) -> Vec<(String, String)> {
|
||||
Self::html_headers_with_referer(&self.root_referer())
|
||||
}
|
||||
|
||||
fn html_headers_with_referer(referer: &str) -> Vec<(String, String)> {
|
||||
vec![
|
||||
("Referer".to_string(), self.root_referer()),
|
||||
("Referer".to_string(), referer.to_string()),
|
||||
(
|
||||
"User-Agent".to_string(),
|
||||
Self::FIREFOX_USER_AGENT.to_string(),
|
||||
@@ -215,20 +219,52 @@ impl PimpbunnyProvider {
|
||||
]
|
||||
}
|
||||
|
||||
fn headers_with_cookies(
|
||||
&self,
|
||||
requester: &Requester,
|
||||
request_url: &str,
|
||||
referer: &str,
|
||||
) -> Vec<(String, String)> {
|
||||
let mut headers = Self::html_headers_with_referer(referer);
|
||||
if let Some(cookie) = requester.cookie_header_for_url(request_url) {
|
||||
headers.push(("Cookie".to_string(), cookie));
|
||||
}
|
||||
headers
|
||||
}
|
||||
|
||||
async fn warm_root_session(&self, requester: &mut Requester) {
|
||||
let root_url = self.root_referer();
|
||||
let _ = requester
|
||||
.get_with_headers(&root_url, self.root_headers(), Some(Version::HTTP_11))
|
||||
.await;
|
||||
}
|
||||
|
||||
async fn warm_root_session_for_base(base: &str, requester: &mut Requester) {
|
||||
let root_url = format!("{}/", base.trim_end_matches('/'));
|
||||
let _ = requester
|
||||
.get_with_headers(
|
||||
&root_url,
|
||||
Self::html_headers_with_referer(&root_url),
|
||||
Some(Version::HTTP_11),
|
||||
)
|
||||
.await;
|
||||
}
|
||||
|
||||
async fn load_stars(base: &str, stars: Arc<RwLock<Vec<FilterOption>>>) -> Result<()> {
|
||||
let mut requester = Requester::new();
|
||||
let headers = vec![
|
||||
("Referer".to_string(), format!("{}/", base.trim_end_matches('/'))),
|
||||
(
|
||||
"User-Agent".to_string(),
|
||||
Self::FIREFOX_USER_AGENT.to_string(),
|
||||
),
|
||||
("Accept".to_string(), Self::HTML_ACCEPT.to_string()),
|
||||
("Accept-Language".to_string(), "en-US,en;q=0.9".to_string()),
|
||||
];
|
||||
Self::warm_root_session_for_base(base, &mut requester).await;
|
||||
let request_url = format!("{base}/onlyfans-models/?models_per_page=20");
|
||||
let headers = {
|
||||
let root_url = format!("{}/", base.trim_end_matches('/'));
|
||||
let mut headers = Self::html_headers_with_referer(&root_url);
|
||||
if let Some(cookie) = requester.cookie_header_for_url(&request_url) {
|
||||
headers.push(("Cookie".to_string(), cookie));
|
||||
}
|
||||
headers
|
||||
};
|
||||
let text = requester
|
||||
.get_with_headers(
|
||||
&format!("{base}/onlyfans-models/?models_per_page=20"),
|
||||
&request_url,
|
||||
headers,
|
||||
Some(Version::HTTP_2),
|
||||
)
|
||||
@@ -271,18 +307,19 @@ impl PimpbunnyProvider {
|
||||
|
||||
async fn load_categories(base: &str, cats: Arc<RwLock<Vec<FilterOption>>>) -> Result<()> {
|
||||
let mut requester = Requester::new();
|
||||
let headers = vec![
|
||||
("Referer".to_string(), format!("{}/", base.trim_end_matches('/'))),
|
||||
(
|
||||
"User-Agent".to_string(),
|
||||
Self::FIREFOX_USER_AGENT.to_string(),
|
||||
),
|
||||
("Accept".to_string(), Self::HTML_ACCEPT.to_string()),
|
||||
("Accept-Language".to_string(), "en-US,en;q=0.9".to_string()),
|
||||
];
|
||||
Self::warm_root_session_for_base(base, &mut requester).await;
|
||||
let request_url = format!("{base}/categories/?items_per_page=120");
|
||||
let headers = {
|
||||
let root_url = format!("{}/", base.trim_end_matches('/'));
|
||||
let mut headers = Self::html_headers_with_referer(&root_url);
|
||||
if let Some(cookie) = requester.cookie_header_for_url(&request_url) {
|
||||
headers.push(("Cookie".to_string(), cookie));
|
||||
}
|
||||
headers
|
||||
};
|
||||
let text = requester
|
||||
.get_with_headers(
|
||||
&format!("{base}/categories/?items_per_page=120"),
|
||||
&request_url,
|
||||
headers,
|
||||
Some(Version::HTTP_2),
|
||||
)
|
||||
@@ -347,8 +384,10 @@ impl PimpbunnyProvider {
|
||||
};
|
||||
let mut requester =
|
||||
crate::providers::requester_or_default(&options, module_path!(), "missing_requester");
|
||||
self.warm_root_session(&mut requester).await;
|
||||
let headers = self.headers_with_cookies(&requester, &video_url, &self.root_referer());
|
||||
let text = match requester
|
||||
.get_with_headers(&video_url, self.root_headers(), Some(Version::HTTP_11))
|
||||
.get_with_headers(&video_url, headers, Some(Version::HTTP_11))
|
||||
.await
|
||||
{
|
||||
Ok(text) => text,
|
||||
@@ -446,9 +485,11 @@ impl PimpbunnyProvider {
|
||||
|
||||
let mut requester =
|
||||
crate::providers::requester_or_default(&options, module_path!(), "missing_requester");
|
||||
self.warm_root_session(&mut requester).await;
|
||||
println!("Fetching URL: {}", video_url);
|
||||
let headers = self.headers_with_cookies(&requester, &video_url, &self.root_referer());
|
||||
let text = match requester
|
||||
.get_with_headers(&video_url, self.root_headers(), Some(Version::HTTP_2))
|
||||
.get_with_headers(&video_url, headers, Some(Version::HTTP_2))
|
||||
.await
|
||||
{
|
||||
Ok(text) => text,
|
||||
@@ -577,8 +618,10 @@ impl PimpbunnyProvider {
|
||||
url: &str,
|
||||
requester: &mut Requester,
|
||||
) -> Result<(Vec<String>, Vec<VideoFormat>, u32, u32)> {
|
||||
self.warm_root_session(requester).await;
|
||||
let headers = self.headers_with_cookies(requester, url, &self.root_referer());
|
||||
let text = requester
|
||||
.get_with_headers(url, self.root_headers(), Some(Version::HTTP_2))
|
||||
.get_with_headers(url, headers, Some(Version::HTTP_2))
|
||||
.await
|
||||
.map_err(|e| Error::from(format!("{}", e)))?;
|
||||
|
||||
@@ -610,17 +653,17 @@ impl PimpbunnyProvider {
|
||||
.map(|d| parse_time_to_seconds(&d.replace(['P', 'T', 'H', 'M', 'S'], "")).unwrap_or(0))
|
||||
.unwrap_or(0) as u32;
|
||||
|
||||
Ok((
|
||||
vec![],
|
||||
vec![VideoFormat::new(video_url, quality, "video/mp4".into())
|
||||
.http_header("Referer".to_string(), url.to_string())
|
||||
.http_header(
|
||||
"User-Agent".to_string(),
|
||||
Self::FIREFOX_USER_AGENT.to_string(),
|
||||
)],
|
||||
views,
|
||||
duration,
|
||||
))
|
||||
let mut format = VideoFormat::new(video_url.clone(), quality, "video/mp4".into())
|
||||
.http_header("Referer".to_string(), url.to_string())
|
||||
.http_header(
|
||||
"User-Agent".to_string(),
|
||||
Self::FIREFOX_USER_AGENT.to_string(),
|
||||
);
|
||||
if let Some(cookie) = requester.cookie_header_for_url(&video_url) {
|
||||
format.add_http_header("Cookie".to_string(), cookie);
|
||||
}
|
||||
|
||||
Ok((vec![], vec![format], views, duration))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user