From d749500a0466201a55989dd7faa9cac122bf7fc1 Mon Sep 17 00:00:00 2001 From: ThetaDev Date: Sun, 2 Apr 2023 01:15:44 +0200 Subject: [PATCH] fix: A/B test 4, video tab on the trending page --- codegen/src/abtest.rs | 29 +++++++++++++++++++++++++++++ codegen/src/main.rs | 10 ++++++++-- notes/AB_Tests.md | 20 ++++++++++++++++++++ notes/_img/ab_4_new.png | Bin 0 -> 12082 bytes notes/_img/ab_4_old.png | Bin 0 -> 11127 bytes src/client/trends.rs | 5 +++-- tests/youtube.rs | 6 +++--- 7 files changed, 63 insertions(+), 7 deletions(-) create mode 100644 notes/_img/ab_4_new.png create mode 100644 notes/_img/ab_4_old.png diff --git a/codegen/src/abtest.rs b/codegen/src/abtest.rs index 811a90e..6408e58 100644 --- a/codegen/src/abtest.rs +++ b/codegen/src/abtest.rs @@ -15,6 +15,7 @@ pub enum ABTest { AttributedTextDescription = 1, ThreeTabChannelLayout = 2, ChannelHandlesInSearchResults = 3, + TrendsVideoTab = 4, } const TESTS_TO_RUN: [ABTest; 2] = [ @@ -38,6 +39,15 @@ struct QVideo<'a> { racy_check_ok: bool, } +#[derive(Debug, Serialize)] +#[serde(rename_all = "camelCase")] +struct QBrowse<'a> { + context: YTContext<'a>, + browse_id: &'a str, + #[serde(skip_serializing_if = "Option::is_none")] + params: Option<&'a str>, +} + pub async fn run_test( ab: ABTest, n: usize, @@ -72,6 +82,7 @@ pub async fn run_test( ABTest::ChannelHandlesInSearchResults => { channel_handles_in_search_results(&rp, &visitor_data).await } + ABTest::TrendsVideoTab => trends_video_tab(&rp, &visitor_data).await, } .unwrap(); pb.inc(1); @@ -170,3 +181,21 @@ pub async fn channel_handles_in_search_results(rp: &RustyPipe, visitor_data: &st _ => false, })) } + +pub async fn trends_video_tab(rp: &RustyPipe, visitor_data: &str) -> Result { + let query = rp.query().visitor_data(visitor_data); + let context = query.get_context(ClientType::Desktop, true, None).await; + let res = query + .raw( + ClientType::Desktop, + "browse", + &QBrowse { + context, + browse_id: "FEtrending", + params: None, + }, + ) + .await?; + + Ok(res.contains("\"4gIOGgxtb3N0X3BvcHVsYXI%3D\"")) +} diff --git a/codegen/src/main.rs b/codegen/src/main.rs index 003b386..82243c6 100644 --- a/codegen/src/main.rs +++ b/codegen/src/main.rs @@ -81,8 +81,14 @@ async fn main() { n, occurrences as f32 / n as f32 * 100.0 ); - eprintln!("visitor_data (present): {vd_present:?}"); - eprintln!("visitor_data (absent): {vd_absent:?}"); + eprintln!( + "visitor_data (present): {}", + vd_present.as_deref().unwrap_or("n/a") + ); + eprintln!( + "visitor_data (absent): {}", + vd_absent.as_deref().unwrap_or("n/a") + ); } None => { let res = abtest::run_all_tests(n, cli.concurrency).await; diff --git a/notes/AB_Tests.md b/notes/AB_Tests.md index 3af5c71..87bd86a 100644 --- a/notes/AB_Tests.md +++ b/notes/AB_Tests.md @@ -266,3 +266,23 @@ Note that channels without handles still use the old data model, even on the sam } } ``` + +## [4] Video tab on the Trending page + +- **Encountered on:** 1.04.2023 +- **Impact:** 🟢 Low +- **Endpoint:** browse (trending videos) + +YouTube moved the list of trending videos from the main *trending* page to a +separate tab (Videos). + +The video tab is fetched with the params `4gIOGgxtb3N0X3BvcHVsYXI%3D`. The data model +of the video tab did not change. + +**OLD** + +![A/B test 4 old screenshot](./_img/ab_4_old.png) + +**NEW** + +![A/B test 4 old screenshot](./_img/ab_4_new.png) diff --git a/notes/_img/ab_4_new.png b/notes/_img/ab_4_new.png new file mode 100644 index 0000000000000000000000000000000000000000..9a106ade0622d3188e108faaf1abeb9722fe6c99 GIT binary patch literal 12082 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 literal 0 HcmV?d00001 diff --git a/notes/_img/ab_4_old.png b/notes/_img/ab_4_old.png new file mode 100644 index 0000000000000000000000000000000000000000..78dc837449c71a5aa5456e530e9a8d6d4779d5a5 GIT binary patch literal 11127 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 EFCE&s>i_@% literal 0 HcmV?d00001 diff --git a/src/client/trends.rs b/src/client/trends.rs index 5d43316..37922d1 100644 --- a/src/client/trends.rs +++ b/src/client/trends.rs @@ -8,7 +8,7 @@ use crate::{ util::TryRemove, }; -use super::{response, ClientType, MapResponse, QBrowse, RustyPipeQuery}; +use super::{response, ClientType, MapResponse, QBrowse, QBrowseParams, RustyPipeQuery}; impl RustyPipeQuery { /// Get the videos from the YouTube startpage @@ -32,9 +32,10 @@ impl RustyPipeQuery { /// Get the videos from the YouTube trending page pub async fn trending(&self) -> Result, Error> { let context = self.get_context(ClientType::Desktop, true, None).await; - let request_body = QBrowse { + let request_body = QBrowseParams { context, browse_id: "FEtrending", + params: "4gIOGgxtb3N0X3BvcHVsYXI%3D", }; self.execute_request::( diff --git a/tests/youtube.rs b/tests/youtube.rs index cfd5da6..ecbd431 100644 --- a/tests/youtube.rs +++ b/tests/youtube.rs @@ -91,12 +91,12 @@ fn get_player_from_client(#[case] client_type: ClientType, rp: RustyPipe) { .video_only_streams .into_iter() .find(|s| s.itag == 398) - .unwrap(); + .expect("video stream not found"); let audio = player_data .audio_streams .into_iter() .find(|s| s.itag == 251) - .unwrap(); + .expect("audio stream not found"); assert_approx(video.bitrate as f64, 1340829.0); assert_approx(video.average_bitrate as f64, 1233444.0); @@ -1172,7 +1172,7 @@ fn startpage(rp: RustyPipe) { fn trending(rp: RustyPipe) { let result = tokio_test::block_on(rp.query().trending()).unwrap(); - assert_gte(result.len(), 50, "items"); + assert_gte(result.len(), 40, "items"); } //#MUSIC