fix(channel): new rich grid renderer continuation format
This commit is contained in:
parent
9f7f337efd
commit
39b32da5a4
4 changed files with 41 additions and 14 deletions
|
|
@ -53,14 +53,20 @@ impl<T: TryFrom<YouTubeItem>> MapResponse<Paginator<T>> for response::Continuati
|
||||||
lang: crate::param::Language,
|
lang: crate::param::Language,
|
||||||
_deobf: Option<&crate::deobfuscate::Deobfuscator>,
|
_deobf: Option<&crate::deobfuscate::Deobfuscator>,
|
||||||
) -> Result<MapResult<Paginator<T>>, ExtractionError> {
|
) -> Result<MapResult<Paginator<T>>, ExtractionError> {
|
||||||
let mut actions = self.on_response_received_actions;
|
let items = self
|
||||||
let items = actions
|
.on_response_received_actions
|
||||||
.try_swap_remove(0)
|
.and_then(|mut actions| {
|
||||||
|
actions
|
||||||
|
.try_swap_remove(0)
|
||||||
|
.map(|action| action.append_continuation_items_action.continuation_items)
|
||||||
|
})
|
||||||
|
.or_else(|| {
|
||||||
|
self.continuation_contents
|
||||||
|
.map(|contents| contents.rich_grid_continuation.contents)
|
||||||
|
})
|
||||||
.ok_or(ExtractionError::InvalidData(Cow::Borrowed(
|
.ok_or(ExtractionError::InvalidData(Cow::Borrowed(
|
||||||
"no item section renderer",
|
"no continuation items",
|
||||||
)))?
|
)))?;
|
||||||
.append_continuation_items_action
|
|
||||||
.continuation_items;
|
|
||||||
|
|
||||||
let mut mapper = response::YouTubeListMapper::<YouTubeItem>::new(lang);
|
let mut mapper = response::YouTubeListMapper::<YouTubeItem>::new(lang);
|
||||||
mapper.map_response(items);
|
mapper.map_response(items);
|
||||||
|
|
|
||||||
|
|
@ -140,6 +140,12 @@ pub(crate) struct AlertRenderer {
|
||||||
pub text: String,
|
pub text: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Deserialize)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
|
pub(crate) struct ResponseContext {
|
||||||
|
pub visitor_data: Option<String>,
|
||||||
|
}
|
||||||
|
|
||||||
// CONTINUATION
|
// CONTINUATION
|
||||||
|
|
||||||
#[serde_as]
|
#[serde_as]
|
||||||
|
|
@ -153,8 +159,12 @@ pub(crate) struct Continuation {
|
||||||
alias = "onResponseReceivedCommands",
|
alias = "onResponseReceivedCommands",
|
||||||
alias = "onResponseReceivedEndpoints"
|
alias = "onResponseReceivedEndpoints"
|
||||||
)]
|
)]
|
||||||
#[serde_as(as = "VecSkipError<_>")]
|
#[serde_as(as = "Option<VecSkipError<_>>")]
|
||||||
pub on_response_received_actions: Vec<ContinuationActionWrap>,
|
pub on_response_received_actions: Option<Vec<ContinuationActionWrap>>,
|
||||||
|
/// Used for channel video rich grid renderer
|
||||||
|
///
|
||||||
|
/// A/B test seen on 19.10.2022
|
||||||
|
pub continuation_contents: Option<RichGridContinuationContents>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Deserialize)]
|
#[derive(Debug, Deserialize)]
|
||||||
|
|
@ -173,8 +183,16 @@ pub(crate) struct ContinuationAction {
|
||||||
|
|
||||||
#[derive(Debug, Deserialize)]
|
#[derive(Debug, Deserialize)]
|
||||||
#[serde(rename_all = "camelCase")]
|
#[serde(rename_all = "camelCase")]
|
||||||
pub(crate) struct ResponseContext {
|
pub(crate) struct RichGridContinuationContents {
|
||||||
pub visitor_data: Option<String>,
|
pub rich_grid_continuation: RichGridContinuation,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[serde_as]
|
||||||
|
#[derive(Debug, Deserialize)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
|
pub(crate) struct RichGridContinuation {
|
||||||
|
#[serde_as(as = "VecLogError<_>")]
|
||||||
|
pub contents: MapResult<Vec<YouTubeListItem>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
// YouTube Music
|
// YouTube Music
|
||||||
|
|
|
||||||
|
|
@ -66,8 +66,8 @@ pub(crate) struct VideoResultsWrap {
|
||||||
#[derive(Debug, Deserialize)]
|
#[derive(Debug, Deserialize)]
|
||||||
#[serde(rename_all = "camelCase")]
|
#[serde(rename_all = "camelCase")]
|
||||||
pub(crate) struct VideoResults {
|
pub(crate) struct VideoResults {
|
||||||
#[serde_as(as = "VecLogError<_>")]
|
#[serde_as(as = "Option<VecLogError<_>>")]
|
||||||
pub contents: MapResult<Vec<VideoResultsItem>>,
|
pub contents: Option<MapResult<Vec<VideoResultsItem>>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Video metadata item
|
/// Video metadata item
|
||||||
|
|
|
||||||
|
|
@ -102,7 +102,10 @@ impl MapResponse<VideoDetails> for response::VideoDetails {
|
||||||
.two_column_watch_next_results
|
.two_column_watch_next_results
|
||||||
.results
|
.results
|
||||||
.results
|
.results
|
||||||
.contents;
|
.contents
|
||||||
|
.ok_or(ExtractionError::ContentUnavailable(Cow::Borrowed(
|
||||||
|
"Video not found",
|
||||||
|
)))?;
|
||||||
warnings.append(&mut primary_results.warnings);
|
warnings.append(&mut primary_results.warnings);
|
||||||
|
|
||||||
let mut primary_info = None;
|
let mut primary_info = None;
|
||||||
|
|
|
||||||
Reference in a new issue