fix: search for sensitive topics
This commit is contained in:
parent
7dc47b1090
commit
31a8fcf2fb
3 changed files with 47 additions and 28 deletions
|
|
@ -19,8 +19,7 @@ use super::{response, ClientType, MapResponse, MapResult, RustyPipeQuery, YTCont
|
|||
struct QSearch<'a> {
|
||||
context: YTContext<'a>,
|
||||
query: &'a str,
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
params: Option<String>,
|
||||
params: &'a str,
|
||||
}
|
||||
|
||||
impl RustyPipeQuery {
|
||||
|
|
@ -35,7 +34,7 @@ impl RustyPipeQuery {
|
|||
let request_body = QSearch {
|
||||
context,
|
||||
query,
|
||||
params: None,
|
||||
params: "8AEB",
|
||||
};
|
||||
|
||||
self.execute_request::<response::Search, _, _>(
|
||||
|
|
@ -60,7 +59,7 @@ impl RustyPipeQuery {
|
|||
let request_body = QSearch {
|
||||
context,
|
||||
query,
|
||||
params: Some(filter.encode()),
|
||||
params: &filter.encode(),
|
||||
};
|
||||
|
||||
self.execute_request::<response::Search, _, _>(
|
||||
|
|
|
|||
|
|
@ -212,6 +212,8 @@ impl SearchFilter {
|
|||
extras.varint(1, 1);
|
||||
pb.embedded(8, extras);
|
||||
}
|
||||
// Disable filter for sensitive topics (e.g. suicide)
|
||||
pb.varint(30, 1);
|
||||
|
||||
pb.to_base64()
|
||||
}
|
||||
|
|
@ -256,29 +258,29 @@ mod tests {
|
|||
use super::*;
|
||||
|
||||
#[rstest]
|
||||
#[case(SearchFilter::new().item_type(ItemType::Video), "EgIQAQ%253D%253D")]
|
||||
#[case(SearchFilter::new().item_type(ItemType::Channel), "EgIQAg%253D%253D")]
|
||||
#[case(SearchFilter::new().item_type(ItemType::Playlist), "EgIQAw%253D%253D")]
|
||||
#[case(SearchFilter::new().date(UploadDate::Hour), "EgIIAQ%253D%253D")]
|
||||
#[case(SearchFilter::new().date(UploadDate::Day), "EgIIAg%253D%253D")]
|
||||
#[case(SearchFilter::new().date(UploadDate::Week), "EgIIAw%253D%253D")]
|
||||
#[case(SearchFilter::new().date(UploadDate::Month), "EgIIBA%253D%253D")]
|
||||
#[case(SearchFilter::new().date(UploadDate::Year), "EgIIBQ%253D%253D")]
|
||||
#[case(SearchFilter::new().length(Length::Short), "EgIYAQ%253D%253D")]
|
||||
#[case(SearchFilter::new().length(Length::Medium), "EgIYAw%253D%253D")]
|
||||
#[case(SearchFilter::new().length(Length::Long), "EgIYAg%253D%253D")]
|
||||
#[case(SearchFilter::new().feature(Feature::IsLive), "EgJAAQ%253D%253D")]
|
||||
#[case(SearchFilter::new().feature(Feature::Is4k), "EgJwAQ%253D%253D")]
|
||||
#[case(SearchFilter::new().feature(Feature::IsHd), "EgIgAQ%253D%253D")]
|
||||
#[case(SearchFilter::new().feature(Feature::Subtitles), "EgIoAQ%253D%253D")]
|
||||
#[case(SearchFilter::new().feature(Feature::CCommons), "EgIwAQ%253D%253D")]
|
||||
#[case(SearchFilter::new().feature(Feature::Is360), "EgJ4AQ%253D%253D")]
|
||||
#[case(SearchFilter::new().feature(Feature::IsVr180), "EgPQAQE%253D")]
|
||||
#[case(SearchFilter::new().feature(Feature::Is3d), "EgI4AQ%253D%253D")]
|
||||
#[case(SearchFilter::new().feature(Feature::IsHdr), "EgPIAQE%253D")]
|
||||
#[case(SearchFilter::new().sort(Order::Date), "CAI%253D")]
|
||||
#[case(SearchFilter::new().sort(Order::Views), "CAM%253D")]
|
||||
#[case(SearchFilter::new().sort(Order::Rating), "CAE%253D")]
|
||||
#[case(SearchFilter::new().item_type(ItemType::Video), "EgIQAfABAQ%253D%253D")]
|
||||
#[case(SearchFilter::new().item_type(ItemType::Channel), "EgIQAvABAQ%253D%253D")]
|
||||
#[case(SearchFilter::new().item_type(ItemType::Playlist), "EgIQA_ABAQ%253D%253D")]
|
||||
#[case(SearchFilter::new().date(UploadDate::Hour), "EgIIAfABAQ%253D%253D")]
|
||||
#[case(SearchFilter::new().date(UploadDate::Day), "EgIIAvABAQ%253D%253D")]
|
||||
#[case(SearchFilter::new().date(UploadDate::Week), "EgIIA_ABAQ%253D%253D")]
|
||||
#[case(SearchFilter::new().date(UploadDate::Month), "EgIIBPABAQ%253D%253D")]
|
||||
#[case(SearchFilter::new().date(UploadDate::Year), "EgIIBfABAQ%253D%253D")]
|
||||
#[case(SearchFilter::new().length(Length::Short), "EgIYAfABAQ%253D%253D")]
|
||||
#[case(SearchFilter::new().length(Length::Medium), "EgIYA_ABAQ%253D%253D")]
|
||||
#[case(SearchFilter::new().length(Length::Long), "EgIYAvABAQ%253D%253D")]
|
||||
#[case(SearchFilter::new().feature(Feature::IsLive), "EgJAAfABAQ%253D%253D")]
|
||||
#[case(SearchFilter::new().feature(Feature::Is4k), "EgJwAfABAQ%253D%253D")]
|
||||
#[case(SearchFilter::new().feature(Feature::IsHd), "EgIgAfABAQ%253D%253D")]
|
||||
#[case(SearchFilter::new().feature(Feature::Subtitles), "EgIoAfABAQ%253D%253D")]
|
||||
#[case(SearchFilter::new().feature(Feature::CCommons), "EgIwAfABAQ%253D%253D")]
|
||||
#[case(SearchFilter::new().feature(Feature::Is360), "EgJ4AfABAQ%253D%253D")]
|
||||
#[case(SearchFilter::new().feature(Feature::IsVr180), "EgPQAQHwAQE%253D")]
|
||||
#[case(SearchFilter::new().feature(Feature::Is3d), "EgI4AfABAQ%253D%253D")]
|
||||
#[case(SearchFilter::new().feature(Feature::IsHdr), "EgPIAQHwAQE%253D")]
|
||||
#[case(SearchFilter::new().sort(Order::Date), "CALwAQE%253D")]
|
||||
#[case(SearchFilter::new().sort(Order::Views), "CAPwAQE%253D")]
|
||||
#[case(SearchFilter::new().sort(Order::Rating), "CAHwAQE%253D")]
|
||||
fn t_filter(#[case] filter: SearchFilter, #[case] expect: &str) {
|
||||
assert_eq!(urlencoding::encode(&filter.encode()), expect);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -754,7 +754,7 @@ fn get_video_details_no_desc(rp: RustyPipe) {
|
|||
assert_eq!(details.id, "VYJNSQ_ANyA");
|
||||
assert_eq!(details.name, "Cricket comedy by Modi");
|
||||
assert_eq!(details.channel.id, "UC8gBy2lByHxIyoPMglerNWg");
|
||||
assert_eq!(details.channel.name, "TMP Shorts");
|
||||
assert_eq!(details.channel.name, "TMP Mix Veg");
|
||||
assert!(!details.channel.avatar.is_empty(), "no channel avatars");
|
||||
|
||||
assert!(
|
||||
|
|
@ -1256,6 +1256,24 @@ fn search_empty(rp: RustyPipe) {
|
|||
assert!(result.items.is_empty());
|
||||
}
|
||||
|
||||
#[rstest]
|
||||
#[case::no_filter(false)]
|
||||
#[case::filter(true)]
|
||||
fn search_sensitive(rp: RustyPipe, #[case] filter: bool) {
|
||||
let q = "suicide";
|
||||
let result = if filter {
|
||||
tokio_test::block_on(
|
||||
rp.query()
|
||||
.search_filter::<YouTubeItem, _>(q, &search_filter::SearchFilter::new()),
|
||||
)
|
||||
} else {
|
||||
tokio_test::block_on(rp.query().search::<YouTubeItem, _>(q))
|
||||
}
|
||||
.unwrap();
|
||||
assert_gte(result.items.count.unwrap(), 10_000, "results");
|
||||
assert_next(result.items, rp.query(), 10, 2);
|
||||
}
|
||||
|
||||
#[rstest]
|
||||
fn search_suggestion(rp: RustyPipe) {
|
||||
let result = tokio_test::block_on(rp.query().search_suggestion("hunger ga")).unwrap();
|
||||
|
|
|
|||
Reference in a new issue