fixes and cleanup
This commit is contained in:
@@ -1,19 +1,19 @@
|
||||
use crate::api::ClientVersion;
|
||||
use crate::util::parse_abbreviated_number;
|
||||
use crate::DbPool;
|
||||
use crate::api::ClientVersion;
|
||||
use crate::providers::{Provider, report_provider_error};
|
||||
use crate::status::*;
|
||||
use crate::util::cache::VideoCache;
|
||||
use crate::util::flaresolverr::{FlareSolverrRequest, Flaresolverr};
|
||||
use crate::util::parse_abbreviated_number;
|
||||
use crate::util::time::parse_time_to_seconds;
|
||||
use crate::videos::{ServerOptions, VideoItem};
|
||||
use async_trait::async_trait;
|
||||
use error_chain::error_chain;
|
||||
use htmlentity::entity::{ICodedDataTrait, decode};
|
||||
use std::env;
|
||||
use std::vec;
|
||||
use wreq::{Client};
|
||||
use wreq::Client;
|
||||
use wreq_util::Emulation;
|
||||
use async_trait::async_trait;
|
||||
|
||||
error_chain! {
|
||||
foreign_links {
|
||||
@@ -68,12 +68,7 @@ impl OkxxxProvider {
|
||||
cacheDuration: Some(1800),
|
||||
}
|
||||
}
|
||||
async fn get(
|
||||
&self,
|
||||
cache: VideoCache,
|
||||
page: u8,
|
||||
sort: &str,
|
||||
) -> Result<Vec<VideoItem>> {
|
||||
async fn get(&self, cache: VideoCache, page: u8, sort: &str) -> Result<Vec<VideoItem>> {
|
||||
let sort_string = match sort {
|
||||
"trending" => "/trending",
|
||||
"popular" => "/popular",
|
||||
@@ -94,13 +89,22 @@ impl OkxxxProvider {
|
||||
};
|
||||
|
||||
// let proxy = Proxy::all("http://192.168.0.103:8081").unwrap();
|
||||
let client = Client::builder().cert_verification(false).emulation(Emulation::Firefox136).build()?;
|
||||
let client = Client::builder()
|
||||
.cert_verification(false)
|
||||
.emulation(Emulation::Firefox136)
|
||||
.build()?;
|
||||
|
||||
let mut response = client.get(video_url.clone())
|
||||
// .proxy(proxy.clone())
|
||||
.send().await?;
|
||||
let mut response = client
|
||||
.get(video_url.clone())
|
||||
// .proxy(proxy.clone())
|
||||
.send()
|
||||
.await?;
|
||||
if response.status().is_redirection() {
|
||||
let location = match response.headers().get("Location").and_then(|h| h.to_str().ok()) {
|
||||
let location = match response
|
||||
.headers()
|
||||
.get("Location")
|
||||
.and_then(|h| h.to_str().ok())
|
||||
{
|
||||
Some(location) => location,
|
||||
None => {
|
||||
report_provider_error(
|
||||
@@ -133,12 +137,7 @@ impl OkxxxProvider {
|
||||
let flare_url = match env::var("FLARE_URL") {
|
||||
Ok(url) => url,
|
||||
Err(e) => {
|
||||
report_provider_error(
|
||||
"okxxx",
|
||||
"get.flare_url",
|
||||
&e.to_string(),
|
||||
)
|
||||
.await;
|
||||
report_provider_error("okxxx", "get.flare_url", &e.to_string()).await;
|
||||
return Ok(old_items);
|
||||
}
|
||||
};
|
||||
@@ -169,17 +168,18 @@ impl OkxxxProvider {
|
||||
Ok(video_items)
|
||||
}
|
||||
}
|
||||
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 search_string = query.to_lowercase().trim().replace(" ", "-");
|
||||
let mut video_url = format!("{}/search/{}/{}/", self.url, search_string, page);
|
||||
|
||||
if search_string.starts_with("@"){
|
||||
let url_part = search_string.split("@").collect::<Vec<&str>>().get(1).copied().unwrap_or_default().replace(":", "/");
|
||||
if search_string.starts_with("@") {
|
||||
let url_part = search_string
|
||||
.split("@")
|
||||
.collect::<Vec<&str>>()
|
||||
.get(1)
|
||||
.copied()
|
||||
.unwrap_or_default()
|
||||
.replace(":", "/");
|
||||
video_url = format!("{}/{}/", self.url, url_part);
|
||||
}
|
||||
// Check our Video Cache. If the result is younger than 1 hour, we return it.
|
||||
@@ -198,14 +198,23 @@ impl OkxxxProvider {
|
||||
};
|
||||
|
||||
// let proxy = Proxy::all("http://192.168.0.103:8081").unwrap();
|
||||
let client = Client::builder().cert_verification(false).emulation(Emulation::Firefox136).build()?;
|
||||
let client = Client::builder()
|
||||
.cert_verification(false)
|
||||
.emulation(Emulation::Firefox136)
|
||||
.build()?;
|
||||
|
||||
let mut response = client.get(video_url.clone())
|
||||
// .proxy(proxy.clone())
|
||||
.send().await?;
|
||||
let mut response = client
|
||||
.get(video_url.clone())
|
||||
// .proxy(proxy.clone())
|
||||
.send()
|
||||
.await?;
|
||||
|
||||
if response.status().is_redirection() {
|
||||
let location = match response.headers().get("Location").and_then(|h| h.to_str().ok()) {
|
||||
let location = match response
|
||||
.headers()
|
||||
.get("Location")
|
||||
.and_then(|h| h.to_str().ok())
|
||||
{
|
||||
Some(location) => location,
|
||||
None => {
|
||||
report_provider_error(
|
||||
@@ -238,12 +247,7 @@ impl OkxxxProvider {
|
||||
let flare_url = match env::var("FLARE_URL") {
|
||||
Ok(url) => url,
|
||||
Err(e) => {
|
||||
report_provider_error(
|
||||
"okxxx",
|
||||
"query.flare_url",
|
||||
&e.to_string(),
|
||||
)
|
||||
.await;
|
||||
report_provider_error("okxxx", "query.flare_url", &e.to_string()).await;
|
||||
return Ok(old_items);
|
||||
}
|
||||
};
|
||||
@@ -278,7 +282,12 @@ impl OkxxxProvider {
|
||||
return vec![];
|
||||
}
|
||||
let mut items: Vec<VideoItem> = Vec::new();
|
||||
let raw_videos = html.split("<div class=\"pagination\"").collect::<Vec<&str>>().get(0).copied().unwrap_or_default()
|
||||
let raw_videos = html
|
||||
.split("<div class=\"pagination\"")
|
||||
.collect::<Vec<&str>>()
|
||||
.get(0)
|
||||
.copied()
|
||||
.unwrap_or_default()
|
||||
.split("item thumb-bl thumb-bl-video video_")
|
||||
.collect::<Vec<&str>>()[1..]
|
||||
.to_vec();
|
||||
@@ -287,61 +296,150 @@ impl OkxxxProvider {
|
||||
// for (index, line) in vid.iter().enumerate() {
|
||||
// println!("Line {}: {}", index, line);
|
||||
// }
|
||||
let video_url: String = format!("{}{}", self.url, video_segment.split("<a href=\"").collect::<Vec<&str>>().get(1).copied().unwrap_or_default()
|
||||
let video_url: String = format!(
|
||||
"{}{}",
|
||||
self.url,
|
||||
video_segment
|
||||
.split("<a href=\"")
|
||||
.collect::<Vec<&str>>()
|
||||
.get(1)
|
||||
.copied()
|
||||
.unwrap_or_default()
|
||||
.split("\"")
|
||||
.collect::<Vec<&str>>().get(0).copied().unwrap_or_default());
|
||||
let preview_url = video_segment.split("data-preview-custom=\"").collect::<Vec<&str>>().get(1).copied().unwrap_or_default()
|
||||
.collect::<Vec<&str>>()
|
||||
.get(0)
|
||||
.copied()
|
||||
.unwrap_or_default()
|
||||
);
|
||||
let preview_url = video_segment
|
||||
.split("data-preview-custom=\"")
|
||||
.collect::<Vec<&str>>()
|
||||
.get(1)
|
||||
.copied()
|
||||
.unwrap_or_default()
|
||||
.split("\"")
|
||||
.collect::<Vec<&str>>().get(0).copied().unwrap_or_default()
|
||||
.collect::<Vec<&str>>()
|
||||
.get(0)
|
||||
.copied()
|
||||
.unwrap_or_default()
|
||||
.to_string();
|
||||
let mut title = video_segment.split("\" title=\"").collect::<Vec<&str>>().get(1).copied().unwrap_or_default()
|
||||
let mut title = video_segment
|
||||
.split("\" title=\"")
|
||||
.collect::<Vec<&str>>()
|
||||
.get(1)
|
||||
.copied()
|
||||
.unwrap_or_default()
|
||||
.split("\"")
|
||||
.collect::<Vec<&str>>().get(0).copied().unwrap_or_default()
|
||||
.collect::<Vec<&str>>()
|
||||
.get(0)
|
||||
.copied()
|
||||
.unwrap_or_default()
|
||||
.to_string();
|
||||
// html decode
|
||||
title = decode(title.as_bytes()).to_string().unwrap_or(title);
|
||||
let id = video_url.split("/").collect::<Vec<&str>>().get(4).copied().unwrap_or_default().to_string();
|
||||
let raw_duration = video_segment.split("fa fa-clock-o").collect::<Vec<&str>>().get(1).copied().unwrap_or_default()
|
||||
.split("<span>").collect::<Vec<&str>>().get(1).copied().unwrap_or_default()
|
||||
let id = video_url
|
||||
.split("/")
|
||||
.collect::<Vec<&str>>()
|
||||
.get(4)
|
||||
.copied()
|
||||
.unwrap_or_default()
|
||||
.to_string();
|
||||
let raw_duration = video_segment
|
||||
.split("fa fa-clock-o")
|
||||
.collect::<Vec<&str>>()
|
||||
.get(1)
|
||||
.copied()
|
||||
.unwrap_or_default()
|
||||
.split("<span>")
|
||||
.collect::<Vec<&str>>()
|
||||
.get(1)
|
||||
.copied()
|
||||
.unwrap_or_default()
|
||||
.split("<")
|
||||
.collect::<Vec<&str>>().get(0).copied().unwrap_or_default()
|
||||
.collect::<Vec<&str>>()
|
||||
.get(0)
|
||||
.copied()
|
||||
.unwrap_or_default()
|
||||
.to_string();
|
||||
let duration = parse_time_to_seconds(&raw_duration).unwrap_or(0) as u32;
|
||||
|
||||
let thumb = format!("https:{}", video_segment.split(" class=\"thumb lazy-load\"").collect::<Vec<&str>>().get(1).copied().unwrap_or_default()
|
||||
.split("data-original=\"").collect::<Vec<&str>>().get(1).copied().unwrap_or_default()
|
||||
.split("\"")
|
||||
.collect::<Vec<&str>>().get(0).copied().unwrap_or_default()
|
||||
.to_string());
|
||||
|
||||
let thumb = format!(
|
||||
"https:{}",
|
||||
video_segment
|
||||
.split(" class=\"thumb lazy-load\"")
|
||||
.collect::<Vec<&str>>()
|
||||
.get(1)
|
||||
.copied()
|
||||
.unwrap_or_default()
|
||||
.split("data-original=\"")
|
||||
.collect::<Vec<&str>>()
|
||||
.get(1)
|
||||
.copied()
|
||||
.unwrap_or_default()
|
||||
.split("\"")
|
||||
.collect::<Vec<&str>>()
|
||||
.get(0)
|
||||
.copied()
|
||||
.unwrap_or_default()
|
||||
.to_string()
|
||||
);
|
||||
|
||||
let mut tags = vec![];
|
||||
if video_segment.contains("href=\"/sites/"){
|
||||
if video_segment.contains("href=\"/sites/") {
|
||||
let raw_tags = video_segment.split("href=\"/sites/").collect::<Vec<&str>>()[1..]
|
||||
.iter()
|
||||
.map(|s| s.split("/\"").collect::<Vec<&str>>().get(0).copied().unwrap_or_default().to_string())
|
||||
.map(|s| {
|
||||
s.split("/\"")
|
||||
.collect::<Vec<&str>>()
|
||||
.get(0)
|
||||
.copied()
|
||||
.unwrap_or_default()
|
||||
.to_string()
|
||||
})
|
||||
.collect::<Vec<String>>();
|
||||
for tag in raw_tags {
|
||||
if !tag.is_empty() {
|
||||
tags.push(format!("@sites:{}",tag));
|
||||
tags.push(format!("@sites:{}", tag));
|
||||
}
|
||||
}
|
||||
}
|
||||
if video_segment.contains("href=\"/models/"){
|
||||
let raw_tags = video_segment.split("href=\"/models/").collect::<Vec<&str>>()[1..]
|
||||
if video_segment.contains("href=\"/models/") {
|
||||
let raw_tags = video_segment
|
||||
.split("href=\"/models/")
|
||||
.collect::<Vec<&str>>()[1..]
|
||||
.iter()
|
||||
.map(|s| s.split("/\"").collect::<Vec<&str>>().get(0).copied().unwrap_or_default().to_string())
|
||||
.map(|s| {
|
||||
s.split("/\"")
|
||||
.collect::<Vec<&str>>()
|
||||
.get(0)
|
||||
.copied()
|
||||
.unwrap_or_default()
|
||||
.to_string()
|
||||
})
|
||||
.collect::<Vec<String>>();
|
||||
for tag in raw_tags {
|
||||
if !tag.is_empty() {
|
||||
tags.push(format!("@models:{}",tag));
|
||||
tags.push(format!("@models:{}", tag));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let views_part = video_segment.split("fa fa-eye").collect::<Vec<&str>>().get(1).copied().unwrap_or_default()
|
||||
.split("<span>").collect::<Vec<&str>>().get(1).copied().unwrap_or_default()
|
||||
let views_part = video_segment
|
||||
.split("fa fa-eye")
|
||||
.collect::<Vec<&str>>()
|
||||
.get(1)
|
||||
.copied()
|
||||
.unwrap_or_default()
|
||||
.split("<span>")
|
||||
.collect::<Vec<&str>>()
|
||||
.get(1)
|
||||
.copied()
|
||||
.unwrap_or_default()
|
||||
.split("<")
|
||||
.collect::<Vec<&str>>().get(0).copied().unwrap_or_default()
|
||||
.collect::<Vec<&str>>()
|
||||
.get(0)
|
||||
.copied()
|
||||
.unwrap_or_default()
|
||||
.to_string();
|
||||
let views = parse_abbreviated_number(&views_part).unwrap_or(0) as u32;
|
||||
|
||||
@@ -355,14 +453,11 @@ impl OkxxxProvider {
|
||||
)
|
||||
.preview(preview_url)
|
||||
.views(views)
|
||||
.tags(tags)
|
||||
;
|
||||
.tags(tags);
|
||||
items.push(video_item);
|
||||
}
|
||||
return items;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
#[async_trait]
|
||||
@@ -381,10 +476,7 @@ impl Provider for OkxxxProvider {
|
||||
let _ = per_page;
|
||||
let _ = pool;
|
||||
let videos: std::result::Result<Vec<VideoItem>, Error> = match query {
|
||||
Some(q) => {
|
||||
self.query(cache, page.parse::<u8>().unwrap_or(1), &q,)
|
||||
.await
|
||||
}
|
||||
Some(q) => self.query(cache, page.parse::<u8>().unwrap_or(1), &q).await,
|
||||
None => {
|
||||
self.get(cache, page.parse::<u8>().unwrap_or(1), &sort)
|
||||
.await
|
||||
|
||||
Reference in New Issue
Block a user