diff --git a/.forgejo/workflows/ci.yaml b/.forgejo/workflows/ci.yaml index e7610ed..6c53208 100644 --- a/.forgejo/workflows/ci.yaml +++ b/.forgejo/workflows/ci.yaml @@ -28,17 +28,22 @@ jobs: run: | TARGET=$(rustc --version --verbose | grep "host:" | sed -e 's/^host: //') cd ~ - curl -SsL -o rustypipe-botguard.tar.xz "https://codeberg.org/ThetaDev/rustypipe-botguard/releases/download/v0.1.0/rustypipe-botguard-v0.1.0-${TARGET}.tar.xz" + curl -SsL -o rustypipe-botguard.tar.xz "https://codeberg.org/ThetaDev/rustypipe-botguard/releases/download/v0.1.1/rustypipe-botguard-v0.1.1-${TARGET}.tar.xz" cd /usr/local/bin sudo tar -xJf ~/rustypipe-botguard.tar.xz rm ~/rustypipe-botguard.tar.xz rustypipe-botguard --version - name: 📎 Clippy - run: cargo clippy --all --tests --features=rss,indicatif,audiotag -- -D warnings + run: | + cargo clippy --all --tests --features=rss,userdata,indicatif,audiotag -- -D warnings + cargo clippy --package=rustypipe --tests -- -D warnings + cargo clippy --package=rustypipe-downloader -- -D warnings + cargo clippy --package=rustypipe-cli -- -D warnings + cargo clippy --package=rustypipe-cli --features=timezone -- -D warnings - name: 🧪 Test - run: cargo nextest run --config-file ~/.config/nextest.toml --profile ci --retries 2 --features rss --workspace -- --skip 'cookie_auth::' + run: cargo nextest run --config-file ~/.config/nextest.toml --profile ci --retries 2 --features rss,userdata --workspace -- --skip 'user_data::' env: ALL_PROXY: "http://warpproxy:8124" diff --git a/.forgejo/workflows/release-cli.yaml b/.forgejo/workflows/release-cli.yaml new file mode 100644 index 0000000..6268ead --- /dev/null +++ b/.forgejo/workflows/release-cli.yaml @@ -0,0 +1,69 @@ +name: Release CLI +on: + push: + tags: + - "rustypipe-cli/v*.*.*" + +jobs: + Release: + runs-on: cimaster-latest + steps: + - name: 📦 Checkout repository + uses: actions/checkout@v4 + + - name: Setup cross compilation + run: | + rustup target add x86_64-pc-windows-msvc x86_64-apple-darwin aarch64-apple-darwin + cargo install cargo-xwin + + # https://wapl.es/rust/2019/02/17/rust-cross-compile-linux-to-macos.html/ + sudo apt-get install -y llvm clang cmake + cd ~ + git clone https://github.com/tpoechtrager/osxcross + cd osxcross + wget -nc "https://github.com/joseluisq/macosx-sdks/releases/download/12.3/MacOSX12.3.sdk.tar.xz" + mv MacOSX12.3.sdk.tar.xz tarballs/ + UNATTENDED=yes OSX_VERSION_MIN=12.3 ./build.sh + OSXCROSS_BIN="$(pwd)/target/bin" + + echo "CARGO_TARGET_X86_64_APPLE_DARWIN_LINKER=$(find "$OSXCROSS_BIN" -name "x86_64-apple-darwin*-clang")" >> $GITHUB_ENV + echo "CARGO_TARGET_X86_64_APPLE_DARWIN_RUSTFLAGS=-Car=$(find "$OSXCROSS_BIN" -name "x86_64-apple-darwin*-ar"),-Clink-arg=-undefined,-Clink-arg=dynamic_lookup" >> $GITHUB_ENV + echo "CARGO_TARGET_AARCH64_APPLE_DARWIN_LINKER=$(find "$OSXCROSS_BIN" -name "aarch64-apple-darwin*-clang")" >> $GITHUB_ENV + echo "CARGO_TARGET_AARCH64_APPLE_DARWIN_RUSTFLAGS=-Car=$(find "$OSXCROSS_BIN" -name "aarch64-apple-darwin*-ar"),-Clink-arg=-undefined,-Clink-arg=dynamic_lookup" >> $GITHUB_ENV + + - name: ⚒️ Build application + run: | + export PATH="$PATH:$HOME/osxcross/target/bin" + CRATE="rustypipe-cli" + PKG_CONFIG_SYSROOT_DIR=/usr/x86_64-linux-gnu cargo build --release --package=$CRATE --target x86_64-unknown-linux-gnu + PKG_CONFIG_SYSROOT_DIR=/usr/aarch64-linux-gnu cargo build --release --package=$CRATE --target aarch64-unknown-linux-gnu + CC="$CARGO_TARGET_X86_64_APPLE_DARWIN_LINKER" CXX="$CARGO_TARGET_X86_64_APPLE_DARWIN_LINKER++" cargo build --release --package=$CRATE --target x86_64-apple-darwin + CC="$CARGO_TARGET_AARCH64_APPLE_DARWIN_LINKER" CXX="$CARGO_TARGET_AARCH64_APPLE_DARWIN_LINKER++" cargo build --release --package=$CRATE --target aarch64-apple-darwin + cargo xwin build --release --package=$CRATE --target x86_64-pc-windows-msvc + + - name: Prepare release + run: | + CRATE="rustypipe-cli" + BIN="rustypipe" + echo "CRATE=$CRATE" >> "$GITHUB_ENV" + echo "CRATE_VERSION=$(echo '${{ github.ref_name }}' | awk 'BEGIN{RS="/"} NR==2{print}')" >> "$GITHUB_ENV" + CL_PATH="cli/CHANGELOG.md" + { + echo 'CHANGELOG<> "$GITHUB_ENV" + + mkdir dist + + for arch in x86_64-unknown-linux-gnu aarch64-unknown-linux-gnu x86_64-apple-darwin aarch64-apple-darwin; do + tar -cJf "dist/${BIN}-${CRATE_VERSION}-${arch}.tar.xz" -C target/${arch}/release "${BIN}" + done + (cd target/x86_64-pc-windows-msvc/release && zip -9 "../../../dist/${BIN}-${CRATE_VERSION}-x86_64-pc-windows-msvc.zip" "${BIN}.exe") + + - name: 🎉 Publish release + uses: https://gitea.com/actions/release-action@main + with: + title: "${{ env.CRATE }} ${{ env.CRATE_VERSION }}" + body: "${{ env.CHANGELOG }}" + files: dist/* diff --git a/.forgejo/workflows/renovate.yaml b/.forgejo/workflows/renovate.yaml.bak similarity index 100% rename from .forgejo/workflows/renovate.yaml rename to .forgejo/workflows/renovate.yaml.bak diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index d48fd4e..9a0cbb3 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -10,4 +10,8 @@ repos: hooks: - id: cargo-fmt - id: cargo-clippy - args: ["--all", "--tests", "--features=rss,indicatif,audiotag", "--", "-D", "warnings"] + name: cargo-clippy rustypipe + args: ["--package=rustypipe", "--tests", "--", "-D", "warnings"] + - id: cargo-clippy + name: cargo-clippy workspace + args: ["--all", "--tests", "--features=rss,userdata,indicatif,audiotag", "--", "-D", "warnings"] diff --git a/.woodpecker.yml b/.woodpecker.yml deleted file mode 100644 index c76d6d0..0000000 --- a/.woodpecker.yml +++ /dev/null @@ -1,10 +0,0 @@ -steps: - test: - image: rust:latest - environment: - - CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse - commands: - - rustup component add rustfmt clippy - - cargo fmt --all --check - - cargo clippy --all --features=rss -- -D warnings - - cargo test --features=rss --workspace diff --git a/CHANGELOG.md b/CHANGELOG.md index 1a8d160..b44ec1f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,104 @@ All notable changes to this project will be documented in this file. +## [v0.11.4](https://codeberg.org/ThetaDev/rustypipe/compare/rustypipe/v0.11.3..rustypipe/v0.11.4) - 2025-04-23 + +### 🚀 Features + +- Player: handle VPN ban and captcha required error messages - ([be6da5e](https://codeberg.org/ThetaDev/rustypipe/commit/be6da5e7e3558ef39773bf45bcb8afbf006bacec)) + +### 🐛 Bug Fixes + +- Deobfuscator: handle 1-char long global variables, find nsig fn (player 6450230e) - ([d675987](https://codeberg.org/ThetaDev/rustypipe/commit/d675987654972c6aa4cc2b291d25bc49fa60173e)) + + +## [v0.11.3](https://codeberg.org/ThetaDev/rustypipe/compare/rustypipe/v0.11.2..rustypipe/v0.11.3) - 2025-04-03 + +### 🐛 Bug Fixes + +- Deobfuscator: global variable extraction fixed - ([ac44e95](https://codeberg.org/ThetaDev/rustypipe/commit/ac44e95a88d95f9d2d1ec672f86ca9d31d6991b9)) +- Deobfuscator: small simplification - ([189ba81](https://codeberg.org/ThetaDev/rustypipe/commit/189ba81a42e6c09f6af4d2768c449c22b864101e)) +- Deobfuscator: handle global functions as well - ([939a7ae](https://codeberg.org/ThetaDev/rustypipe/commit/939a7aea61a3eee4c1e67bfbfc835f0ce3934171)) +- Handle music playlist/album not found - ([ea80717](https://codeberg.org/ThetaDev/rustypipe/commit/ea80717f692b2c45b5063c362c9fa8ebca5a3471)) +- Switch client if no adaptive stream URLs were returned - ([187bf1c](https://codeberg.org/ThetaDev/rustypipe/commit/187bf1c9a0e846bff205e0d71a19c5a1ce7b1943)) +- Handle music artist not found - ([daf3d03](https://codeberg.org/ThetaDev/rustypipe/commit/daf3d035be38b59aef1ae205ac91c2bbdda2fe66)) + +### ⚙️ Miscellaneous Tasks + +- *(deps)* Update rust crate rand to 0.9.0 - ([af415dd](https://codeberg.org/ThetaDev/rustypipe/commit/af415ddf8f94f00edb918f271d8e6336503e9faf)) + + +## [v0.11.2](https://codeberg.org/ThetaDev/rustypipe/compare/rustypipe/v0.11.1..rustypipe/v0.11.2) - 2025-03-24 + +### 🐛 Bug Fixes + +- A/B test 22: commandExecutorCommand for playlist continuations - ([e8acbfb](https://codeberg.org/ThetaDev/rustypipe/commit/e8acbfbbcf5d31b5ac34410ddf334e5534e3762f)) +- Extract deobf data with global strings variable - ([4ce6746](https://codeberg.org/ThetaDev/rustypipe/commit/4ce6746be538564e79f7e3c67d7a91aaa53f48ea)) +- Handle player returning no adaptive stream URLs - ([07db7b1](https://codeberg.org/ThetaDev/rustypipe/commit/07db7b1166e912e1554f98f2ae20c2c356fed38f)) + + +## [v0.11.1](https://codeberg.org/ThetaDev/rustypipe/compare/rustypipe/v0.11.0..rustypipe/v0.11.1) - 2025-03-16 + +### 🐛 Bug Fixes + +- Simplify get_player_from_clients logic - ([c04b606](https://codeberg.org/ThetaDev/rustypipe/commit/c04b60604d2628bf8f0e3de453c243adbb966e57)) +- Desktop client: generate PO token from user_syncid when authenticated - ([8342cae](https://codeberg.org/ThetaDev/rustypipe/commit/8342caeb0f566a38060a6ec69f3ca65b9a2afcd6)) +- Always skip failed clients - ([63a6f50](https://codeberg.org/ThetaDev/rustypipe/commit/63a6f50a8b5ad6bb984282335c1481ae3cd2fe83)) + +### ⚙️ Miscellaneous Tasks + +- *(deps)* Update rust crate rstest to 0.25.0 - ([9ed1306](https://codeberg.org/ThetaDev/rustypipe/commit/9ed1306f3aaeb993c409997ddfbc47499e4f4d22)) + + +## [v0.11.0](https://codeberg.org/ThetaDev/rustypipe/compare/rustypipe/v0.10.0..rustypipe/v0.11.0) - 2025-02-26 + +### 🚀 Features + +- Add original album track count, fix fetching albums with more than 200 tracks - ([544782f](https://codeberg.org/ThetaDev/rustypipe/commit/544782f8de728cda0aca9a1cb95837cdfbd001f1)) + +### 🐛 Bug Fixes + +- A/B test 21: music album recommendations - ([6737512](https://codeberg.org/ThetaDev/rustypipe/commit/6737512f5f67c8cd05d4552dd0e0f24381035b35)) + + +## [v0.10.0](https://codeberg.org/ThetaDev/rustypipe/compare/rustypipe/v0.9.0..rustypipe/v0.10.0) - 2025-02-09 + +### 🚀 Features + +- Add visitor data cache, remove random visitor data - ([b12f4c5](https://codeberg.org/ThetaDev/rustypipe/commit/b12f4c5d821a9189d7ed8410ad860824b6d052ef)) +- Add support for rustypipe-botguard to get PO tokens - ([b90a252](https://codeberg.org/ThetaDev/rustypipe/commit/b90a252a5e1bf05a5294168b0ec16a73cbb88f42)) +- Add session po token cache - ([b72b501](https://codeberg.org/ThetaDev/rustypipe/commit/b72b501b6dbcf4333b24cd80e7c8c61b0c21ec91)) +- Check rustypipe-botguard-api version - ([8385b87](https://codeberg.org/ThetaDev/rustypipe/commit/8385b87c63677f32a240679a78702f53072e517a)) +- Rewrite request attempt system, retry with different visitor data - ([dfd03ed](https://codeberg.org/ThetaDev/rustypipe/commit/dfd03edfadff2657e9cfbf04e5d313ba409520ac)) +- Log failed player fetch attempts with player_from_clients - ([8e35358](https://codeberg.org/ThetaDev/rustypipe/commit/8e35358c8941301f6ebf7646a11ab22711082569)) +- Add timezone query option - ([3a2370b](https://codeberg.org/ThetaDev/rustypipe/commit/3a2370b97ca3d0f40d72d66a23295557317d29fb)) +- [**breaking**] Add userdata feature for all personal data queries (playback history, subscriptions) - ([65cb424](https://codeberg.org/ThetaDev/rustypipe/commit/65cb4244c6ab547f53d0cb12af802c4189188c86)) +- Add RustyPipe::version_botguard fn, detect rustypipe-botguard in current dir, add botguard version to report - ([1d755b7](https://codeberg.org/ThetaDev/rustypipe/commit/1d755b76bf4569f7d0bb90a65494ac8e7aae499a)) + +### 🐛 Bug Fixes + +- Parsing history dates - ([af7dc10](https://codeberg.org/ThetaDev/rustypipe/commit/af7dc1016322a87dd8fec0b739939c2b12b6f400)) +- A/V streams incorrectly recognized as video-only - ([2b891ca](https://codeberg.org/ThetaDev/rustypipe/commit/2b891ca0788f91f16dbb9203191cb3d2092ecc74)) +- Update iOS client - ([e915416](https://codeberg.org/ThetaDev/rustypipe/commit/e91541629d6c944c1001f5883e3c1264aeeb3969)) +- A/B test 20: music continuation item renderer - ([9c67f8f](https://codeberg.org/ThetaDev/rustypipe/commit/9c67f8f85bef8214848dc9d17bff6cff252e015e)) +- Include whole request body in report - ([15245c1](https://codeberg.org/ThetaDev/rustypipe/commit/15245c18b584e42523762b94fcc7284d483660a0)) +- Extracting nsig fn when outside variable starts with $ - ([eda16e3](https://codeberg.org/ThetaDev/rustypipe/commit/eda16e378730a3b57c4982a626df1622a93c574a)) +- Retry updating deobf data after a RustyPipe update - ([50ab1f7](https://codeberg.org/ThetaDev/rustypipe/commit/50ab1f7a5d8aeaa3720264b4a4b27805bb0e8121)) +- Allow player data to be fetched without botguard - ([29c854b](https://codeberg.org/ThetaDev/rustypipe/commit/29c854b20d7a6677415b1744e7ba7ecd4f594ea5)) +- Output full request body in reports, clean up `get_player_po_token` - ([a0d850f](https://codeberg.org/ThetaDev/rustypipe/commit/a0d850f8e01428a73bbd66397d0dbf797b45958f)) +- Correct timezone offset for parsed dates, add timezone_local option - ([a5a7be5](https://codeberg.org/ThetaDev/rustypipe/commit/a5a7be5b4e0a0b73d7e1dc802ebd7bd48dafc76d)) +- Use localzone crate to get local tz - ([5acbf0e](https://codeberg.org/ThetaDev/rustypipe/commit/5acbf0e456b1f10707e0a56125d993a8129eee3a)) +- Only use cached potokens with min. 10min lifetime - ([0c94267](https://codeberg.org/ThetaDev/rustypipe/commit/0c94267d0371b2b26c7b5c9abfa156d5cde2153e)) + +### 📚 Documentation + +- Add Botguard info to README - ([9957add](https://codeberg.org/ThetaDev/rustypipe/commit/9957add2b5d6391b2c1869d2019fd7dd91b8cd41)) + +### ⚙️ Miscellaneous Tasks + +- *(deps)* Update rust crate rquickjs to 0.9.0 (#33) - ([2c8ac41](https://codeberg.org/ThetaDev/rustypipe/commit/2c8ac410aa535d83f8bcc7181f81914b13bceb77)) + + ## [v0.9.0](https://codeberg.org/ThetaDev/rustypipe/compare/rustypipe/v0.8.0..rustypipe/v0.9.0) - 2025-01-16 ### 🚀 Features diff --git a/Cargo.toml b/Cargo.toml index efc8ce3..ae8bbec 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rustypipe" -version = "0.9.0" +version = "0.11.4" rust-version = "1.67.1" edition.workspace = true authors.workspace = true @@ -40,11 +40,12 @@ serde_with = { version = "3.0.0", default-features = false, features = [ ] } serde_plain = "1.0.0" sha1 = "0.10.0" -rand = "0.8.0" +rand = "0.9.0" time = { version = "0.3.37", features = [ "macros", "serde-human-readable", "serde-well-known", + "local-offset", ] } futures-util = "0.3.31" ress = "0.11.0" @@ -54,6 +55,7 @@ data-encoding = "2.0.0" urlencoding = "2.1.0" quick-xml = { version = "0.37.0", features = ["serialize"] } tracing = { version = "0.1.0", features = ["log"] } +localzone = "0.3.1" # CLI indicatif = "0.17.0" @@ -65,15 +67,15 @@ dirs = "6.0.0" filenamify = "0.1.0" # Testing -rstest = "0.24.0" +rstest = "0.25.0" tokio-test = "0.4.2" insta = { version = "1.17.1", features = ["ron", "redactions"] } path_macro = "1.0.0" tracing-test = "0.2.5" # Included crates -rustypipe = { path = ".", version = "0.9.0", default-features = false } -rustypipe-downloader = { path = "./downloader", version = "0.2.1", default-features = false, features = [ +rustypipe = { path = ".", version = "0.11.4", default-features = false } +rustypipe-downloader = { path = "./downloader", version = "0.3.1", default-features = false, features = [ "indicatif", "audiotag", ] } @@ -82,6 +84,7 @@ rustypipe-downloader = { path = "./downloader", version = "0.2.1", default-featu default = ["default-tls"] rss = ["dep:quick-xml"] +userdata = [] # Reqwest TLS options default-tls = ["reqwest/default-tls"] @@ -112,6 +115,7 @@ phf.workspace = true data-encoding.workspace = true urlencoding.workspace = true tracing.workspace = true +localzone.workspace = true quick-xml = { workspace = true, optional = true } [dev-dependencies] @@ -123,6 +127,6 @@ tracing-test.workspace = true [package.metadata.docs.rs] # To build locally: -# RUSTDOCFLAGS="--cfg docsrs" cargo +nightly doc --features rss --no-deps --open -features = ["rss"] +# RUSTDOCFLAGS="--cfg docsrs" cargo +nightly doc --features rss,userdata --no-deps --open +features = ["rss", "userdata"] rustdoc-args = ["--cfg", "docsrs"] diff --git a/Justfile b/Justfile index 76e8102..d8bd7aa 100644 --- a/Justfile +++ b/Justfile @@ -1,19 +1,19 @@ test: - # cargo test --features=rss - cargo nextest run --workspace --features=rss --no-fail-fast --retries 1 -- --skip 'cookie_auth::' + # cargo test --features=rss,userdata + cargo nextest run --workspace --features=rss,userdata --no-fail-fast --retries 1 -- --skip 'user_data::' unittest: - cargo nextest run --features=rss --no-fail-fast --lib + cargo nextest run --features=rss,userdata --no-fail-fast --lib testyt: - cargo nextest run --features=rss --no-fail-fast --retries 1 --test youtube -- --skip 'cookie_auth::' + cargo nextest run --features=rss,userdata --no-fail-fast --retries 1 --test youtube -- --skip 'user_data::' testyt-cookie: - cargo nextest run --features=rss --no-fail-fast --retries 1 --test youtube + cargo nextest run --features=rss,userdata --no-fail-fast --retries 1 --test youtube testyt-localized: - YT_LANG=th cargo nextest run --features=rss --no-fail-fast --retries 1 --test youtube -- \ - --skip 'cookie_auth::' --skip 'search_suggestion' --skip 'isrc_search_languages' + YT_LANG=th cargo nextest run --features=rss,userdata --no-fail-fast --retries 1 --test youtube -- \ + --skip 'user_data::' --skip 'search_suggestion' --skip 'isrc_search_languages' testintl: #!/usr/bin/env bash @@ -33,7 +33,7 @@ testintl: echo "---TESTS FOR $YT_LANG ---" if YT_LANG="$YT_LANG" cargo nextest run --no-fail-fast --retries 1 --test-threads 4 --test youtube -- \ - --skip 'cookie_auth::' --skip 'search_suggestion' --skip 'isrc_search_languages' --skip 'resolve_'; then + --skip 'user_data::' --skip 'search_suggestion' --skip 'isrc_search_languages' --skip 'resolve_'; then echo "--- $YT_LANG COMPLETED ---" else echo "--- $YT_LANG FAILED ---" diff --git a/README.md b/README.md index c4df0c2..767680f 100644 --- a/README.md +++ b/README.md @@ -181,6 +181,19 @@ Subscribers: 1780000 ... ``` +## Crate features + +Some features of RustyPipe are gated behind features to avoid compiling unneeded +dependencies. + +- `rss` Fetch a channel's RSS feed, which is faster than fetching the channel page +- `userdata` Add functions to fetch YouTube user data (watch history, subscriptions, + music library) + +You can also choose the TLS library used for making web requests using the same features +as the reqwest crate (`default-tls`, `native-tls`, `native-tls-alpn`, +`native-tls-vendored`, `rustls-tls-webpki-roots`, `rustls-tls-native-roots`). + ## Cache storage The RustyPipe cache holds the current version numbers for all clients, the JavaScript @@ -213,6 +226,21 @@ RustyPipe reports come in 3 severity levels: incomplete) - ERR (entire response could not be deserialized/parsed, RustyPipe returned an error) +## PO tokens + +Since August 2024 YouTube requires PO tokens to access streams from web-based clients +(Desktop, Mobile). Otherwise streams will return a 403 error. + +Generating PO tokens requires a simulated browser environment, which would be too large +to include in RustyPipe directly. + +Therefore, the PO token generation is handled by a seperate CLI application +([rustypipe-botguard](https://codeberg.org/ThetaDev/rustypipe-botguard)) which is called +by the RustyPipe crate. RustyPipe automatically detects the rustypipe-botguard binary if +it is located in PATH or the current working directory. If your rustypipe-botguard +binary is located at a different path, you can specify it with the `.botguard_bin(path)` +option. + ## Authentication RustyPipe supports authenticating with your YouTube account to access diff --git a/cli/CHANGELOG.md b/cli/CHANGELOG.md index 9ebf81a..efe7ee5 100644 --- a/cli/CHANGELOG.md +++ b/cli/CHANGELOG.md @@ -3,6 +3,52 @@ All notable changes to this project will be documented in this file. +## [v0.7.2](https://codeberg.org/ThetaDev/rustypipe/compare/rustypipe-cli/v0.7.1..rustypipe-cli/v0.7.2) - 2025-03-16 + +### ⚙️ Miscellaneous Tasks + +- *(deps)* Update rustypipe to 0.11.1 +- *(deps)* Update rustypipe-downloader to 0.3.1 +- *(deps)* Update rust crate rstest to 0.25.0 - ([9ed1306](https://codeberg.org/ThetaDev/rustypipe/commit/9ed1306f3aaeb993c409997ddfbc47499e4f4d22)) + + +## [v0.7.1](https://codeberg.org/ThetaDev/rustypipe/compare/rustypipe-cli/v0.7.0..rustypipe-cli/v0.7.1) - 2025-02-26 + +### ⚙️ Miscellaneous Tasks + +- *(deps)* Update rustypipe to 0.11.0 - ([035c07f](https://codeberg.org/ThetaDev/rustypipe/commit/035c07f170aa293bcc626f27998c2b2b28660881)) + + +## [v0.7.0](https://codeberg.org/ThetaDev/rustypipe/compare/rustypipe-cli/v0.6.0..rustypipe-cli/v0.7.0) - 2025-02-09 + +### 🚀 Features + +- Add support for rustypipe-botguard to get PO tokens - ([b90a252](https://codeberg.org/ThetaDev/rustypipe/commit/b90a252a5e1bf05a5294168b0ec16a73cbb88f42)) +- [**breaking**] Remove manual PO token options from downloader/cli, add new rustypipe-botguard options - ([cddb32f](https://codeberg.org/ThetaDev/rustypipe/commit/cddb32f190276265258c6ab45b3d43a8891c4b39)) +- Add session po token cache - ([b72b501](https://codeberg.org/ThetaDev/rustypipe/commit/b72b501b6dbcf4333b24cd80e7c8c61b0c21ec91)) +- Add timezone query option - ([3a2370b](https://codeberg.org/ThetaDev/rustypipe/commit/3a2370b97ca3d0f40d72d66a23295557317d29fb)) +- Add --timezone-local CLI option - ([4f2bb47](https://codeberg.org/ThetaDev/rustypipe/commit/4f2bb47ab42ae0c68a64f3b3c2831fa7850b6f56)) +- Add verbose flag - ([629b590](https://codeberg.org/ThetaDev/rustypipe/commit/629b5905da653c6fe0f3c6b5814dd2f49030e7ed)) + +### 🐛 Bug Fixes + +- Parsing mixed-case language codes like zh-CN - ([9c73ed4](https://codeberg.org/ThetaDev/rustypipe/commit/9c73ed4b3008cb093c0fa7fd94fd9f1ba8cd3627)) + +### 🚜 Refactor + +- [**breaking**] Add client_type field to DownloadError, rename cli option po-token-cache to pot-cache - ([594e675](https://codeberg.org/ThetaDev/rustypipe/commit/594e675b39efc5fbcdbd5e920a4d2cdee64f718e)) +- Rename rustypipe-cli binary to rustypipe - ([c1a872e](https://codeberg.org/ThetaDev/rustypipe/commit/c1a872e1c14ea0956053bd7c65f6875b1cb3bc55)) + +### 📚 Documentation + +- Add Botguard info to README - ([9957add](https://codeberg.org/ThetaDev/rustypipe/commit/9957add2b5d6391b2c1869d2019fd7dd91b8cd41)) + +### ⚙️ Miscellaneous Tasks + +- *(deps)* Update rustypipe to 0.10.0 +- *(deps)* Update rust crate rquickjs to 0.9.0 (#33) - ([2c8ac41](https://codeberg.org/ThetaDev/rustypipe/commit/2c8ac410aa535d83f8bcc7181f81914b13bceb77)) + + ## [v0.6.0](https://codeberg.org/ThetaDev/rustypipe/compare/rustypipe-cli/v0.5.0..rustypipe-cli/v0.6.0) - 2025-01-16 ### 🚀 Features diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 519d210..175f4cd 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rustypipe-cli" -version = "0.6.0" +version = "0.7.2" rust-version = "1.70.0" edition.workspace = true authors.workspace = true @@ -12,6 +12,7 @@ description = "CLI for RustyPipe - download videos and extract data from YouTube [features] default = ["native-tls"] +timezone = ["dep:time", "dep:time-tz"] # Reqwest TLS options native-tls = [ @@ -41,7 +42,7 @@ rustls-tls-native-roots = [ ] [dependencies] -rustypipe = { workspace = true, features = ["rss"] } +rustypipe = { workspace = true, features = ["rss", "userdata"] } rustypipe-downloader.workspace = true reqwest.workspace = true tokio = { workspace = true, features = ["macros", "rt-multi-thread"] } @@ -49,6 +50,8 @@ futures-util.workspace = true serde.workspace = true serde_json.workspace = true quick-xml.workspace = true +time = { workspace = true, optional = true } +time-tz = { version = "2.0.0", optional = true } indicatif.workspace = true anyhow.workspace = true @@ -61,3 +64,7 @@ dirs.workspace = true anstream = "0.6.15" owo-colors = "4.0.0" const_format = "0.2.33" + +[[bin]] +name = "rustypipe" +path = "src/main.rs" diff --git a/cli/README.md b/cli/README.md index b4056c4..7474f0a 100644 --- a/cli/README.md +++ b/cli/README.md @@ -8,7 +8,19 @@ The RustyPipe CLI is a powerful YouTube client for the command line. It allows y access most of the features of the RustyPipe crate: getting data from YouTube and downloading videos. -The following subcommands are included: +## Installation + +You can download a compiled version of RustyPipe here: + + +Alternatively, you can compile it yourself by installing [Rust](https://rustup.rs/) and +running `cargo install rustypipe-cli`. + +To be able to access streams from web-based clients (Desktop, Mobile) you need to +download [rustypipe-botguard](https://codeberg.org/ThetaDev/rustypipe-botguard/releases) +and place the binary either in the PATH or the current working directory. + +For downloading videos you also need to have ffmpeg installed. ## `get`: Fetch information @@ -127,14 +139,21 @@ Fetch a list of all the items saved in your YouTube/YouTube Music profile. - **Proxy:** RustyPipe respects the environment variables `HTTP_PROXY`, `HTTPS_PROXY` and `ALL_PROXY` -- **Logging:** You can change the log level with the `RUST_LOG` environment variable, it - is set to `info` by default +- **Logging:** Enable debug logging with the `-v` (verbose) flag. If you want more + fine-grained control, use the `RUST_LOG` environment variable. - **Visitor data:** A custom visitor data ID can be used with the `--vdata` flag - **Authentication:** Use the commands `rustypipe login` and `rustypipe login --cookie` to log into your Google account using either OAuth or YouTube cookies. With the `--auth` flag you can use authentication for any request. - `--lang` Change the YouTube content language - `--country` Change the YouTube content country +- `--tz` Use a specific + [timezone](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) (e.g. + Europe/Berlin, Australia/Sydney) + + **Note:** this requires building rustypipe-cli with the `timezone` feature + +- `--local-tz` Use the local timezone instead of UTC - `--report` Generate a report on every request and store it in a `rustypipe_reports` folder in the current directory - `--cache-file` Change the RustyPipe cache file location (Default: diff --git a/cli/src/main.rs b/cli/src/main.rs index 7f49119..b226221 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -55,6 +55,13 @@ struct Cli { /// YouTube content country #[clap(long, global = true)] country: Option, + /// Use a specific timezone (e.g. Europe/Berlin, Australia/Sydney) + #[cfg(feature = "timezone")] + #[clap(long, global = true)] + tz: Option, + /// Use local timezone + #[clap(long, global = true)] + tz_local: bool, /// Use authentication #[clap(long, global = true)] auth: bool, @@ -73,6 +80,9 @@ struct Cli { /// Enable caching for session-bound PO tokens #[clap(long, global = true)] pot_cache: bool, + /// Enable debug logging + #[clap(short, long, global = true)] + verbose: bool, } #[derive(Parser)] @@ -871,12 +881,15 @@ async fn run() -> anyhow::Result<()> { let cli = Cli::parse(); let multi = MultiProgress::new(); + let mut env_filter = EnvFilter::builder() + .with_default_directive(LevelFilter::INFO.into()) + .from_env_lossy(); + if cli.verbose { + env_filter = env_filter.add_directive("rustypipe=debug".parse().unwrap()); + } + tracing_subscriber::fmt::SubscriberBuilder::default() - .with_env_filter( - EnvFilter::builder() - .with_default_directive(LevelFilter::INFO.into()) - .from_env_lossy(), - ) + .with_env_filter(env_filter) .with_writer(ProgWriter(multi.clone())) .init(); @@ -913,6 +926,23 @@ async fn run() -> anyhow::Result<()> { if let Some(botguard_bin) = cli.botguard_bin { rp = rp.botguard_bin(botguard_bin); } + if cli.tz_local { + rp = rp.timezone_local(); + } + + #[cfg(feature = "timezone")] + if let Some(timezone) = cli.tz { + use time::OffsetDateTime; + use time_tz::{Offset, TimeZone}; + + let tz = time_tz::timezones::get_by_name(&timezone).expect("invalid timezone"); + let offset = tz + .get_offset_utc(&OffsetDateTime::now_utc()) + .to_utc() + .whole_minutes(); + rp = rp.timezone(tz.name(), offset); + } + if cli.no_botguard { rp = rp.no_botguard(); } diff --git a/codegen/Cargo.toml b/codegen/Cargo.toml index 0ccb5ac..4b602d8 100644 --- a/codegen/Cargo.toml +++ b/codegen/Cargo.toml @@ -9,7 +9,7 @@ repository.workspace = true publish = false [dependencies] -rustypipe = { path = "../" } +rustypipe = { path = "../", features = ["userdata"] } reqwest.workspace = true tokio = { workspace = true, features = ["rt-multi-thread"] } futures-util.workspace = true diff --git a/codegen/src/abtest.rs b/codegen/src/abtest.rs index 91aaf5e..de8001a 100644 --- a/codegen/src/abtest.rs +++ b/codegen/src/abtest.rs @@ -40,12 +40,15 @@ pub enum ABTest { MusicPlaylistFacepile = 18, MusicAlbumGroupsReordered = 19, MusicContinuationItemRenderer = 20, + AlbumRecommends = 21, + CommandExecutorCommand = 22, } /// List of active A/B tests that are run when none is manually specified const TESTS_TO_RUN: &[ABTest] = &[ ABTest::MusicAlbumGroupsReordered, - ABTest::MusicContinuationItemRenderer, + ABTest::AlbumRecommends, + ABTest::CommandExecutorCommand, ]; #[derive(Debug, Serialize, Deserialize)] @@ -121,6 +124,8 @@ pub async fn run_test( ABTest::MusicContinuationItemRenderer => { music_continuation_item_renderer(&query).await } + ABTest::AlbumRecommends => album_recommends(&query).await, + ABTest::CommandExecutorCommand => command_executor_command(&query).await, } .unwrap(); pb.inc(1); @@ -443,3 +448,33 @@ pub async fn music_continuation_item_renderer(rp: &RustyPipeQuery) -> Result Result { + let id = "MPREb_u1I69lSAe5v"; + let res = rp + .raw( + ClientType::DesktopMusic, + "browse", + &QBrowse { + browse_id: id, + params: None, + }, + ) + .await?; + Ok(res.contains("\"musicCarouselShelfRenderer\"")) +} + +pub async fn command_executor_command(rp: &RustyPipeQuery) -> Result { + let id = "VLPLbZIPy20-1pN7mqjckepWF78ndb6ci_qi"; + let res = rp + .raw( + ClientType::Desktop, + "browse", + &QBrowse { + browse_id: id, + params: None, + }, + ) + .await?; + Ok(res.contains("\"commandExecutorCommand\"")) +} diff --git a/codegen/src/collect_album_versions_titles.rs b/codegen/src/collect_album_versions_titles.rs new file mode 100644 index 0000000..0cb513c --- /dev/null +++ b/codegen/src/collect_album_versions_titles.rs @@ -0,0 +1,130 @@ +use std::{collections::BTreeMap, fs::File, io::BufReader}; + +use path_macro::path; +use rustypipe::{ + client::{ClientType, RustyPipe}, + param::{Language, LANGUAGES}, +}; +use serde::Deserialize; +use serde_with::rust::deserialize_ignore_any; + +use crate::{ + model::{QBrowse, SectionList, TextRuns}, + util::{self, DICT_DIR}, +}; + +pub async fn collect_album_versions_titles() { + let json_path = path!(*DICT_DIR / "other_versions_titles.json"); + let mut res = BTreeMap::new(); + + let rp = RustyPipe::new(); + + for lang in LANGUAGES { + let query = QBrowse { + browse_id: "MPREb_nlBWQROfvjo", + params: None, + }; + let raw_resp = rp + .query() + .lang(lang) + .raw(ClientType::DesktopMusic, "browse", &query) + .await + .unwrap(); + let data = serde_json::from_str::(&raw_resp).unwrap(); + let title = data + .contents + .two_column_browse_results_renderer + .secondary_contents + .section_list_renderer + .contents + .into_iter() + .find_map(|x| match x { + ItemSection::MusicCarouselShelfRenderer(music_carousel_shelf) => { + Some(music_carousel_shelf) + } + ItemSection::None => None, + }) + .expect("other versions") + .header + .expect("header") + .music_carousel_shelf_basic_header_renderer + .title + .runs + .into_iter() + .next() + .unwrap() + .text; + println!("{lang}: {title}"); + res.insert(lang, title); + } + + let file = File::create(json_path).unwrap(); + serde_json::to_writer_pretty(file, &res).unwrap(); +} + +pub fn write_samples_to_dict() { + let json_path = path!(*DICT_DIR / "other_versions_titles.json"); + let json_file = File::open(json_path).unwrap(); + let collected: BTreeMap = + serde_json::from_reader(BufReader::new(json_file)).unwrap(); + let mut dict = util::read_dict(); + let langs = dict.keys().copied().collect::>(); + + for lang in langs { + let dict_entry = dict.entry(lang).or_default(); + + let e = collected.get(&lang).unwrap(); + assert_eq!(e, e.trim()); + dict_entry.album_versions_title = e.to_owned(); + + for lang in &dict_entry.equivalent { + let ee = collected.get(lang).unwrap(); + if ee != e { + panic!("equivalent lang conflict, lang: {lang}"); + } + } + } + + util::write_dict(dict); +} + +#[derive(Debug, Deserialize)] +struct AlbumData { + contents: AlbumDataContents, +} + +#[derive(Debug, Deserialize)] +#[serde(rename_all = "camelCase")] +struct AlbumDataContents { + two_column_browse_results_renderer: X1, +} + +#[derive(Debug, Deserialize)] +#[serde(rename_all = "camelCase")] +struct X1 { + secondary_contents: SectionList, +} + +#[derive(Debug, Deserialize)] +#[serde(rename_all = "camelCase")] +enum ItemSection { + MusicCarouselShelfRenderer(MusicCarouselShelf), + #[serde(other, deserialize_with = "deserialize_ignore_any")] + None, +} + +#[derive(Debug, Deserialize)] +struct MusicCarouselShelf { + header: Option, +} + +#[derive(Debug, Deserialize)] +#[serde(rename_all = "camelCase")] +struct MusicCarouselShelfHeader { + music_carousel_shelf_basic_header_renderer: MusicCarouselShelfHeaderRenderer, +} + +#[derive(Debug, Deserialize)] +struct MusicCarouselShelfHeaderRenderer { + title: TextRuns, +} diff --git a/codegen/src/collect_video_durations.rs b/codegen/src/collect_video_durations.rs index 9ee06df..cfb5a64 100644 --- a/codegen/src/collect_video_durations.rs +++ b/codegen/src/collect_video_durations.rs @@ -204,8 +204,6 @@ pub fn parse_video_durations() { parse(&mut words, lang, dict_entry.by_char, txt, *d); } - // dbg!(&words); - for (k, v) in words { if let Some(v) = v { dict_entry.timeago_tokens.insert(k, v.to_string()); diff --git a/codegen/src/download_testfiles.rs b/codegen/src/download_testfiles.rs index 9e6f2bf..cd85654 100644 --- a/codegen/src/download_testfiles.rs +++ b/codegen/src/download_testfiles.rs @@ -39,9 +39,6 @@ pub async fn download_testfiles() { search_playlists().await; search_empty().await; trending().await; - history().await; - subscriptions().await; - subscription_feed().await; music_playlist().await; music_playlist_cont().await; @@ -65,6 +62,12 @@ pub async fn download_testfiles() { music_charts().await; music_genres().await; music_genre().await; + + // User data + history().await; + subscriptions().await; + subscription_feed().await; + music_history().await; music_saved_artists().await; music_saved_albums().await; @@ -464,7 +467,7 @@ async fn trending() { } async fn history() { - let json_path = path!(*TESTFILES_DIR / "history" / "history.json"); + let json_path = path!(*TESTFILES_DIR / "userdata" / "history.json"); if json_path.exists() { return; } @@ -474,7 +477,7 @@ async fn history() { } async fn subscriptions() { - let json_path = path!(*TESTFILES_DIR / "history" / "subscriptions.json"); + let json_path = path!(*TESTFILES_DIR / "userdata" / "subscriptions.json"); if json_path.exists() { return; } @@ -484,7 +487,7 @@ async fn subscriptions() { } async fn subscription_feed() { - let json_path = path!(*TESTFILES_DIR / "history" / "subscription_feed.json"); + let json_path = path!(*TESTFILES_DIR / "userdata" / "subscription_feed.json"); if json_path.exists() { return; } @@ -816,7 +819,7 @@ async fn music_genre() { } async fn music_history() { - let json_path = path!(*TESTFILES_DIR / "music_history" / "music_history.json"); + let json_path = path!(*TESTFILES_DIR / "music_userdata" / "music_history.json"); if json_path.exists() { return; } @@ -826,7 +829,7 @@ async fn music_history() { } async fn music_saved_artists() { - let json_path = path!(*TESTFILES_DIR / "music_history" / "saved_artists.json"); + let json_path = path!(*TESTFILES_DIR / "music_userdata" / "saved_artists.json"); if json_path.exists() { return; } @@ -836,7 +839,7 @@ async fn music_saved_artists() { } async fn music_saved_albums() { - let json_path = path!(*TESTFILES_DIR / "music_history" / "saved_albums.json"); + let json_path = path!(*TESTFILES_DIR / "music_userdata" / "saved_albums.json"); if json_path.exists() { return; } @@ -846,7 +849,7 @@ async fn music_saved_albums() { } async fn music_saved_tracks() { - let json_path = path!(*TESTFILES_DIR / "music_history" / "saved_tracks.json"); + let json_path = path!(*TESTFILES_DIR / "music_userdata" / "saved_tracks.json"); if json_path.exists() { return; } @@ -856,7 +859,7 @@ async fn music_saved_tracks() { } async fn music_saved_playlists() { - let json_path = path!(*TESTFILES_DIR / "music_history" / "saved_playlists.json"); + let json_path = path!(*TESTFILES_DIR / "music_userdata" / "saved_playlists.json"); if json_path.exists() { return; } diff --git a/codegen/src/gen_dictionary.rs b/codegen/src/gen_dictionary.rs index e5ce310..549fb83 100644 --- a/codegen/src/gen_dictionary.rs +++ b/codegen/src/gen_dictionary.rs @@ -90,6 +90,8 @@ pub(crate) struct Entry { pub chan_prefix: &'static str, /// Channel name suffix on playlist pages pub chan_suffix: &'static str, + /// "Other versions" title on album pages + pub album_versions_title: &'static str, } "#; @@ -178,8 +180,8 @@ pub(crate) fn entry(lang: Language) -> Entry { .to_string() .replace('\n', "\n "); - write!(code_timeago_tokens, "{} => Entry {{\n timeago_tokens: {},\n month_before_day: {:?},\n months: {},\n timeago_nd_tokens: {},\n comma_decimal: {:?},\n number_tokens: {},\n number_nd_tokens: {},\n album_types: {},\n chan_prefix: {:?},\n chan_suffix: {:?},\n }},\n ", - selector, code_ta_tokens, entry.month_before_day, code_months, code_ta_nd_tokens, entry.comma_decimal, code_number_tokens, code_number_nd_tokens, code_album_types, entry.chan_prefix, entry.chan_suffix).unwrap(); + write!(code_timeago_tokens, "{} => Entry {{\n timeago_tokens: {},\n month_before_day: {:?},\n months: {},\n timeago_nd_tokens: {},\n comma_decimal: {:?},\n number_tokens: {},\n number_nd_tokens: {},\n album_types: {},\n chan_prefix: {:?},\n chan_suffix: {:?},\n album_versions_title: {:?},\n }},\n ", + selector, code_ta_tokens, entry.month_before_day, code_months, code_ta_nd_tokens, entry.comma_decimal, code_number_tokens, code_number_nd_tokens, code_album_types, entry.chan_prefix, entry.chan_suffix, entry.album_versions_title).unwrap(); } code_timeago_tokens = code_timeago_tokens.trim_end().to_owned() + "\n }\n}\n"; diff --git a/codegen/src/main.rs b/codegen/src/main.rs index 87f484f..74b5d85 100644 --- a/codegen/src/main.rs +++ b/codegen/src/main.rs @@ -2,6 +2,7 @@ mod abtest; mod collect_album_types; +mod collect_album_versions_titles; mod collect_chan_prefixes; mod collect_history_dates; mod collect_large_numbers; @@ -34,12 +35,14 @@ enum Commands { CollectHistoryDates, CollectMusicHistoryDates, CollectChanPrefixes, + CollectAlbumVersionsTitles, ParsePlaylistDates, ParseHistoryDates, ParseLargeNumbers, ParseAlbumTypes, ParseVideoDurations, ParseChanPrefixes, + ParseAlbumVersionsTitles, GenLocales, GenDict, DownloadTestfiles, @@ -58,28 +61,25 @@ async fn main() { match cli.command { Commands::CollectPlaylistDates => { - collect_playlist_dates::collect_dates(cli.concurrency).await; + collect_playlist_dates::collect_dates(cli.concurrency).await } Commands::CollectLargeNumbers => { - collect_large_numbers::collect_large_numbers(cli.concurrency).await; + collect_large_numbers::collect_large_numbers(cli.concurrency).await } Commands::CollectAlbumTypes => { - collect_album_types::collect_album_types(cli.concurrency).await; + collect_album_types::collect_album_types(cli.concurrency).await } Commands::CollectVideoDurations => { - collect_video_durations::collect_video_durations(cli.concurrency).await; + collect_video_durations::collect_video_durations(cli.concurrency).await } Commands::CollectVideoDates => { - collect_video_dates::collect_video_dates(cli.concurrency).await; + collect_video_dates::collect_video_dates(cli.concurrency).await } - Commands::CollectHistoryDates => { - collect_history_dates::collect_dates().await; - } - Commands::CollectMusicHistoryDates => { - collect_history_dates::collect_dates_music().await; - } - Commands::CollectChanPrefixes => { - collect_chan_prefixes::collect_chan_prefixes().await; + Commands::CollectHistoryDates => collect_history_dates::collect_dates().await, + Commands::CollectMusicHistoryDates => collect_history_dates::collect_dates_music().await, + Commands::CollectChanPrefixes => collect_chan_prefixes::collect_chan_prefixes().await, + Commands::CollectAlbumVersionsTitles => { + collect_album_versions_titles::collect_album_versions_titles().await } Commands::ParsePlaylistDates => collect_playlist_dates::write_samples_to_dict(), Commands::ParseHistoryDates => collect_history_dates::write_samples_to_dict(), @@ -87,9 +87,10 @@ async fn main() { Commands::ParseAlbumTypes => collect_album_types::write_samples_to_dict(), Commands::ParseVideoDurations => collect_video_durations::parse_video_durations(), Commands::ParseChanPrefixes => collect_chan_prefixes::write_samples_to_dict(), - Commands::GenLocales => { - gen_locales::generate_locales().await; + Commands::ParseAlbumVersionsTitles => { + collect_album_versions_titles::write_samples_to_dict() } + Commands::GenLocales => gen_locales::generate_locales().await, Commands::GenDict => gen_dictionary::generate_dictionary(), Commands::DownloadTestfiles => download_testfiles::download_testfiles().await, Commands::AbTest { id, n } => { diff --git a/codegen/src/model.rs b/codegen/src/model.rs index 3002451..2d9929f 100644 --- a/codegen/src/model.rs +++ b/codegen/src/model.rs @@ -61,6 +61,8 @@ pub struct DictEntry { pub chan_prefix: String, /// Channel name suffix on playlist pages pub chan_suffix: String, + /// "Other versions" title on album pages + pub album_versions_title: String, } /// Parsed TimeAgo string, contains amount and time unit. diff --git a/downloader/CHANGELOG.md b/downloader/CHANGELOG.md index 25d7681..f0779d4 100644 --- a/downloader/CHANGELOG.md +++ b/downloader/CHANGELOG.md @@ -3,6 +3,37 @@ All notable changes to this project will be documented in this file. +## [v0.3.1](https://codeberg.org/ThetaDev/rustypipe/compare/rustypipe-downloader/v0.3.0..rustypipe-downloader/v0.3.1) - 2024-12-20 + +### ⚙️ Miscellaneous Tasks + +- *(deps)* Update rustypipe to 0.11.0 + + +## [v0.3.0](https://codeberg.org/ThetaDev/rustypipe/compare/rustypipe-downloader/v0.2.7..rustypipe-downloader/v0.3.0) - 2025-02-09 + +### 🚀 Features + +- [**breaking**] Remove manual PO token options from downloader in favor of rustypipe-botguard - ([cddb32f](https://codeberg.org/ThetaDev/rustypipe/commit/cddb32f190276265258c6ab45b3d43a8891c4b39)) + +### 🐛 Bug Fixes + +- Ensure downloader futures are send - ([812ff4c](https://codeberg.org/ThetaDev/rustypipe/commit/812ff4c5bafffc5708a6d5066f1ebadb6d9fc958)) +- Download audio with dolby codec - ([9234005](https://codeberg.org/ThetaDev/rustypipe/commit/92340056f868007beccb64e9e26eb39abc40f7aa)) + +### 🚜 Refactor + +- [**breaking**] Add client_type field to DownloadError, rename cli option po-token-cache to pot-cache - ([594e675](https://codeberg.org/ThetaDev/rustypipe/commit/594e675b39efc5fbcdbd5e920a4d2cdee64f718e)) + +### 📚 Documentation + +- Add Botguard info to README - ([9957add](https://codeberg.org/ThetaDev/rustypipe/commit/9957add2b5d6391b2c1869d2019fd7dd91b8cd41)) + +### ⚙️ Miscellaneous Tasks + +- *(deps)* Update rustypipe to 0.10.0 + + ## [v0.2.7](https://codeberg.org/ThetaDev/rustypipe/compare/rustypipe-downloader/v0.2.6..rustypipe-downloader/v0.2.7) - 2025-01-16 ### 🚀 Features diff --git a/downloader/Cargo.toml b/downloader/Cargo.toml index a410beb..dba74ce 100644 --- a/downloader/Cargo.toml +++ b/downloader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rustypipe-downloader" -version = "0.2.7" +version = "0.3.1" rust-version = "1.67.1" edition.workspace = true authors.workspace = true @@ -51,7 +51,7 @@ image = { version = "0.25.0", optional = true, default-features = false, feature "jpeg", "webp", ] } -smartcrop2 = { version = "0.3.1", optional = true } +smartcrop2 = { version = "0.4.0", optional = true } [dev-dependencies] path_macro.workspace = true diff --git a/downloader/src/lib.rs b/downloader/src/lib.rs index 8dc00c0..c63d5c5 100644 --- a/downloader/src/lib.rs +++ b/downloader/src/lib.rs @@ -1033,9 +1033,13 @@ impl DownloadQuery { image::load_from_memory(&img_bts)? }; - let crop = smartcrop::find_best_crop(&img, NonZeroU32::MIN, NonZeroU32::MIN) - .map_err(|e| DownloadError::AudioTag(format!("image crop: {e}").into()))? - .crop; + let crop = smartcrop::find_best_crop_no_borders( + &img, + NonZeroU32::MIN, + NonZeroU32::MIN, + ) + .map_err(|e| DownloadError::AudioTag(format!("image crop: {e}").into()))? + .crop; img = img.crop_imm(crop.x, crop.y, crop.width, crop.height); let mut enc_bts = Vec::new(); img.write_with_encoder(image::codecs::jpeg::JpegEncoder::new_with_quality( @@ -1063,8 +1067,8 @@ impl DownloadQuery { } fn get_download_range(offset: u64, size: Option) -> Range { - let mut rng = rand::thread_rng(); - let chunk_size = rng.gen_range(CHUNK_SIZE_MIN..CHUNK_SIZE_MAX); + let mut rng = rand::rng(); + let chunk_size = rng.random_range(CHUNK_SIZE_MIN..CHUNK_SIZE_MAX); let mut chunk_end = offset + chunk_size; if let Some(size) = size { @@ -1197,6 +1201,8 @@ async fn download_single_file( } } + tracing::debug!("downloading {} to {}", url, output.to_string_lossy()); + let mut file = fs::OpenOptions::new() .append(true) .create(true) diff --git a/notes/AB_Tests.md b/notes/AB_Tests.md index c85156a..8742ef6 100644 --- a/notes/AB_Tests.md +++ b/notes/AB_Tests.md @@ -3,13 +3,13 @@ When YouTube introduces a new feature, it does so gradually. When a user creates a new session, YouTube decided randomly which new features should be enabled. -YouTube sessions are identified by the visitor data ID. This cookie is sent with -every API request using the `context.client.visitor_data` JSON parameter. It is also -returned in the `responseContext.visitorData` response parameter and stored as the -`__SECURE-YEC` cookie. +YouTube sessions are identified by the visitor data ID. This cookie is sent with every +API request using the `context.client.visitor_data` JSON parameter. It is also returned +in the `responseContext.visitorData` response parameter and stored as the `__SECURE-YEC` +cookie. -By sending the same visitor data ID, A/B tests can be reproduced, which is important -for testing alternative YouTube clients. +By sending the same visitor data ID, A/B tests can be reproduced, which is important for +testing alternative YouTube clients. This page lists all A/B tests that were encountered while maintaining the RustyPipe client. @@ -1030,7 +1030,7 @@ commandContext missing). - **Encountered on:** 13.01.2025 - **Impact:** 🟢 Low - **Endpoint:** browse (YTM) -- **Status:** Common (10%) +- **Status:** Frequent (59%) YouTube Music used to group artist albums into 2 rows: "Albums" and "Singles". @@ -1042,7 +1042,7 @@ omitted for albums in their group, while singles and EPs have a label with their - **Encountered on:** 25.01.2025 - **Impact:** 🟢 Low - **Endpoint:** browse (YTM) -- **Status:** Common (4%) +- **Status:** Stabilized YouTube Music now uses a `continuationItemRenderer` for music playlists instead of putting the continuations in a separate attribute of the MusicShelf. @@ -1052,3 +1052,52 @@ items. YouTube Music now also sends a random 16-character string as a `clientScreenNonce` in the request context. This is not mandatory though. + +## [21] Music album recommendations + +- **Encountered on:** 26.02.2025 +- **Impact:** 🟢 Low +- **Endpoint:** browse (YTM) +- **Status:** Common (15%) + +![A/B test 21 screenshot](./_img/ab_21.png) + +YouTube Music has added "Recommended" and "More from \" carousels to album +pages. The difficulty is distinguishing them reliably for parsing the album variants. + +The current solution is adding the "Other versions" title in all languages to the +dictionary and comparing it. + +## [22] commandExecutorCommand for continuations + +- **Encountered on:** 16.03.2025 +- **Impact:** 🟢 Low +- **Endpoint:** browse (YTM) +- **Status:** Experimental (1%) + +YouTube playlists may use a commandExecutorCommand which holds a list of commands: the +`continuationCommand` that needs to be extracted as well as a `playlistVotingRefreshPopupCommand`. + +```json +{ + "continuationItemRenderer": { + "continuationEndpoint": { + "commandExecutorCommand": { + "commands": [ + { + "playlistVotingRefreshPopupCommand": { + "command": {} + } + }, + { + "continuationCommand": { + "request": "CONTINUATION_REQUEST_TYPE_BROWSE", + "token": "4qmFsgKBARIkVkxQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3FpGjRDQUY2SGxCVU9rTklTV2xGUkVreVVtdEZOVTVFU1hsU2FrWkRVa1JKZWs1NldRJTNEJTNEmgIiUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaQ%3D%3D" + } + } + ] + } + } + } +} +``` diff --git a/notes/_img/ab_21.png b/notes/_img/ab_21.png new file mode 100644 index 0000000..929f5d3 Binary files /dev/null and b/notes/_img/ab_21.png differ diff --git a/src/client/channel.rs b/src/client/channel.rs index 533e0a3..dc67579 100644 --- a/src/client/channel.rs +++ b/src/client/channel.rs @@ -280,7 +280,7 @@ impl MapResponse>> for response::Channel { impl MapResponse for response::ChannelAbout { fn map_response(self, ctx: &MapRespCtx<'_>) -> Result, ExtractionError> { - // Channel info is always fetched in English. There is no localized data there + // Channel info is always fetched in English. There is no localized data // and it allows parsing the country name. let lang = Language::En; @@ -335,7 +335,7 @@ impl MapResponse for response::ChannelAbout { .video_count_text .and_then(|txt| util::parse_numeric_or_warn(&txt, &mut warnings)), create_date: about.joined_date_text.and_then(|txt| { - timeago::parse_textual_date_or_warn(lang, &txt, &mut warnings) + timeago::parse_textual_date_or_warn(lang, ctx.utc_offset, &txt, &mut warnings) .map(OffsetDateTime::date) }), view_count: about @@ -468,8 +468,9 @@ fn map_channel( let subscriber_count = sub_part.and_then(|t| { util::parse_large_numstr_or_warn::(t.as_str(), ctx.lang, &mut warnings) }); - let video_count = - vc_part.and_then(|t| util::parse_numeric_or_warn(t.as_str(), &mut warnings)); + let video_count = vc_part.and_then(|t| { + util::parse_large_numstr_or_warn(t.as_str(), ctx.lang, &mut warnings) + }); Channel { id: metadata.external_id, diff --git a/src/client/channel_rss.rs b/src/client/channel_rss.rs index b28a802..f3f7319 100644 --- a/src/client/channel_rss.rs +++ b/src/client/channel_rss.rs @@ -3,7 +3,7 @@ use std::fmt::Debug; use crate::{ error::{Error, ExtractionError}, model::ChannelRss, - report::{Report, RustyPipeInfo}, + report::Report, util, }; @@ -45,7 +45,7 @@ impl RustyPipeQuery { Err(e) => { if let Some(reporter) = &self.client.inner.reporter { let report = Report { - info: RustyPipeInfo::new(Some(self.opts.lang)), + info: self.rp_info(), level: crate::report::Level::ERR, operation: "channel_rss", error: Some(e.to_string()), diff --git a/src/client/mod.rs b/src/client/mod.rs index 485f2a2..06386bc 100644 --- a/src/client/mod.rs +++ b/src/client/mod.rs @@ -3,12 +3,10 @@ pub(crate) mod response; mod channel; -mod history; mod music_artist; mod music_charts; mod music_details; mod music_genres; -mod music_history; mod music_new; mod music_playlist; mod music_search; @@ -20,6 +18,13 @@ mod trends; mod url_resolver; mod video_details; +#[cfg(feature = "userdata")] +#[cfg_attr(docsrs, doc(cfg(feature = "userdata")))] +mod music_userdata; +#[cfg(feature = "userdata")] +#[cfg_attr(docsrs, doc(cfg(feature = "userdata")))] +mod userdata; + #[cfg(feature = "rss")] #[cfg_attr(docsrs, doc(cfg(feature = "rss")))] mod channel_rss; @@ -35,7 +40,7 @@ use regex::Regex; use reqwest::{header, Client, ClientBuilder, Request, RequestBuilder, Response, StatusCode}; use serde::{de::DeserializeOwned, Deserialize, Serialize}; use sha1::{Digest, Sha1}; -use time::OffsetDateTime; +use time::{OffsetDateTime, UtcOffset}; use tokio::sync::RwLock as AsyncRwLock; use crate::error::AuthError; @@ -83,7 +88,6 @@ pub enum ClientType { /// Client used by the iOS app /// /// - no obfuscated stream URLs - /// - does not include opus audio streams Ios, } @@ -289,8 +293,10 @@ struct OauthToken { #[derive(Debug, Clone, Serialize, Deserialize)] struct AuthCookie { cookie: String, + #[serde(alias = "account_syncid", skip_serializing_if = "Option::is_none")] + channel_syncid: Option, #[serde(skip_serializing_if = "Option::is_none")] - account_syncid: Option, + user_syncid: Option, #[serde(skip_serializing_if = "Option::is_none")] session_index: Option, } @@ -315,8 +321,9 @@ impl AuthCookie { fn new(cookie: String) -> Self { Self { cookie, - account_syncid: None, + channel_syncid: None, session_index: None, + user_syncid: None, } } } @@ -358,6 +365,8 @@ const OAUTH_CLIENT_ID: &str = const OAUTH_CLIENT_SECRET: &str = "SboVhoG9s0rNafixCSGGKXAT"; const OAUTH_SCOPES: &str = "http://gdata.youtube.com https://www.googleapis.com/auth/youtube"; +const BOTGUARD_API_VERSION: &str = "1"; + static CLIENT_VERSION_REGEX: Lazy = Lazy::new(|| Regex::new(r#""INNERTUBE_CONTEXT_CLIENT_VERSION":"([\w\d\._-]+?)""#).unwrap()); @@ -375,7 +384,7 @@ struct RustyPipeRef { http: Client, storage: Option>, reporter: Option>, - n_request_attempts: u32, + n_http_retries: u32, cache: CacheHolder, default_opts: RustyPipeOpts, user_agent: Cow<'static, str>, @@ -387,6 +396,8 @@ struct RustyPipeRef { struct RustyPipeOpts { lang: Language, country: Country, + timezone: Option, + utc_offset_minutes: i16, report: bool, strict: bool, auth: Option, @@ -397,17 +408,19 @@ struct RustyPipeOpts { pub struct RustyPipeBuilder { storage: DefaultOpt>, reporter: DefaultOpt>, - n_request_attempts: u32, + n_http_retries: u32, timeout: DefaultOpt, user_agent: Option, default_opts: RustyPipeOpts, storage_dir: Option, botguard_bin: DefaultOpt, + snapshot_file: Option, po_token_cache: bool, } struct BotguardCfg { program: OsString, + version: String, snapshot_file: PathBuf, po_token_cache: bool, } @@ -435,13 +448,6 @@ impl DefaultOpt { DefaultOpt::Default => Some(f()), } } - fn or_default_opt Option>(self, f: F) -> Option { - match self { - DefaultOpt::Some(x) => Some(x), - DefaultOpt::None => None, - DefaultOpt::Default => f(), - } - } } /// # RustyPipe query @@ -502,6 +508,26 @@ impl DefaultOpt { /// - [`music_new_albums`](RustyPipeQuery::music_new_albums) /// - [`music_new_videos`](RustyPipeQuery::music_new_videos) /// +/// ### User data (🔒 Feature `userdata`) +/// +/// - **Playback history** +/// - [`history`](RustyPipeQuery::history) +/// - [`history_search`](RustyPipeQuery::history_search) +/// - [`music_history`](RustyPipeQuery::music_history) +/// - **YouTube library** +/// - [`liked_videos`](RustyPipeQuery::liked_videos) +/// - [`watch_later`](RustyPipeQuery::watch_later) +/// - [`saved_playlists`](RustyPipeQuery::saved_playlists) +/// - **Music library** +/// - [`music_saved_artists`](RustyPipeQuery::music_saved_artists) +/// - [`music_saved_albums`](RustyPipeQuery::music_saved_albums) +/// - [`music_saved_tracks`](RustyPipeQuery::music_saved_tracks) +/// - [`music_saved_playlists`](RustyPipeQuery::music_saved_playlists) +/// - [`music_liked_tracks`](RustyPipeQuery::music_liked_tracks) +/// - **Subscriptions** +/// - [`subscriptions`](RustyPipeQuery::subscriptions) +/// - [`subscription_feed`](RustyPipeQuery::subscription_feed) +/// /// ## Options /// /// You can set the language, country and visitor data ID for individual requests. @@ -526,6 +552,8 @@ impl Default for RustyPipeOpts { Self { lang: Language::En, country: Country::Us, + timezone: None, + utc_offset_minutes: 0, report: false, strict: false, auth: None, @@ -652,10 +680,11 @@ impl RustyPipeBuilder { storage: DefaultOpt::Default, reporter: DefaultOpt::Default, timeout: DefaultOpt::Default, - n_request_attempts: 2, + n_http_retries: 2, user_agent: None, storage_dir: None, botguard_bin: DefaultOpt::Default, + snapshot_file: None, po_token_cache: false, } } @@ -721,27 +750,31 @@ impl RustyPipeBuilder { let visitor_data_cache = VisitorDataCache::new(http.clone(), 50, 20); - let botguard_bin = self.botguard_bin.or_default_opt(|| { - let n = OsString::from("rustypipe-botguard"); - let out = std::process::Command::new(&n) - .arg("--version") - .output() - .ok()?; - if !out.status.success() { - return None; + let botguard = match self.botguard_bin { + DefaultOpt::Some(botguard_bin) => Some(detect_botguard_bin(botguard_bin)?), + DefaultOpt::None => None, + DefaultOpt::Default => detect_botguard_bin("./rustypipe-botguard".into()) + .or_else(|_| detect_botguard_bin("rustypipe-botguard".into())) + .map_err(|e| tracing::debug!("could not detect rustypipe-botguard: {e}")) + .ok(), + } + .map(|(program, version)| { + tracing::debug!( + "rustypipe-botguard: using {} at {}", + version, + program.to_string_lossy() + ); + + BotguardCfg { + program: program.to_owned(), + version, + snapshot_file: self.snapshot_file.unwrap_or_else(|| { + let mut snapshot_file = storage_dir.clone(); + snapshot_file.push("bg_snapshot.bin"); + snapshot_file + }), + po_token_cache: self.po_token_cache, } - let output = String::from_utf8_lossy(&out.stdout); - let pat = "rustypipe-botguard-api "; - let pos = output.find(pat)? + pat.len(); - let pos_end = output[pos..] - .char_indices() - .find(|(_, c)| !c.is_ascii_digit()) - .map(|(p, _)| p + pos) - .unwrap_or(output.len()); - if &output[pos..pos_end] != "1" { - return None; - } - Some(n) }); Ok(RustyPipe { @@ -749,11 +782,11 @@ impl RustyPipeBuilder { http, storage, reporter: self.reporter.or_default(|| { - let mut report_dir = storage_dir.clone(); + let mut report_dir = storage_dir; report_dir.push(DEFAULT_REPORT_DIR); Box::new(FileReporter::new(report_dir)) }), - n_request_attempts: self.n_request_attempts, + n_http_retries: self.n_http_retries, cache: CacheHolder { clients: cache_clients, deobf: AsyncRwLock::new(cdata.deobf), @@ -763,15 +796,7 @@ impl RustyPipeBuilder { default_opts: self.default_opts, user_agent, visitor_data_cache, - botguard: botguard_bin.map(|program| { - let mut snapshot_file = storage_dir; - snapshot_file.push("bg_snapshot.bin"); - BotguardCfg { - program, - snapshot_file, - po_token_cache: self.po_token_cache, - } - }), + botguard, }), }) } @@ -840,9 +865,9 @@ impl RustyPipeBuilder { self } - /// Set the maximum number of attempts for HTTP requests (at least 1). + /// Set the maximum number of retries for YouTube requests. /// - /// If a HTTP requests fails because of a serverside error and retries are enabled, + /// If a request fails because of a serverside error and retries are enabled, /// RustyPipe waits 1 second before the next attempt. /// /// The wait time is doubled for subsequent attempts (including a bit of @@ -850,8 +875,8 @@ impl RustyPipeBuilder { /// /// **Default value**: 2 #[must_use] - pub fn n_request_attempts(mut self, n_retries: u32) -> Self { - self.n_request_attempts = n_retries.max(1); + pub fn n_http_retries(mut self, n_retries: u32) -> Self { + self.n_http_retries = n_retries.max(1); self } @@ -891,6 +916,29 @@ impl RustyPipeBuilder { self } + /// Set the timezone and its associated UTC offset in minutes used + /// when accessing the YouTube API. + /// + /// **Default value**: `0` (UTC) + /// + /// **Info**: you can set this option for individual queries, too + #[must_use] + pub fn timezone>(mut self, timezone: S, utc_offset_minutes: i16) -> Self { + self.default_opts.timezone = Some(timezone.into()); + self.default_opts.utc_offset_minutes = utc_offset_minutes; + self + } + + /// Access the YouTube API using the local system timezone + /// + /// If the local timezone could not be determined, an error is logged and RustyPipe falls + /// back to UTC. + #[must_use] + pub fn timezone_local(self) -> Self { + let (timezone, utc_offset_minutes) = local_tz_offset(); + self.timezone(timezone, utc_offset_minutes) + } + /// Generate a report on every operation. /// /// This should only be used for debugging. @@ -984,6 +1032,18 @@ impl RustyPipeBuilder { self } + /// Set the path where the rustypipe-botguard snapshot file is stored + /// + /// After solving a Botguard challenge, rustypipe-botguard stores its + /// JavaScript environment in a snapshot file, so it can quickly generate additional tokens. + /// + /// By default the snapshot is stored in the storage_dir (Filename: bg_snapshot.bin). + #[must_use] + pub fn botguard_snapshot_file>(mut self, snapshot_file: P) -> Self { + self.snapshot_file = Some(snapshot_file.into()); + self + } + /// Enable caching for session-bound PO tokens /// /// By default, RustyPipe calls Botguard for every player request to fetch both a @@ -1034,7 +1094,7 @@ impl RustyPipe { /// Execute the given http request. async fn http_request(&self, request: &Request) -> Result { let mut last_resp = None; - for n in 0..=self.inner.n_request_attempts { + for n in 0..=self.inner.n_http_retries { let resp = self.inner.http.execute(request.try_clone().unwrap()).await; let err = match resp { @@ -1060,7 +1120,7 @@ impl RustyPipe { }; // Retry in case of a recoverable status code (server err, too many requests) - if n != self.inner.n_request_attempts { + if n != self.inner.n_http_retries { let ms = util::retry_delay(n, 1000, 60000, 3); tracing::warn!( "Retry attempt #{}. Error: {}. Waiting {} ms", @@ -1534,6 +1594,17 @@ impl RustyPipe { .ok_or(Error::Auth(AuthError::NoLogin)) } + fn user_auth_datasync_id(&self) -> Result { + self.inner + .cache + .auth_cookie + .read() + .unwrap() + .as_ref() + .and_then(|c| c.user_syncid.as_ref().map(|id| id.to_owned())) + .ok_or(Error::Auth(AuthError::NoLogin)) + } + /// Set the user authentication cookie /// /// The cookie is used for authenticated requests with browser-based clients @@ -1628,17 +1699,17 @@ impl RustyPipe { ))?; // datasyncid is of the form "channel_syncid||user_syncid" for secondary channel - // and just "user_syncid||" for primary channel. We only want the channel_syncid - let (channel_syncid, user_syncid) = + // and just "user_syncid||" for primary channel. + let (p1, p2) = datasync_id .split_once("||") .ok_or(Error::Extraction(ExtractionError::InvalidData( "datasyncId does not contain || seperator".into(), )))?; - auth_cookie.account_syncid = if user_syncid.is_empty() { - None + (auth_cookie.channel_syncid, auth_cookie.user_syncid) = if p2.is_empty() { + (None, Some(p1.to_owned())) } else { - Some(channel_syncid.to_owned()) + (Some(p1.to_owned()), Some(p2.to_owned())) }; auth_cookie.session_index = Some( @@ -1648,6 +1719,11 @@ impl RustyPipe { ); Ok(()) } + + /// Get the version string (e.g. `rustypipe-botguard 0.1.1`) of the used botguard binary + pub async fn version_botguard(&self) -> Option { + self.inner.botguard.as_ref().map(|bg| bg.version.to_owned()) + } } impl RustyPipeQuery { @@ -1669,6 +1745,22 @@ impl RustyPipeQuery { self } + /// Set the timezone and its associated UTC offset in minutes used + /// when accessing the YouTube API. + #[must_use] + pub fn timezone>(mut self, timezone: S, utc_offset_minutes: i16) -> Self { + self.opts.timezone = Some(timezone.into()); + self.opts.utc_offset_minutes = utc_offset_minutes; + self + } + + /// Access the YouTube API using the local system timezone + #[must_use] + pub fn timezone_local(self) -> Self { + let (timezone, utc_offset_minutes) = local_tz_offset(); + self.timezone(timezone, utc_offset_minutes) + } + /// Generate a report on every operation. /// /// This should only be used for debugging. @@ -1823,6 +1915,8 @@ impl RustyPipeQuery { } else { (Language::En, Country::Us) }; + let utc_offset_minutes = self.opts.utc_offset_minutes; + let time_zone = self.opts.timezone.as_deref().unwrap_or("UTC"); match ctype { ClientType::Desktop => YTContext { @@ -1834,6 +1928,8 @@ impl RustyPipeQuery { visitor_data, hl, gl, + time_zone, + utc_offset_minutes, ..Default::default() }, request: Some(RequestYT::default()), @@ -1849,6 +1945,8 @@ impl RustyPipeQuery { visitor_data, hl, gl, + time_zone, + utc_offset_minutes, ..Default::default() }, request: Some(RequestYT::default()), @@ -1864,6 +1962,8 @@ impl RustyPipeQuery { visitor_data, hl, gl, + time_zone, + utc_offset_minutes, ..Default::default() }, request: Some(RequestYT::default()), @@ -1880,6 +1980,8 @@ impl RustyPipeQuery { visitor_data, hl, gl, + time_zone, + utc_offset_minutes, ..Default::default() }, request: Some(RequestYT::default()), @@ -1899,6 +2001,8 @@ impl RustyPipeQuery { visitor_data, hl, gl, + time_zone, + utc_offset_minutes, ..Default::default() }, request: None, @@ -1916,6 +2020,8 @@ impl RustyPipeQuery { visitor_data, hl, gl, + time_zone, + utc_offset_minutes, ..Default::default() }, request: None, @@ -2037,7 +2143,7 @@ impl RustyPipeQuery { if let Some(session_index) = auth_cookie.session_index { r = r.header("X-Goog-AuthUser", session_index); } - if let Some(account_syncid) = auth_cookie.account_syncid { + if let Some(account_syncid) = auth_cookie.channel_syncid { r = r.header("X-Goog-PageId", account_syncid); } cookie = Some(auth_cookie.cookie); @@ -2096,7 +2202,7 @@ impl RustyPipeQuery { self.client.inner.visitor_data_cache.remove(visitor_data); } - /// Get PO tokens + /// Generate PO tokens async fn get_po_tokens(&self, idents: &[&str]) -> Result<(Vec, OffsetDateTime), Error> { let bg = self .client @@ -2135,28 +2241,41 @@ impl RustyPipeQuery { } let mut valid_until = None; + let mut from_snapshot = false; for word in words { if let Some((k, v)) = word.split_once('=') { - if k == "valid_until" { - valid_until = Some( - v.parse::() - .ok() - .and_then(|x| OffsetDateTime::from_unix_timestamp(x).ok()) - .ok_or(ExtractionError::Botguard( - format!("invalid validity date: {v}").into(), - ))?, - ); + match k { + "valid_until" => { + valid_until = Some( + v.parse::() + .ok() + .and_then(|x| OffsetDateTime::from_unix_timestamp(x).ok()) + .ok_or(ExtractionError::Botguard( + format!("invalid validity date: {v}").into(), + ))?, + ); + } + "from_snapshot" => { + from_snapshot = v.eq_ignore_ascii_case("true") || v == "1"; + } + _ => {} } } } - tracing::debug!("generated PO token (took {:?})", start.elapsed()); - Ok(( - tokens, - valid_until.unwrap_or_else(|| OffsetDateTime::now_utc() + time::Duration::hours(12)), - )) + let valid_until = + valid_until.unwrap_or_else(|| OffsetDateTime::now_utc() + time::Duration::hours(12)); + + tracing::debug!( + "generated PO token (valid_until {}, from_snapshot={}, took {}ms)", + valid_until, + from_snapshot, + start.elapsed().as_millis() + ); + Ok((tokens, valid_until)) } + /// Get a session-bound PO token (either from cache or newly generated) async fn get_session_po_token(&self, visitor_data: &str) -> Result { if let Some(po_token) = self.client.inner.visitor_data_cache.get_pot(visitor_data) { return Ok(po_token); @@ -2170,7 +2289,7 @@ impl RustyPipeQuery { Ok(po_token) } - /// Get a Proof-of-origin token + /// Get a PO token (Proof-of-origin token) /// /// PO tokens are used by the web-based YouTube clients for requesting player data and video streams. /// @@ -2184,6 +2303,22 @@ impl RustyPipeQuery { }) } + /// Get a new RustyPipeInfo object for reports + fn rp_info(&self) -> RustyPipeInfo<'_> { + RustyPipeInfo::new( + Some(self.opts.lang), + self.client + .inner + .botguard + .as_ref() + .map(|bg| bg.version.as_str()), + ) + } + + /// Execute a request to the YouTube API, then deobfuscate and map the response. + /// + /// Runs a single attempt, returns Ok with a erroneous RequestResult in case of a + /// HTTP or mapping error so it can be retried/reported. async fn execute_request_attempt< R: DeserializeOwned + MapResponse + Debug, M, @@ -2213,6 +2348,8 @@ impl RustyPipeQuery { let ctx = MapRespCtx { id, lang: self.opts.lang, + utc_offset: UtcOffset::from_whole_seconds(i32::from(self.opts.utc_offset_minutes) * 60) + .map_err(|_| Error::Other("utc_offset overflow".into()))?, deobf: ctx_src.deobf, visitor_data: Some(&visitor_data), client_type: ctype, @@ -2273,6 +2410,10 @@ impl RustyPipeQuery { }) } + /// Execute a request to the YouTube API, then deobfuscate and map the response. + /// + /// Runs up to n_request_attempts, returns Ok with a erroneous RequestResult in case of a + /// HTTP or mapping error so it can be reported. async fn execute_request_inner< R: DeserializeOwned + MapResponse + Debug, M, @@ -2286,7 +2427,7 @@ impl RustyPipeQuery { ctx_src: &MapRespOptions<'_>, ) -> Result, Error> { let mut last_resp = None; - for n in 0..=self.client.inner.n_request_attempts { + for n in 0..=self.client.inner.n_http_retries { let resp = self .execute_request_attempt::(ctype, id, endpoint, body, ctx_src) .await?; @@ -2304,7 +2445,7 @@ impl RustyPipeQuery { // Remove the used visitor data from cache if the request resulted in a recoverable error self.remove_visitor_data(&resp.visitor_data); - if n != self.client.inner.n_request_attempts { + if n != self.client.inner.n_http_retries { let ms = util::retry_delay(n, 1000, 60000, 3); tracing::warn!( "Retry attempt #{}. Error: {}. Waiting {} ms", @@ -2379,7 +2520,7 @@ impl RustyPipeQuery { if level > Level::DBG || self.opts.report { if let Some(reporter) = &self.client.inner.reporter { let report = Report { - info: RustyPipeInfo::new(Some(self.opts.lang)), + info: self.rp_info(), level, operation: &format!("{operation}({id})"), error, @@ -2499,6 +2640,7 @@ impl AsRef for RustyPipeQuery { struct MapRespCtx<'a> { id: &'a str, lang: Language, + utc_offset: UtcOffset, deobf: Option<&'a DeobfData>, visitor_data: Option<&'a str>, client_type: ClientType, @@ -2526,6 +2668,7 @@ impl<'a> MapRespCtx<'a> { Self { id, lang: Language::En, + utc_offset: UtcOffset::UTC, deobf: None, visitor_data: None, client_type: ClientType::Desktop, @@ -2564,6 +2707,59 @@ fn validate_country(country: Country) -> Country { } } +fn local_tz_offset() -> (String, i16) { + match ( + localzone::get_local_zone().ok_or(Error::Other("could not get local timezone".into())), + UtcOffset::current_local_offset().map_err(|_| Error::Other("indeterminate offset".into())), + ) { + (Ok(timezone), Ok(offset)) => (timezone, offset.whole_minutes()), + (Err(e), _) | (_, Err(e)) => { + tracing::error!("{e}"); + ("UTC".to_owned(), 0) + } + } +} + +/// Check if a valid Botguard binary is available at the given location +fn detect_botguard_bin(program: OsString) -> Result<(OsString, String), Error> { + let out = std::process::Command::new(&program) + .arg("--version") + .output() + .map_err(|e| { + if e.kind() == std::io::ErrorKind::NotFound { + Error::Other("rustypipe-botguard binary not found".into()) + } else { + Error::Other(format!("error calling rustypipe-botguard {e}").into()) + } + })?; + if !out.status.success() { + return Err(Error::Extraction(ExtractionError::Botguard( + format!("version check failed with status {}", out.status).into(), + ))); + } + let output = String::from_utf8_lossy(&out.stdout); + let pat = "rustypipe-botguard-api "; + let pos = output.find(pat).ok_or(Error::Other( + "no rustypipe-botguard-api version returned".into(), + ))? + pat.len(); + let pos_end = output[pos..] + .char_indices() + .find(|(_, c)| !c.is_ascii_digit()) + .map(|(p, _)| p + pos) + .unwrap_or(output.len()); + let api_version = &output[pos..pos_end]; + if api_version != BOTGUARD_API_VERSION { + return Err(Error::Other( + format!( + "incompatible rustypipe-botguard-api version {api_version}, expected {BOTGUARD_API_VERSION}" + ) + .into(), + )); + } + let version = output[..pos].lines().next().unwrap_or_default().to_owned(); + Ok((program, version)) +} + #[cfg(test)] mod tests { use super::*; diff --git a/src/client/music_artist.rs b/src/client/music_artist.rs index 8e4deb6..13cbeda 100644 --- a/src/client/music_artist.rs +++ b/src/client/music_artist.rs @@ -154,9 +154,24 @@ fn map_artist_page( ctx: &MapRespCtx<'_>, skip_extendables: bool, ) -> Result, ExtractionError> { - // dbg!(&res); + let contents = match res.contents { + Some(c) => c, + None => { + if res.microformat.microformat_data_renderer.noindex { + return Err(ExtractionError::NotFound { + id: ctx.id.to_owned(), + msg: "no contents".into(), + }); + } else { + return Err(ExtractionError::InvalidData("no contents".into())); + } + } + }; - let header = res.header.music_immersive_header_renderer; + let header = res + .header + .ok_or(ExtractionError::InvalidData("no header".into()))? + .music_immersive_header_renderer; if let Some(share) = header.share_endpoint { let pb = share.share_entity_endpoint.serialized_share_entity; @@ -173,8 +188,7 @@ fn map_artist_page( } } - let sections = res - .contents + let sections = contents .single_column_browse_results_renderer .contents .into_iter() @@ -338,8 +352,6 @@ impl MapResponse for response::MusicArtistAlbums { self, ctx: &MapRespCtx<'_>, ) -> Result, ExtractionError> { - // dbg!(&self); - let Some(header) = self.header else { return Err(ExtractionError::NotFound { id: ctx.id.into(), diff --git a/src/client/music_genres.rs b/src/client/music_genres.rs index cfda986..c931fa4 100644 --- a/src/client/music_genres.rs +++ b/src/client/music_genres.rs @@ -105,8 +105,6 @@ impl MapResponse> for response::MusicGenres { impl MapResponse for response::MusicGenre { fn map_response(self, ctx: &MapRespCtx<'_>) -> Result, ExtractionError> { - // dbg!(&self); - let content = self .contents .single_column_browse_results_renderer diff --git a/src/client/music_playlist.rs b/src/client/music_playlist.rs index b09656a..3ef6e95 100644 --- a/src/client/music_playlist.rs +++ b/src/client/music_playlist.rs @@ -9,7 +9,7 @@ use crate::{ AlbumId, ChannelId, MusicAlbum, MusicPlaylist, TrackItem, TrackType, }, serializer::{text::TextComponents, MapResult}, - util::{self, TryRemove, DOT_SEPARATOR}, + util::{self, dictionary, TryRemove, DOT_SEPARATOR}, }; use self::response::url_endpoint::MusicPageType; @@ -87,7 +87,7 @@ impl RustyPipeQuery { .iter() .enumerate() .filter_map(|(i, track)| { - if track.track_type.is_video() { + if track.track_type.is_video() && !track.unavailable { Some((i, track.name.clone())) } else { None @@ -95,47 +95,61 @@ impl RustyPipeQuery { }) .collect::>(); - if !to_replace.is_empty() { + let last_tn = album + .tracks + .last() + .and_then(|t| t.track_nr) + .unwrap_or_default(); + if !to_replace.is_empty() || last_tn < album.track_count { + tracing::debug!( + "fetching album playlist ({} tracks, {} to replace)", + album.track_count, + to_replace.len() + ); let mut playlist = self.music_playlist(playlist_id).await?; playlist .tracks - .extend_limit(&self, album.tracks.len()) + .extend_limit(&self, album.track_count.into()) .await?; for (i, title) in to_replace { let found_track = playlist.tracks.items.iter().find_map(|track| { if track.name == title && track.track_type.is_track() { - Some((track.id.clone(), track.duration)) + Some((track.id.clone(), track.duration, track.unavailable)) } else { None } }); - if let Some((track_id, duration)) = found_track { + if let Some((track_id, duration, unavailable)) = found_track { album.tracks[i].id = track_id; if let Some(duration) = duration { album.tracks[i].duration = Some(duration); } album.tracks[i].track_type = TrackType::Track; + album.tracks[i].unavailable = unavailable; + } + } + + // Extend the list of album tracks with the ones from the playlist if the playlist returned more tracks + // This is the case for albums with more than 200 tracks (e.g. audiobooks) + // Note: in some cases the playlist may contain a loop of repeating tracks. If a track was found in the playlist + // that already exists in the album, stop. + if album.tracks.len() < playlist.tracks.items.len() { + let mut tn = last_tn; + for mut t in playlist.tracks.items.into_iter().skip(album.tracks.len()) { + if album.tracks.iter().any(|at| at.id == t.id) { + break; + } + tn += 1; + t.album = album.tracks.first().and_then(|t| t.album.clone()); + t.track_nr = Some(tn); + album.tracks.push(t); } } } } Ok(album) } - - /// Get all liked YouTube Music tracks of the logged-in user - /// - /// The difference to [`RustyPipeQuery::music_saved_tracks`] is that this function only returns - /// tracks that were explicitly liked by the user. - /// - /// Requires authentication cookies. - pub async fn music_liked_tracks(&self) -> Result { - self.clone() - .authenticated() - .music_playlist("LM") - .await - .map_err(util::map_internal_playlist_err) - } } impl MapResponse for response::MusicPlaylist { @@ -143,9 +157,21 @@ impl MapResponse for response::MusicPlaylist { self, ctx: &MapRespCtx<'_>, ) -> Result, ExtractionError> { - // dbg!(&self); + let contents = match self.contents { + Some(c) => c, + None => { + if self.microformat.microformat_data_renderer.noindex { + return Err(ExtractionError::NotFound { + id: ctx.id.to_owned(), + msg: "no contents".into(), + }); + } else { + return Err(ExtractionError::InvalidData("no contents".into())); + } + } + }; - let (header, music_contents) = match self.contents { + let (header, music_contents) = match contents { response::music_playlist::Contents::SingleColumnBrowseResultsRenderer(c) => ( self.header, c.contents @@ -276,8 +302,8 @@ impl MapResponse for response::MusicPlaylist { // Album playlists fetched via the playlist method dont include a header let (album, cover) = map_res .c - .first() - .and_then(|t: &TrackItem| { + .iter() + .find_map(|t: &TrackItem| { t.album.as_ref().map(|a| (a.clone(), t.cover.clone())) }) .ok_or(ExtractionError::InvalidData(Cow::Borrowed( @@ -285,10 +311,11 @@ impl MapResponse for response::MusicPlaylist { )))?; if !map_res.c.iter().all(|t| { - t.album - .as_ref() - .map(|a| a.id == album.id) - .unwrap_or_default() + t.unavailable + || t.album + .as_ref() + .map(|a| a.id == album.id) + .unwrap_or_default() }) { return Err(ExtractionError::InvalidData(Cow::Borrowed( "album playlist containing items from different albums", @@ -332,9 +359,21 @@ impl MapResponse for response::MusicPlaylist { impl MapResponse for response::MusicPlaylist { fn map_response(self, ctx: &MapRespCtx<'_>) -> Result, ExtractionError> { - // dbg!(&self); + let contents = match self.contents { + Some(c) => c, + None => { + if self.microformat.microformat_data_renderer.noindex { + return Err(ExtractionError::NotFound { + id: ctx.id.to_owned(), + msg: "no contents".into(), + }); + } else { + return Err(ExtractionError::InvalidData("no contents".into())); + } + } + }; - let (header, sections) = match self.contents { + let (header, sections) = match contents { response::music_playlist::Contents::SingleColumnBrowseResultsRenderer(c) => ( self.header, c.contents @@ -374,7 +413,18 @@ impl MapResponse for response::MusicPlaylist { match section { response::music_item::ItemSection::MusicShelfRenderer(sh) => shelf = Some(sh), response::music_item::ItemSection::MusicCarouselShelfRenderer(sh) => { - album_variants = Some(sh.contents); + if sh + .header + .map(|h| { + h.music_carousel_shelf_basic_header_renderer + .title + .first_str() + == dictionary::entry(ctx.lang).album_versions_title + }) + .unwrap_or_default() + { + album_variants = Some(sh.contents); + } } _ => (), } @@ -439,12 +489,14 @@ impl MapResponse for response::MusicPlaylist { } } - let playlist_id = self.microformat.and_then(|mf| { - mf.microformat_data_renderer - .url_canonical - .strip_prefix("https://music.youtube.com/playlist?list=") - .map(str::to_owned) - }); + let playlist_id = self + .microformat + .microformat_data_renderer + .url_canonical + .and_then(|x| { + x.strip_prefix("https://music.youtube.com/playlist?list=") + .map(str::to_owned) + }); let (playlist_id, artist_id) = header .menu .or_else(|| header.buttons.into_iter().next()) @@ -471,6 +523,14 @@ impl MapResponse for response::MusicPlaylist { .unwrap_or_default(); let artist_id = artist_id.or_else(|| artists.first().and_then(|a| a.id.clone())); + let second_subtitle_parts = header + .second_subtitle + .split(|p| p == DOT_SEPARATOR) + .collect::>(); + let track_count = second_subtitle_parts + .get(usize::from(second_subtitle_parts.len() > 2)) + .and_then(|txt| util::parse_numeric::(&txt[0]).ok()); + let mut mapper = MusicListMapper::with_album( ctx.lang, artists.clone(), @@ -505,6 +565,7 @@ impl MapResponse for response::MusicPlaylist { album_type, year, by_va, + track_count: track_count.unwrap_or(tracks_res.c.len() as u16), tracks: tracks_res.c, variants: variants_res.c, }, @@ -555,8 +616,8 @@ mod tests { #[case::single("single", "MPREb_bHfHGoy7vuv")] #[case::description("description", "MPREb_PiyfuVl6aYd")] #[case::unavailable("unavailable", "MPREb_AzuWg8qAVVl")] - #[case::unavailable("unavailable", "MPREb_AzuWg8qAVVl")] #[case::two_columns("20240228_twoColumns", "MPREb_bHfHGoy7vuv")] + #[case::recommends("20250225_recommends", "MPREb_u1I69lSAe5v")] fn map_music_album(#[case] name: &str, #[case] id: &str) { let json_path = path!(*TESTFILES / "music_playlist" / format!("album_{name}.json")); let json_file = File::open(json_path).unwrap(); diff --git a/src/client/music_search.rs b/src/client/music_search.rs index dd40ada..a083dcc 100644 --- a/src/client/music_search.rs +++ b/src/client/music_search.rs @@ -155,8 +155,6 @@ impl MapResponse> for response::MusicSearch self, ctx: &MapRespCtx<'_>, ) -> Result>, ExtractionError> { - // dbg!(&self); - let tabs = self.contents.tabbed_search_results_renderer.contents; let sections = tabs .into_iter() diff --git a/src/client/music_history.rs b/src/client/music_userdata.rs similarity index 89% rename from src/client/music_history.rs rename to src/client/music_userdata.rs index 0ebfcf0..8c256cb 100644 --- a/src/client/music_history.rs +++ b/src/client/music_userdata.rs @@ -8,7 +8,7 @@ use crate::{ error::{Error, ExtractionError}, model::{ paginator::{ContinuationEndpoint, Paginator}, - AlbumItem, ArtistItem, HistoryItem, MusicPlaylistItem, TrackItem, + AlbumItem, ArtistItem, HistoryItem, MusicPlaylist, MusicPlaylistItem, TrackItem, }, serializer::MapResult, }; @@ -127,6 +127,20 @@ impl RustyPipeQuery { ) .await } + + /// Get all liked YouTube Music tracks of the logged-in user + /// + /// The difference to [`RustyPipeQuery::music_saved_tracks`] is that this function only returns + /// tracks that were explicitly liked by the user. + /// + /// Requires authentication cookies. + pub async fn music_liked_tracks(&self) -> Result { + self.clone() + .authenticated() + .music_playlist("LM") + .await + .map_err(crate::util::map_internal_playlist_err) + } } impl MapResponse>> for response::MusicHistory { @@ -160,7 +174,7 @@ impl MapResponse>> for response::MusicHistory { }; let mut mapper = MusicListMapper::new(ctx.lang); mapper.map_response(shelf.contents); - mapper.conv_history_items(shelf.title, &mut map_res); + mapper.conv_history_items(shelf.title, ctx.utc_offset, &mut map_res); } let ctoken = contents @@ -195,7 +209,7 @@ mod tests { #[test] fn map_history() { - let json_path = path!(*TESTFILES / "music_history" / "music_history.json"); + let json_path = path!(*TESTFILES / "music_userdata" / "music_history.json"); let json_file = File::open(json_path).unwrap(); let history: response::MusicHistory = diff --git a/src/client/pagination.rs b/src/client/pagination.rs index 3fad657..f0f052e 100644 --- a/src/client/pagination.rs +++ b/src/client/pagination.rs @@ -6,12 +6,15 @@ use crate::model::{ traits::FromYtItem, Comment, MusicItem, YouTubeItem, }; -use crate::model::{HistoryItem, TrackItem, VideoItem}; use crate::serializer::MapResult; -use self::response::YouTubeListItem; +#[cfg(feature = "userdata")] +use crate::model::{HistoryItem, TrackItem, VideoItem}; -use super::response::music_item::{map_queue_item, MusicListMapper, PlaylistPanelVideo}; +use super::response::{ + music_item::{map_queue_item, MusicListMapper, PlaylistPanelVideo}, + YouTubeListItem, +}; use super::{ response, ClientType, MapRespCtx, MapRespOptions, MapResponse, QContinuation, RustyPipeQuery, }; @@ -225,6 +228,7 @@ impl MapResponse> for response::MusicContinuation { } } +#[cfg(feature = "userdata")] impl MapResponse>> for response::Continuation { fn map_response( self, @@ -241,14 +245,13 @@ impl MapResponse>> for response::Continuation { mapper.map_response(contents); mapper.conv_history_items( header.map(|h| h.item_section_header_renderer.title), + ctx.utc_offset, &mut map_res, ); } - response::YouTubeListItem::ContinuationItemRenderer { - continuation_endpoint, - } => { + response::YouTubeListItem::ContinuationItemRenderer(ep) => { if ctoken.is_none() { - ctoken = Some(continuation_endpoint.continuation_command.token); + ctoken = ep.continuation_endpoint.into_token(); } } _ => {} @@ -269,6 +272,7 @@ impl MapResponse>> for response::Continuation { } } +#[cfg(feature = "userdata")] impl MapResponse>> for response::MusicContinuation { fn map_response( self, @@ -280,7 +284,7 @@ impl MapResponse>> for response::MusicContinuat let mut map_shelf = |shelf: response::music_item::MusicShelf| { let mut mapper = MusicListMapper::new(ctx.lang); mapper.map_response(shelf.contents); - mapper.conv_history_items(shelf.title, &mut map_res); + mapper.conv_history_items(shelf.title, ctx.utc_offset, &mut map_res); continuations.extend(shelf.continuations); }; @@ -421,6 +425,8 @@ impl Paginator { } } +#[cfg(feature = "userdata")] +#[cfg_attr(docsrs, doc(cfg(feature = "userdata")))] impl Paginator> { /// Get the next page from the paginator (or `None` if the paginator is exhausted) pub async fn next>(&self, query: Q) -> Result, Error> { @@ -436,6 +442,8 @@ impl Paginator> { } } +#[cfg(feature = "userdata")] +#[cfg_attr(docsrs, doc(cfg(feature = "userdata")))] impl Paginator> { /// Get the next page from the paginator (or `None` if the paginator is exhausted) pub async fn next>(&self, query: Q) -> Result, Error> { @@ -532,7 +540,11 @@ macro_rules! paginator { } paginator!(Comment); +#[cfg(feature = "userdata")] +#[cfg_attr(docsrs, doc(cfg(feature = "userdata")))] paginator!(HistoryItem); +#[cfg(feature = "userdata")] +#[cfg_attr(docsrs, doc(cfg(feature = "userdata")))] paginator!(HistoryItem); #[cfg(test)] @@ -619,7 +631,7 @@ mod tests { } #[rstest] - #[case::subscriptions("subscriptions", path!("history" / "subscriptions.json"))] + #[case::subscriptions("subscriptions", path!("userdata" / "subscriptions.json"))] fn map_continuation_channels(#[case] name: &str, #[case] path: PathBuf) { let json_path = path!(*TESTFILES / path); let json_file = File::open(json_path).unwrap(); @@ -643,7 +655,7 @@ mod tests { #[case::playlist_tracks("playlist_tracks", path!("music_playlist" / "playlist_cont.json"))] #[case::search_tracks("search_tracks", path!("music_search" / "tracks_cont.json"))] #[case::radio_tracks("radio_tracks", path!("music_details" / "radio_cont.json"))] - #[case::saved_tracks("saved_tracks", path!("music_history" / "saved_tracks.json"))] + #[case::saved_tracks("saved_tracks", path!("music_userdata" / "saved_tracks.json"))] fn map_continuation_tracks(#[case] name: &str, #[case] path: PathBuf) { let json_path = path!(*TESTFILES / path); let json_file = File::open(json_path).unwrap(); @@ -664,7 +676,7 @@ mod tests { } #[rstest] - #[case::saved_artists("saved_artists", path!("music_history" / "saved_artists.json"))] + #[case::saved_artists("saved_artists", path!("music_userdata" / "saved_artists.json"))] fn map_continuation_artists(#[case] name: &str, #[case] path: PathBuf) { let json_path = path!(*TESTFILES / path); let json_file = File::open(json_path).unwrap(); @@ -685,7 +697,7 @@ mod tests { } #[rstest] - #[case::saved_albums("saved_albums", path!("music_history" / "saved_albums.json"))] + #[case::saved_albums("saved_albums", path!("music_userdata" / "saved_albums.json"))] fn map_continuation_albums(#[case] name: &str, #[case] path: PathBuf) { let json_path = path!(*TESTFILES / path); let json_file = File::open(json_path).unwrap(); @@ -707,7 +719,7 @@ mod tests { #[rstest] #[case::playlist_related("playlist_related", path!("music_playlist" / "playlist_related.json"))] - #[case::saved_playlists("saved_playlists", path!("music_history" / "saved_playlists.json"))] + #[case::saved_playlists("saved_playlists", path!("music_userdata" / "saved_playlists.json"))] fn map_continuation_music_playlists(#[case] name: &str, #[case] path: PathBuf) { let json_path = path!(*TESTFILES / path); let json_file = File::open(json_path).unwrap(); diff --git a/src/client/player.rs b/src/client/player.rs index d85394c..9bae601 100644 --- a/src/client/player.rs +++ b/src/client/player.rs @@ -1,6 +1,6 @@ use std::{ borrow::Cow, - collections::{BTreeMap, HashMap}, + collections::{BTreeMap, HashMap, HashSet}, fmt::Debug, }; @@ -104,42 +104,29 @@ impl RustyPipeQuery { ) -> Result { let video_id = video_id.as_ref(); let mut last_e = None; + let mut query = Cow::Borrowed(self); let mut clients_iter = clients.iter().peekable(); + let mut failed_clients = HashSet::new(); while let Some(client) = clients_iter.next() { - if self.opts.auth == Some(true) && !self.auth_enabled(*client) { + if query.opts.auth == Some(true) && !self.auth_enabled(*client) { // If no client has auth enabled, return NoLogin error instead of "no clients" if last_e.is_none() { last_e = Some(Error::Auth(AuthError::NoLogin)); } continue; } + if failed_clients.contains(client) { + continue; + } - let res = self.player_from_client(video_id, *client).await; + let res = query.player_from_client(video_id, *client).await; match res { Ok(res) => return Ok(res), Err(Error::Extraction(e)) => { - if e.use_login() { - if let Some(c) = self.auth_enabled_client(clients) { - tracing::info!("{e}; fetching player with login"); - - match self - .clone() - .authenticated() - .player_from_client(video_id, c) - .await - { - Ok(res) => return Ok(res), - Err(Error::Extraction(e)) => { - if !e.switch_client() { - return Err(Error::Extraction(e)); - } - } - Err(e) => return Err(e), - } - } else { - return Err(Error::Extraction(e)); - } + if e.use_login() && query.opts.auth.is_none() { + clients_iter = clients.iter().peekable(); + query = Cow::Owned(self.clone().authenticated()); } else if !e.switch_client() { return Err(Error::Extraction(e)); } @@ -147,6 +134,7 @@ impl RustyPipeQuery { tracing::warn!("error fetching player with {client:?} client: {e}; retrying with {next_client:?} client"); } last_e = Some(Error::Extraction(e)); + failed_clients.insert(*client); } Err(e) => return Err(e), } @@ -156,22 +144,27 @@ impl RustyPipeQuery { async fn get_player_po_token(&self, video_id: &str) -> Result { if let Some(bg) = &self.client.inner.botguard { - let visitor_data = self.get_visitor_data(false).await?; + let (ident, visitor_data) = if self.opts.auth == Some(true) { + (self.client.user_auth_datasync_id()?, None) + } else { + let visitor_data = self.get_visitor_data(false).await?; + (visitor_data.to_owned(), Some(visitor_data)) + }; + if bg.po_token_cache { - let session_token = self.get_session_po_token(&visitor_data).await?; + let session_token = self.get_session_po_token(&ident).await?; Ok(PlayerPoToken { - visitor_data: Some(visitor_data), + visitor_data, session_po_token: Some(session_token), content_po_token: None, }) } else { - let (po_tokens, valid_until) = - self.get_po_tokens(&[video_id, &visitor_data]).await?; + let (po_tokens, valid_until) = self.get_po_tokens(&[video_id, &ident]).await?; let mut po_tokens = po_tokens.into_iter(); let po_token = po_tokens.next().unwrap(); let session_po_token = po_tokens.next().unwrap(); Ok(PlayerPoToken { - visitor_data: Some(visitor_data), + visitor_data, session_po_token: Some(PoToken { po_token: session_po_token, valid_until, @@ -191,6 +184,11 @@ impl RustyPipeQuery { video_id: S, client_type: ClientType, ) -> Result { + if self.opts.auth == Some(true) { + tracing::info!("fetching {client_type:?} player with login"); + } else { + tracing::debug!("fetching {client_type:?} player"); + } let video_id = video_id.as_ref(); let (deobf, player_po) = tokio::try_join!( @@ -309,24 +307,28 @@ impl MapResponse for response::Player { error_screen, } => { let mut msg = reason; - if let Some(error_screen) = error_screen { + if let Some(error_screen) = error_screen.player_error_message_renderer { msg.push_str(" - "); - msg.push_str(&error_screen.player_error_message_renderer.subreason); + msg.push_str(&error_screen.subreason); } - let reason = msg - .split_whitespace() - .find_map(|word| match word { - "payment" => Some(UnavailabilityReason::Paid), - "Premium" => Some(UnavailabilityReason::Premium), - "members-only" => Some(UnavailabilityReason::MembersOnly), - "country" => Some(UnavailabilityReason::Geoblocked), - "version" | "websites" => Some(UnavailabilityReason::UnsupportedClient), - "bot" => Some(UnavailabilityReason::IpBan), - "later." => Some(UnavailabilityReason::TryAgain), - _ => None, - }) - .unwrap_or_default(); + let reason = if error_screen.player_captcha_view_model.is_some() { + UnavailabilityReason::Captcha + } else { + msg.split_whitespace() + .find_map(|word| match word { + "payment" => Some(UnavailabilityReason::Paid), + "Premium" => Some(UnavailabilityReason::Premium), + "members-only" => Some(UnavailabilityReason::MembersOnly), + "country" => Some(UnavailabilityReason::Geoblocked), + "version" | "websites" => Some(UnavailabilityReason::UnsupportedClient), + "bot" => Some(UnavailabilityReason::IpBan), + "VPN/Proxy" => Some(UnavailabilityReason::VpnBan), + "later." => Some(UnavailabilityReason::TryAgain), + _ => None, + }) + .unwrap_or_default() + }; return Err(ExtractionError::Unavailable { reason, msg }); } response::player::PlayabilityStatus::LoginRequired { reason, messages } => { @@ -385,6 +387,21 @@ impl MapResponse for response::Player { video_details.video_id, ctx.id ))); } + // Sometimes YouTube Desktop does not output any URLs for adaptive streams. + // Since this is currently rare, it is best to retry the request in this case. + if !is_live + && !streaming_data.adaptive_formats.c.is_empty() + && streaming_data + .adaptive_formats + .c + .iter() + .all(|f| f.url.is_none() && f.signature_cipher.is_none()) + { + return Err(ExtractionError::Unavailable { + reason: UnavailabilityReason::TryAgain, + msg: "no adaptive stream URLs".to_owned(), + }); + } let video_info = VideoPlayerDetails { id: video_details.video_id, @@ -627,7 +644,7 @@ impl<'a> StreamsMapper<'a> { fn deobf(&self) -> Result<&Deobfuscator, DeobfError> { self.deobf .as_ref() - .ok_or(DeobfError::Other("no deobfuscator")) + .ok_or(DeobfError::Other("no deobfuscator".into())) } fn cipher_to_url_params( @@ -937,6 +954,7 @@ mod tests { use path_macro::path; use rstest::rstest; + use time::UtcOffset; use super::*; use crate::{deobfuscate::DeobfData, param::Language, util::tests::TESTFILES}; @@ -968,6 +986,7 @@ mod tests { .map_response(&MapRespCtx { id: "pPvd8UxmSbQ", lang: Language::En, + utc_offset: UtcOffset::UTC, deobf: Some(&DEOBF_DATA), visitor_data: None, client_type, diff --git a/src/client/playlist.rs b/src/client/playlist.rs index c2872e6..c080dd6 100644 --- a/src/client/playlist.rs +++ b/src/client/playlist.rs @@ -33,28 +33,6 @@ impl RustyPipeQuery { ) .await } - - /// Get all liked videos of the logged-in user - /// - /// Requires authentication cookies. - pub async fn liked_videos(&self) -> Result { - self.clone() - .authenticated() - .playlist("LL") - .await - .map_err(util::map_internal_playlist_err) - } - - /// Get the "Watch later" playlist of the logged-in user - /// - /// Requires authentication cookies. - pub async fn watch_later(&self) -> Result { - self.clone() - .authenticated() - .playlist("WL") - .await - .map_err(util::map_internal_playlist_err) - } } impl MapResponse for response::Playlist { @@ -162,10 +140,10 @@ impl MapResponse for response::Playlist { .next() .and_then(|r| r.metadata_parts.into_iter().next()) .and_then(|p| match p { - response::MetadataPart::Text(_) => None, - response::MetadataPart::AvatarStack { - avatar_stack_view_model, - } => ChannelId::try_from(avatar_stack_view_model.text).ok(), + response::MetadataPart::Text { .. } => None, + response::MetadataPart::AvatarStack { avatar_stack } => { + ChannelId::try_from(avatar_stack.avatar_stack_view_model.text).ok() + } }); // remove "by" prefix if let Some(c) = channel.as_mut() { @@ -225,8 +203,13 @@ impl MapResponse for response::Playlist { .as_deref() .or(last_update_txt2.as_deref()) .and_then(|txt| { - timeago::parse_textual_date_or_warn(ctx.lang, txt, &mut mapper.warnings) - .map(OffsetDateTime::date) + timeago::parse_textual_date_or_warn( + ctx.lang, + ctx.utc_offset, + txt, + &mut mapper.warnings, + ) + .map(OffsetDateTime::date) }); Ok(MapResult { @@ -274,6 +257,7 @@ mod tests { #[case::nomusic("nomusic", "PL1J-6JOckZtE_P9Xx8D3b2O6w0idhuKBe")] #[case::live("live", "UULVvqRdlKsE5Q8mf8YXbdIJLw")] #[case::pageheader("20241011_pageheader", "PLT2w2oBf1TZKyvY_M6JsASs73m-wjLzH5")] + #[case::cmdexecutor("20250316_cmdexecutor", "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi")] fn map_playlist_data(#[case] name: &str, #[case] id: &str) { let json_path = path!(*TESTFILES / "playlist" / format!("playlist_{name}.json")); let json_file = File::open(json_path).unwrap(); diff --git a/src/client/response/mod.rs b/src/client/response/mod.rs index c23c449..e160826 100644 --- a/src/client/response/mod.rs +++ b/src/client/response/mod.rs @@ -1,10 +1,8 @@ pub(crate) mod channel; -pub(crate) mod history; pub(crate) mod music_artist; pub(crate) mod music_charts; pub(crate) mod music_details; pub(crate) mod music_genres; -pub(crate) mod music_history; pub(crate) mod music_item; pub(crate) mod music_new; pub(crate) mod music_playlist; @@ -19,7 +17,6 @@ pub(crate) mod video_item; pub(crate) use channel::Channel; pub(crate) use channel::ChannelAbout; -pub(crate) use history::History; pub(crate) use music_artist::MusicArtist; pub(crate) use music_artist::MusicArtistAlbums; pub(crate) use music_charts::MusicCharts; @@ -28,7 +25,6 @@ pub(crate) use music_details::MusicLyrics; pub(crate) use music_details::MusicRelated; pub(crate) use music_genres::MusicGenre; pub(crate) use music_genres::MusicGenres; -pub(crate) use music_history::MusicHistory; pub(crate) use music_item::MusicContinuation; pub(crate) use music_new::MusicNew; pub(crate) use music_playlist::MusicPlaylist; @@ -51,6 +47,15 @@ pub(crate) mod channel_rss; #[cfg(feature = "rss")] pub(crate) use channel_rss::ChannelRss; +#[cfg(feature = "userdata")] +pub(crate) mod history; +#[cfg(feature = "userdata")] +pub(crate) use history::History; +#[cfg(feature = "userdata")] +pub(crate) mod music_history; +#[cfg(feature = "userdata")] +pub(crate) use music_history::MusicHistory; + use std::borrow::Cow; use std::collections::HashMap; use std::marker::PhantomData; @@ -147,9 +152,16 @@ pub(crate) struct ContinuationItemRenderer { pub continuation_endpoint: ContinuationEndpoint, } +#[derive(Debug, Deserialize)] +#[serde(untagged)] +pub(crate) enum ContinuationEndpoint { + ContinuationCommand(ContinuationCommandWrap), + CommandExecutorCommand(CommandExecutorCommandWrap), +} + #[derive(Debug, Deserialize)] #[serde(rename_all = "camelCase")] -pub(crate) struct ContinuationEndpoint { +pub(crate) struct ContinuationCommandWrap { pub continuation_command: ContinuationCommand, } @@ -159,7 +171,34 @@ pub(crate) struct ContinuationCommand { pub token: String, } +#[derive(Debug, Deserialize)] +#[serde(rename_all = "camelCase")] +pub(crate) struct CommandExecutorCommandWrap { + pub command_executor_command: CommandExecutorCommand, +} + #[serde_as] +#[derive(Debug, Deserialize)] +#[serde(rename_all = "camelCase")] +pub(crate) struct CommandExecutorCommand { + #[serde_as(as = "VecSkipError<_>")] + commands: Vec, +} + +impl ContinuationEndpoint { + pub fn into_token(self) -> Option { + match self { + Self::ContinuationCommand(cmd) => Some(cmd.continuation_command.token), + Self::CommandExecutorCommand(cmd) => cmd + .command_executor_command + .commands + .into_iter() + .next() + .map(|c| c.continuation_command.token), + } + } +} + #[derive(Debug, Deserialize)] #[serde(rename_all = "camelCase")] pub(crate) struct Icon { @@ -608,31 +647,36 @@ pub(crate) struct PhMetadataRow { #[serde_as] #[derive(Debug, Deserialize)] -#[serde(rename_all = "camelCase")] +#[serde(untagged)] pub(crate) enum MetadataPart { - Text(#[serde_as(as = "AttributedText")] TextComponent), - #[serde(rename_all = "camelCase")] - AvatarStack { - avatar_stack_view_model: TextComponentBox, + Text { + #[serde_as(as = "AttributedText")] + text: TextComponent, }, + #[serde(rename_all = "camelCase")] + AvatarStack { avatar_stack: AvatarStackInner }, +} + +#[derive(Debug, Deserialize)] +#[serde(rename_all = "camelCase")] +pub(crate) struct AvatarStackInner { + pub avatar_stack_view_model: TextComponentBox, } impl MetadataPart { pub fn into_text_component(self) -> TextComponent { match self { - MetadataPart::Text(text_component) => text_component, - MetadataPart::AvatarStack { - avatar_stack_view_model, - } => avatar_stack_view_model.text, + MetadataPart::Text { text } => text, + MetadataPart::AvatarStack { avatar_stack } => avatar_stack.avatar_stack_view_model.text, } } pub fn as_str(&self) -> &str { match self { - MetadataPart::Text(s) => s.as_str(), - MetadataPart::AvatarStack { - avatar_stack_view_model, - } => avatar_stack_view_model.text.as_str(), + MetadataPart::Text { text } => text.as_str(), + MetadataPart::AvatarStack { avatar_stack } => { + avatar_stack.avatar_stack_view_model.text.as_str() + } } } } diff --git a/src/client/response/music_artist.rs b/src/client/response/music_artist.rs index 88232ad..d510cf9 100644 --- a/src/client/response/music_artist.rs +++ b/src/client/response/music_artist.rs @@ -5,7 +5,8 @@ use crate::serializer::text::Text; use super::{ music_item::{ - Button, Grid, ItemSection, MusicThumbnailRenderer, SimpleHeader, SingleColumnBrowseResult, + Button, Grid, ItemSection, MusicMicroformat, MusicThumbnailRenderer, SimpleHeader, + SingleColumnBrowseResult, }, SectionList, Tab, }; @@ -14,8 +15,10 @@ use super::{ #[derive(Debug, Deserialize)] #[serde(rename_all = "camelCase")] pub(crate) struct MusicArtist { - pub contents: SingleColumnBrowseResult>>, - pub header: Header, + pub contents: Option>>>, + pub header: Option
, + #[serde(default)] + pub microformat: MusicMicroformat, } #[derive(Debug, Deserialize)] diff --git a/src/client/response/music_item.rs b/src/client/response/music_item.rs index f5e0fac..5d9907d 100644 --- a/src/client/response/music_item.rs +++ b/src/client/response/music_item.rs @@ -4,7 +4,7 @@ use serde_with::{rust::deserialize_ignore_any, serde_as, DefaultOnError, VecSkip use crate::{ model::{ self, traits::FromYtItem, AlbumId, AlbumItem, AlbumType, ArtistId, ArtistItem, ChannelId, - HistoryItem, MusicItem, MusicItemType, MusicPlaylistItem, TrackItem, UserItem, + MusicItem, MusicItemType, MusicPlaylistItem, TrackItem, UserItem, }, param::Language, serializer::{ @@ -22,6 +22,11 @@ use super::{ SimpleHeaderRenderer, Thumbnails, ThumbnailsWrap, }; +#[cfg(feature = "userdata")] +use crate::model::HistoryItem; +#[cfg(feature = "userdata")] +use time::UtcOffset; + #[derive(Debug, Deserialize)] #[serde(rename_all = "camelCase")] pub(crate) enum ItemSection { @@ -39,6 +44,7 @@ pub(crate) enum ItemSection { #[derive(Debug, Deserialize)] #[serde(rename_all = "camelCase")] pub(crate) struct MusicShelf { + #[cfg(feature = "userdata")] #[serde_as(as = "Option")] pub title: Option, /// Playlist ID (only for playlists) @@ -427,6 +433,22 @@ pub(crate) enum TrackBadge { LiveBadgeRenderer {}, } +#[serde_as] +#[derive(Default, Debug, Deserialize)] +#[serde(rename_all = "camelCase")] +pub(crate) struct MusicMicroformat { + #[serde_as(as = "DefaultOnError")] + pub microformat_data_renderer: MicroformatData, +} + +#[derive(Default, Debug, Deserialize)] +#[serde(rename_all = "camelCase")] +pub(crate) struct MicroformatData { + pub url_canonical: Option, + #[serde(default)] + pub noindex: bool, +} + /* #MAPPER */ @@ -524,7 +546,9 @@ impl MusicListMapper { MusicResponseItem::ContinuationItemRenderer { continuation_endpoint, } => { - self.ctoken = Some(continuation_endpoint.continuation_command.token); + if self.ctoken.is_none() { + self.ctoken = continuation_endpoint.into_token(); + } Ok(None) } } @@ -773,6 +797,7 @@ impl MusicListMapper { track_type: vtype.into(), track_nr, by_va, + unavailable: item.music_item_renderer_display_policy == DisplayPolicy::GreyOut, })); Ok(Some(MusicItemType::Track)) } @@ -953,6 +978,7 @@ impl MusicListMapper { track_type: vtype.into(), track_nr: None, by_va, + unavailable: false, })); Ok(Some(MusicItemType::Track)) } @@ -1117,6 +1143,7 @@ impl MusicListMapper { track_type: vtype.into(), track_nr: None, by_va, + unavailable: false, })); } else { let (artists, by_va) = map_artists(subtitle_p2); @@ -1154,6 +1181,7 @@ impl MusicListMapper { track_type: vtype.into(), track_nr: None, by_va, + unavailable: false, })); } Some(MusicItemType::Track) @@ -1269,9 +1297,11 @@ impl MusicListMapper { } } + #[cfg(feature = "userdata")] pub fn conv_history_items( self, date_txt: Option, + utc_offset: UtcOffset, res: &mut MapResult>>, ) { res.warnings.extend(self.warnings); @@ -1282,7 +1312,12 @@ impl MusicListMapper { .map(|item| HistoryItem { item, playback_date: date_txt.as_deref().and_then(|s| { - timeago::parse_textual_date_to_d(self.lang, s, &mut res.warnings) + timeago::parse_textual_date_to_d( + self.lang, + utc_offset, + s, + &mut res.warnings, + ) }), playback_date_txt: date_txt.clone(), }), @@ -1404,6 +1439,7 @@ pub(crate) fn map_queue_item(item: QueueMusicItem, lang: Language) -> MapResult< track_type: MusicVideoType::from_is_video(is_video).into(), track_nr: None, by_va, + unavailable: false, }, warnings, } diff --git a/src/client/response/music_playlist.rs b/src/client/response/music_playlist.rs index 0cb1a17..84202f0 100644 --- a/src/client/response/music_playlist.rs +++ b/src/client/response/music_playlist.rs @@ -5,22 +5,21 @@ use crate::serializer::text::{AttributedText, Text, TextComponents}; use super::{ music_item::{ - Button, ItemSection, MusicContentsRenderer, MusicItemMenuEntry, MusicThumbnailRenderer, + Button, ItemSection, MusicContentsRenderer, MusicItemMenuEntry, MusicMicroformat, + MusicThumbnailRenderer, }, url_endpoint::OnTapWrap, ContentsRenderer, SectionList, Tab, }; /// Response model for YouTube Music playlists and albums -#[serde_as] #[derive(Debug, Deserialize)] #[serde(rename_all = "camelCase")] pub(crate) struct MusicPlaylist { - pub contents: Contents, + pub contents: Option, pub header: Option
, #[serde(default)] - #[serde_as(as = "DefaultOnError")] - pub microformat: Option, + pub microformat: MusicMicroformat, } #[serde_as] @@ -162,15 +161,3 @@ pub(crate) struct AvatarStackViewModel { pub(crate) struct AvatarStackRendererContext { pub command_context: Option, } - -#[derive(Debug, Deserialize)] -#[serde(rename_all = "camelCase")] -pub(crate) struct Microformat { - pub microformat_data_renderer: MicroformatData, -} - -#[derive(Debug, Deserialize)] -#[serde(rename_all = "camelCase")] -pub(crate) struct MicroformatData { - pub url_canonical: String, -} diff --git a/src/client/response/player.rs b/src/client/response/player.rs index 4fbcb28..a880dd5 100644 --- a/src/client/response/player.rs +++ b/src/client/response/player.rs @@ -37,8 +37,7 @@ pub(crate) enum PlayabilityStatus { #[serde(default)] reason: String, #[serde(default)] - #[serde_as(deserialize_as = "DefaultOnError")] - error_screen: Option, + error_screen: ErrorScreen, }, /// Age limit / Private video #[serde(rename_all = "camelCase")] @@ -61,14 +60,18 @@ pub(crate) enum PlayabilityStatus { }, } -#[derive(Debug, Deserialize)] +#[serde_as] +#[derive(Default, Debug, Deserialize)] #[serde(rename_all = "camelCase")] pub(crate) struct ErrorScreen { - pub player_error_message_renderer: ErrorMessage, + #[serde(default)] + #[serde_as(deserialize_as = "DefaultOnError")] + pub player_error_message_renderer: Option, + pub player_captcha_view_model: Option, } #[serde_as] -#[derive(Debug, Deserialize)] +#[derive(Default, Debug, Deserialize)] #[serde(rename_all = "camelCase")] pub(crate) struct ErrorMessage { #[serde_as(as = "Text")] diff --git a/src/client/response/video_details.rs b/src/client/response/video_details.rs index 51d6ce4..10bd232 100644 --- a/src/client/response/video_details.rs +++ b/src/client/response/video_details.rs @@ -530,15 +530,14 @@ pub(crate) enum ContinuationItemVariants { } impl ContinuationItemVariants { - pub fn token(self) -> String { + pub fn into_token(self) -> Option { match self { ContinuationItemVariants::Ep { continuation_endpoint, } => continuation_endpoint, ContinuationItemVariants::Btn { button } => button.button_renderer.command, } - .continuation_command - .token + .into_token() } } diff --git a/src/client/response/video_item.rs b/src/client/response/video_item.rs index 1541728..5fa22bf 100644 --- a/src/client/response/video_item.rs +++ b/src/client/response/video_item.rs @@ -4,12 +4,9 @@ use serde_with::{ }; use time::OffsetDateTime; -use super::{ - ChannelBadge, ContentImage, ContinuationEndpoint, PhMetadataView, SimpleHeaderRenderer, - Thumbnails, -}; +use super::{ChannelBadge, ContentImage, ContinuationItemRenderer, PhMetadataView, Thumbnails}; use crate::{ - model::{Channel, ChannelItem, ChannelTag, HistoryItem, PlaylistItem, VideoItem, YouTubeItem}, + model::{Channel, ChannelItem, ChannelTag, PlaylistItem, VideoItem, YouTubeItem}, param::Language, serializer::{ text::{AttributedText, Text, TextComponent}, @@ -18,6 +15,11 @@ use crate::{ util::{self, timeago, TryRemove}, }; +#[cfg(feature = "userdata")] +use crate::{client::response::SimpleHeaderRenderer, model::HistoryItem}; +#[cfg(feature = "userdata")] +use time::UtcOffset; + #[serde_as] #[derive(Debug, Deserialize)] #[serde(rename_all = "camelCase")] @@ -35,12 +37,9 @@ pub(crate) enum YouTubeListItem { LockupViewModel(LockupViewModel), - /// Continauation items are located at the end of a list + /// Continuation items are located at the end of a list /// and contain the continuation token for progressive loading - #[serde(rename_all = "camelCase")] - ContinuationItemRenderer { - continuation_endpoint: ContinuationEndpoint, - }, + ContinuationItemRenderer(ContinuationItemRenderer), /// Corrected search query #[serde(rename_all = "camelCase")] @@ -66,6 +65,7 @@ pub(crate) enum YouTubeListItem { /// GridRenderer: contains videos on channel page #[serde(alias = "expandedShelfContentsRenderer", alias = "gridRenderer")] ItemSectionRenderer { + #[cfg(feature = "userdata")] header: Option, #[serde(alias = "items")] contents: MapResult>, @@ -298,6 +298,7 @@ pub(crate) struct YouTubeListRenderer { pub contents: MapResult>, } +#[cfg(feature = "userdata")] #[derive(Debug, Deserialize)] #[serde(rename_all = "camelCase")] pub(crate) struct ItemSectionHeader { @@ -786,7 +787,7 @@ impl YouTubeListMapper { thumbnail: tn.image.into(), channel, publish_date: publish_date_txt.as_deref().and_then(|t| { - timeago::parse_textual_date_or_warn(self.lang, t, &mut self.warnings) + timeago::parse_timeago_dt_or_warn(self.lang, t, &mut self.warnings) }), publish_date_txt, view_count, @@ -834,9 +835,11 @@ impl YouTubeListMapper { self.items.push(mapped); } } - YouTubeListItem::ContinuationItemRenderer { - continuation_endpoint, - } => self.ctoken = Some(continuation_endpoint.continuation_command.token), + YouTubeListItem::ContinuationItemRenderer(r) => { + if self.ctoken.is_none() { + self.ctoken = r.continuation_endpoint.into_token(); + } + } YouTubeListItem::ShowingResultsForRenderer { corrected_query } => { self.corrected_query = Some(corrected_query); } @@ -882,9 +885,11 @@ impl YouTubeListMapper { self.items.push(mapped); } } - YouTubeListItem::ContinuationItemRenderer { - continuation_endpoint, - } => self.ctoken = Some(continuation_endpoint.continuation_command.token), + YouTubeListItem::ContinuationItemRenderer(r) => { + if self.ctoken.is_none() { + self.ctoken = r.continuation_endpoint.into_token(); + } + } YouTubeListItem::ShowingResultsForRenderer { corrected_query } => { self.corrected_query = Some(corrected_query); } @@ -904,20 +909,20 @@ impl YouTubeListMapper { res.c.into_iter().for_each(|item| self.map_item(item)); } + #[cfg(feature = "userdata")] pub(crate) fn conv_history_items( self, date_txt: Option, + utc_offset: UtcOffset, res: &mut MapResult>>, ) { res.warnings.extend(self.warnings); - res.c.extend(self.items.into_iter().map(|item| { - HistoryItem { - item, - playback_date: date_txt.as_deref().and_then(|s| { - timeago::parse_textual_date_to_d(self.lang, s, &mut res.warnings) - }), - playback_date_txt: date_txt.clone(), - } + res.c.extend(self.items.into_iter().map(|item| HistoryItem { + item, + playback_date: date_txt.as_deref().and_then(|s| { + timeago::parse_textual_date_to_d(self.lang, utc_offset, s, &mut res.warnings) + }), + playback_date_txt: date_txt.clone(), })); } } @@ -934,9 +939,11 @@ impl YouTubeListMapper { self.items.push(mapped); } } - YouTubeListItem::ContinuationItemRenderer { - continuation_endpoint, - } => self.ctoken = Some(continuation_endpoint.continuation_command.token), + YouTubeListItem::ContinuationItemRenderer(r) => { + if self.ctoken.is_none() { + self.ctoken = r.continuation_endpoint.into_token(); + } + } YouTubeListItem::ShowingResultsForRenderer { corrected_query } => { self.corrected_query = Some(corrected_query); } diff --git a/src/client/snapshots/rustypipe__client__channel__tests__map_channel_playlists_20241109_lockup.snap b/src/client/snapshots/rustypipe__client__channel__tests__map_channel_playlists_20241109_lockup.snap index 3ae88c8..8dc1c76 100644 --- a/src/client/snapshots/rustypipe__client__channel__tests__map_channel_playlists_20241109_lockup.snap +++ b/src/client/snapshots/rustypipe__client__channel__tests__map_channel_playlists_20241109_lockup.snap @@ -7,7 +7,7 @@ Channel( name: "EEVblog", handle: Some("@EEVblog"), subscriber_count: Some(952000), - video_count: Some(2), + video_count: Some(2000), avatar: [ Thumbnail( url: "https://yt3.googleusercontent.com/ytc/AIdro_l17lYcTcRSydZeQK-RuiSfEeH5eX9m4irSNQj6109v5MQ=s72-c-k-c0x00ffffff-no-rj", diff --git a/src/client/snapshots/rustypipe__client__channel__tests__map_channel_videos_20240324_pageheader2.snap b/src/client/snapshots/rustypipe__client__channel__tests__map_channel_videos_20240324_pageheader2.snap index 2d7ebad..ae0a957 100644 --- a/src/client/snapshots/rustypipe__client__channel__tests__map_channel_videos_20240324_pageheader2.snap +++ b/src/client/snapshots/rustypipe__client__channel__tests__map_channel_videos_20240324_pageheader2.snap @@ -7,7 +7,7 @@ Channel( name: "EEVblog", handle: Some("@EEVblog"), subscriber_count: Some(933000), - video_count: Some(19), + video_count: Some(1900), avatar: [ Thumbnail( url: "https://yt3.googleusercontent.com/ytc/AIdro_lagjGDfXbXlQXhznx3CDRitOBdxvebllQd_YP1ag=s72-c-k-c0x00ffffff-no-rj", diff --git a/src/client/snapshots/rustypipe__client__music_artist__tests__map_music_artist_20250113_grouped_albums.snap b/src/client/snapshots/rustypipe__client__music_artist__tests__map_music_artist_20250113_grouped_albums.snap index 9c9acaa..cf847e8 100644 --- a/src/client/snapshots/rustypipe__client__music_artist__tests__map_music_artist_20250113_grouped_albums.snap +++ b/src/client/snapshots/rustypipe__client__music_artist__tests__map_music_artist_20250113_grouped_albums.snap @@ -52,6 +52,7 @@ MusicArtist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "h3T_NXRUUjM", @@ -84,6 +85,7 @@ MusicArtist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "XZfoFwWvkGQ", @@ -116,6 +118,7 @@ MusicArtist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "LOuVxwVFJhs", @@ -148,6 +151,7 @@ MusicArtist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "GePZUYeIQQQ", @@ -180,6 +184,7 @@ MusicArtist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "0mcING0Zdis", @@ -209,6 +214,7 @@ MusicArtist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "EAC-2ttHCyk", @@ -238,6 +244,7 @@ MusicArtist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "Bret5VaVzJk", @@ -267,6 +274,7 @@ MusicArtist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "EqP1_IcjW-s", @@ -296,6 +304,7 @@ MusicArtist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "3EoF9Of98e4", @@ -325,6 +334,7 @@ MusicArtist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "qr0eN_uIcTs", @@ -354,6 +364,7 @@ MusicArtist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "McgSyiug6XE", @@ -387,6 +398,7 @@ MusicArtist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "ioZxvVhjFs8", @@ -416,6 +428,7 @@ MusicArtist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "3jyZJEcomkw", @@ -445,6 +458,7 @@ MusicArtist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "9oM-cflYhGk", @@ -474,6 +488,7 @@ MusicArtist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), ], albums: [ diff --git a/src/client/snapshots/rustypipe__client__music_artist__tests__map_music_artist_default.snap b/src/client/snapshots/rustypipe__client__music_artist__tests__map_music_artist_default.snap index 6cc16cc..e684565 100644 --- a/src/client/snapshots/rustypipe__client__music_artist__tests__map_music_artist_default.snap +++ b/src/client/snapshots/rustypipe__client__music_artist__tests__map_music_artist_default.snap @@ -67,6 +67,7 @@ MusicArtist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "xTvyyoF_LZY", @@ -99,6 +100,7 @@ MusicArtist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "SlbfAYvA_gI", @@ -131,6 +133,7 @@ MusicArtist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "fdz_cabS9BU", @@ -163,6 +166,7 @@ MusicArtist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "hJWSZDJb-W4", @@ -195,6 +199,7 @@ MusicArtist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "fezKpDFKf5U", @@ -224,6 +229,7 @@ MusicArtist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "doGzjheI604", @@ -253,6 +259,7 @@ MusicArtist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "zjEdX8-3CD8", @@ -282,6 +289,7 @@ MusicArtist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "DQZcxN9v0RA", @@ -311,6 +319,7 @@ MusicArtist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "2Vv-BfVoq4g", @@ -340,6 +349,7 @@ MusicArtist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "JGwWNGJdvx8", @@ -369,6 +379,7 @@ MusicArtist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "nSDgHBxUbVQ", @@ -398,6 +409,7 @@ MusicArtist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "lp-EO5I60KA", @@ -427,6 +439,7 @@ MusicArtist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "orJSJGHjBLI", @@ -456,6 +469,7 @@ MusicArtist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "Il0S8BoucSA", @@ -485,6 +499,7 @@ MusicArtist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), ], albums: [ diff --git a/src/client/snapshots/rustypipe__client__music_artist__tests__map_music_artist_no_cont.snap b/src/client/snapshots/rustypipe__client__music_artist__tests__map_music_artist_no_cont.snap index c921dda..7deecd8 100644 --- a/src/client/snapshots/rustypipe__client__music_artist__tests__map_music_artist_no_cont.snap +++ b/src/client/snapshots/rustypipe__client__music_artist__tests__map_music_artist_no_cont.snap @@ -67,6 +67,7 @@ MusicArtist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "xTvyyoF_LZY", @@ -99,6 +100,7 @@ MusicArtist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "SlbfAYvA_gI", @@ -131,6 +133,7 @@ MusicArtist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "fdz_cabS9BU", @@ -163,6 +166,7 @@ MusicArtist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "hJWSZDJb-W4", @@ -195,6 +199,7 @@ MusicArtist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "fezKpDFKf5U", @@ -224,6 +229,7 @@ MusicArtist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "doGzjheI604", @@ -253,6 +259,7 @@ MusicArtist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "zjEdX8-3CD8", @@ -282,6 +289,7 @@ MusicArtist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "DQZcxN9v0RA", @@ -311,6 +319,7 @@ MusicArtist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "2Vv-BfVoq4g", @@ -340,6 +349,7 @@ MusicArtist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "JGwWNGJdvx8", @@ -369,6 +379,7 @@ MusicArtist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "nSDgHBxUbVQ", @@ -398,6 +409,7 @@ MusicArtist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "lp-EO5I60KA", @@ -427,6 +439,7 @@ MusicArtist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "orJSJGHjBLI", @@ -456,6 +469,7 @@ MusicArtist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "Il0S8BoucSA", @@ -485,6 +499,7 @@ MusicArtist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), ], albums: [ diff --git a/src/client/snapshots/rustypipe__client__music_artist__tests__map_music_artist_only_more_singles.snap b/src/client/snapshots/rustypipe__client__music_artist__tests__map_music_artist_only_more_singles.snap index 2c63b24..bca05ab 100644 --- a/src/client/snapshots/rustypipe__client__music_artist__tests__map_music_artist_only_more_singles.snap +++ b/src/client/snapshots/rustypipe__client__music_artist__tests__map_music_artist_only_more_singles.snap @@ -67,6 +67,7 @@ MusicArtist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "uZpH7EQ_PwE", @@ -99,6 +100,7 @@ MusicArtist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "WmQHSkjgyDM", @@ -143,6 +145,7 @@ MusicArtist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "9ssQKlLxBdQ", @@ -175,6 +178,7 @@ MusicArtist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "y4FiCl-tUJc", @@ -207,6 +211,7 @@ MusicArtist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "KSav7HayxtI", @@ -236,6 +241,7 @@ MusicArtist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "7wtfhZwyrcc", @@ -265,6 +271,7 @@ MusicArtist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "TO-_3tck2tg", @@ -294,6 +301,7 @@ MusicArtist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "D9G1VOjN_84", @@ -323,6 +331,7 @@ MusicArtist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "fKopy74weus", @@ -352,6 +361,7 @@ MusicArtist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "mWRsgZuwf_8", @@ -381,6 +391,7 @@ MusicArtist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "ktvTqknDobU", @@ -410,6 +421,7 @@ MusicArtist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "I-QfPUz1es8", @@ -434,6 +446,7 @@ MusicArtist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "0I647GU3Jsc", @@ -463,6 +476,7 @@ MusicArtist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "gOsM-DYAEhY", @@ -492,6 +506,7 @@ MusicArtist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), ], albums: [ diff --git a/src/client/snapshots/rustypipe__client__music_artist__tests__map_music_artist_only_singles.snap b/src/client/snapshots/rustypipe__client__music_artist__tests__map_music_artist_only_singles.snap index b90c6e2..879b878 100644 --- a/src/client/snapshots/rustypipe__client__music_artist__tests__map_music_artist_only_singles.snap +++ b/src/client/snapshots/rustypipe__client__music_artist__tests__map_music_artist_only_singles.snap @@ -67,6 +67,7 @@ MusicArtist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "7_Bav4c7UGM", @@ -99,6 +100,7 @@ MusicArtist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "kzUZABVj5UQ", @@ -131,6 +133,7 @@ MusicArtist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "P5uE7KDkDFE", @@ -160,6 +163,7 @@ MusicArtist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "kxjZwdLWFrc", @@ -189,6 +193,7 @@ MusicArtist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "-aneeaddeXc", @@ -218,6 +223,7 @@ MusicArtist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "YWijFdsj_Ew", @@ -247,6 +253,7 @@ MusicArtist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "N217ZuMQnfY", @@ -276,6 +283,7 @@ MusicArtist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "STNyxlYFyVY", @@ -305,6 +313,7 @@ MusicArtist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "v5KZ5dalhzU", @@ -334,6 +343,7 @@ MusicArtist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "vaSSdzgDNw0", @@ -363,6 +373,7 @@ MusicArtist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "Rq_JkcROjsI", @@ -392,6 +403,7 @@ MusicArtist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "5VNZWTzJFso", @@ -421,6 +433,7 @@ MusicArtist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), ], albums: [ diff --git a/src/client/snapshots/rustypipe__client__music_charts__tests__map_music_charts_US.snap b/src/client/snapshots/rustypipe__client__music_charts__tests__map_music_charts_US.snap index 0ce196c..d766194 100644 --- a/src/client/snapshots/rustypipe__client__music_charts__tests__map_music_charts_US.snap +++ b/src/client/snapshots/rustypipe__client__music_charts__tests__map_music_charts_US.snap @@ -36,6 +36,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "UhbixyxgsiU", @@ -65,6 +66,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "saGYMhApaH8", @@ -94,6 +96,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "8n5dJwWXrbo", @@ -123,6 +126,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "Cr8K88UcO0s", @@ -152,6 +156,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "pfxyk1glEq4", @@ -181,6 +186,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "VtKcDwz6hiM", @@ -210,6 +216,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "aAkMkVFwAoo", @@ -239,6 +246,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "3V8aen7Flhs", @@ -268,6 +276,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "rb0bjyt1OD0", @@ -297,6 +306,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "-1vsm5bhoyE", @@ -326,6 +336,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "ao3SN7fkQQU", @@ -359,6 +370,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "J9QwBwUnhQo", @@ -388,6 +400,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "WyhU6Zb_fhY", @@ -417,6 +430,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "aV-pJ8BBxj8", @@ -454,6 +468,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "gSeBZqcTHLc", @@ -483,6 +498,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "Vzkr-G1QEh8", @@ -512,6 +528,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "SK37InR9j38", @@ -545,6 +562,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "C2YSX4sV_bA", @@ -574,6 +592,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "ca48oMV59LU", @@ -603,6 +622,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "TUbmIriJlp4", @@ -636,6 +656,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "Z02zptUN8gI", @@ -669,6 +690,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "Uq9gPaIzbe8", @@ -702,6 +724,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "b1kbLwvqugk", @@ -731,6 +754,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "VF-FGf_ZZiI", @@ -760,6 +784,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "Om0rYw6qzb8", @@ -793,6 +818,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "PrSBuEFdRFU", @@ -826,6 +852,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "9YdgldMKGGU", @@ -855,6 +882,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "kiUIkL4aZ5o", @@ -884,6 +912,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "mTkPFsVC5NE", @@ -917,6 +946,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "YsMB0i5YTOc", @@ -946,6 +976,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "3CkLMG5NwUg", @@ -975,6 +1006,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "9yvzvUgzxxg", @@ -1004,6 +1036,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "gPCCYMeXin0", @@ -1033,6 +1066,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "gkkuezo7kX4", @@ -1070,6 +1104,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "D2nyu8d7Sq0", @@ -1099,6 +1134,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "SXrcyqCPu4E", @@ -1128,6 +1164,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "p38WgakuYDo", @@ -1157,6 +1194,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "n4Z1cpdkgQU", @@ -1186,6 +1224,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "4F_vcZ6KD9Q", @@ -1215,6 +1254,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), ], trending_tracks: [ @@ -1241,6 +1281,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "UhbixyxgsiU", @@ -1265,6 +1306,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "zugAhfd2r0g", @@ -1289,6 +1331,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "5jJJYYaw8vw", @@ -1317,6 +1360,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "VMZefv4Vrwg", @@ -1341,6 +1385,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "3V8aen7Flhs", @@ -1365,6 +1410,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "rb0bjyt1OD0", @@ -1389,6 +1435,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "Ut1OzEVUiM4", @@ -1413,6 +1460,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "rAr3-Pn9yRI", @@ -1437,6 +1485,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "PtPewTyPmUg", @@ -1461,6 +1510,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "G6xgMW7U0aY", @@ -1485,6 +1535,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "C2YSX4sV_bA", @@ -1509,6 +1560,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "kiUIkL4aZ5o", @@ -1533,6 +1585,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "9YdgldMKGGU", @@ -1557,6 +1610,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "Z02zptUN8gI", @@ -1585,6 +1639,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "S0_888ZjlAA", @@ -1609,6 +1664,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "J9QwBwUnhQo", @@ -1633,6 +1689,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "DWRj2BB8YHs", @@ -1665,6 +1722,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "hX0aI5Jz8i8", @@ -1689,6 +1747,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "Dw9VmOLwxoM", @@ -1713,6 +1772,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), ], artists: [ diff --git a/src/client/snapshots/rustypipe__client__music_charts__tests__map_music_charts_global.snap b/src/client/snapshots/rustypipe__client__music_charts__tests__map_music_charts_global.snap index 36575bf..c7db51e 100644 --- a/src/client/snapshots/rustypipe__client__music_charts__tests__map_music_charts_global.snap +++ b/src/client/snapshots/rustypipe__client__music_charts__tests__map_music_charts_global.snap @@ -32,6 +32,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "jEdfjuG0Fx4", @@ -65,6 +66,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "pRpeEdMmmQ0", @@ -94,6 +96,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "Gzs60iBgd3E", @@ -127,6 +130,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "sABN7goDbZ8", @@ -160,6 +164,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "saGYMhApaH8", @@ -189,6 +194,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "zuVV9Y55gvc", @@ -222,6 +228,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "TiM_TFpT_DE", @@ -251,6 +258,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "WcIcVapfqXw", @@ -284,6 +292,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "Cr8K88UcO0s", @@ -313,6 +322,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "BddP6PYo2gs", @@ -342,6 +352,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "POe9SOEKotk", @@ -371,6 +382,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "Z02zptUN8gI", @@ -404,6 +416,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "e8laLiWolGg", @@ -445,6 +458,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "SK37InR9j38", @@ -478,6 +492,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "5kJMtNWUytY", @@ -507,6 +522,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "gQlMMD8auMs", @@ -536,6 +552,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "D0gWr9K8Lb4", @@ -565,6 +582,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "7ouFkoU8Ap8", @@ -594,6 +612,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "-1vsm5bhoyE", @@ -623,6 +642,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "gnMdTTeY1FY", @@ -652,6 +672,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "ca48oMV59LU", @@ -681,6 +702,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "VtKcDwz6hiM", @@ -710,6 +732,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "5g2hT4GmAGU", @@ -739,6 +762,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "CQLsdm1ZYAw", @@ -772,6 +796,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "UhbixyxgsiU", @@ -801,6 +826,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "mxF58TYuPaM", @@ -830,6 +856,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "8n5dJwWXrbo", @@ -859,6 +886,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "j5y6xLpRwx4", @@ -892,6 +920,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "jRxDUsGmwuc", @@ -921,6 +950,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "RgKAFK5djSk", @@ -950,6 +980,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "TGtWWb9emYI", @@ -979,6 +1010,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "no0RhhdJMlE", @@ -1008,6 +1040,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "dzsuE5ugxf4", @@ -1037,6 +1070,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "aAkMkVFwAoo", @@ -1066,6 +1100,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "jpYkoa-uE_c", @@ -1103,6 +1138,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "A_g3lMcWVy0", @@ -1136,6 +1172,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "gIOyB9ZXn8s", @@ -1169,6 +1206,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "MwpMEbgC7DA", @@ -1198,6 +1236,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "AJleGCGFyIg", @@ -1227,6 +1266,7 @@ MusicCharts( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), ], trending_tracks: [], diff --git a/src/client/snapshots/rustypipe__client__music_details__tests__map_music_details_mv.snap b/src/client/snapshots/rustypipe__client__music_details__tests__map_music_details_mv.snap index fc22ac9..9abe6e6 100644 --- a/src/client/snapshots/rustypipe__client__music_details__tests__map_music_details_mv.snap +++ b/src/client/snapshots/rustypipe__client__music_details__tests__map_music_details_mv.snap @@ -36,6 +36,7 @@ TrackDetails( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), lyrics_id: Some("MPLYt_wrKjTn9hmry"), related_id: Some("MPTRt_wrKjTn9hmry"), diff --git a/src/client/snapshots/rustypipe__client__music_details__tests__map_music_details_track.snap b/src/client/snapshots/rustypipe__client__music_details__tests__map_music_details_track.snap index 7f559f0..6185cd5 100644 --- a/src/client/snapshots/rustypipe__client__music_details__tests__map_music_details_track.snap +++ b/src/client/snapshots/rustypipe__client__music_details__tests__map_music_details_track.snap @@ -54,6 +54,7 @@ TrackDetails( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), lyrics_id: Some("MPLYt_4xbv14CiQJm-1"), related_id: Some("MPTRt_4xbv14CiQJm-1"), diff --git a/src/client/snapshots/rustypipe__client__music_details__tests__map_music_radio_mv.snap b/src/client/snapshots/rustypipe__client__music_details__tests__map_music_radio_mv.snap index dab21d2..b76786f 100644 --- a/src/client/snapshots/rustypipe__client__music_details__tests__map_music_radio_mv.snap +++ b/src/client/snapshots/rustypipe__client__music_details__tests__map_music_radio_mv.snap @@ -38,6 +38,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "Y8JFxS1HlDo", @@ -72,6 +73,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "CM4CkVFmTds", @@ -106,6 +108,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "_ysomCGaZLw", @@ -140,6 +143,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "gQlMMD8auMs", @@ -174,6 +178,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "uR8Mrt1IpXg", @@ -208,6 +213,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "PkKnp4SdE-w", @@ -242,6 +248,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "4vbDFu0PUew", @@ -276,6 +283,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "A5H8zBb3iao", @@ -310,6 +318,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "_xJUCsyMQes", @@ -339,6 +348,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "n0j5NPptyM0", @@ -373,6 +383,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "3GWscde8rM8", @@ -407,6 +418,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "uBY1AoiF5Vo", @@ -441,6 +453,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "WPdWvnAAurg", @@ -475,6 +488,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "tyrVtwE8Gv0", @@ -509,6 +523,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "Jh4QFaPmdss", @@ -543,6 +558,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "2OvyA2__Eas", @@ -577,6 +593,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "dYRITmpFbJ4", @@ -611,6 +628,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "POe9SOEKotk", @@ -645,6 +663,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "pSudEWBAYRE", @@ -679,6 +698,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "nnVjsos40qk", @@ -713,6 +733,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "H69tJmsgd9I", @@ -747,6 +768,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "0IBSemQmno8", @@ -781,6 +803,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "MjCZfZfucEc", @@ -810,6 +833,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "tg2uF3R_Ozo", @@ -844,6 +868,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), ], ctoken: Some("CBkSSBILdGcydUYzUl9Pem8iEVJEQU1WTVplZXJybnVMaTVFMg53QUVCOGdFQ2VBRSUzRDgY0AEB-gEQQzcxNUY2RDFGQjIwNEQwQRgKggEVUFQ6RWd0MFp6SjFSak5TWDA5NmJ3"), diff --git a/src/client/snapshots/rustypipe__client__music_details__tests__map_music_radio_track.snap b/src/client/snapshots/rustypipe__client__music_details__tests__map_music_radio_track.snap index 6524f42..ee4e860 100644 --- a/src/client/snapshots/rustypipe__client__music_details__tests__map_music_radio_track.snap +++ b/src/client/snapshots/rustypipe__client__music_details__tests__map_music_radio_track.snap @@ -56,6 +56,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "u1uvv_yKhH8", @@ -108,6 +109,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "QiziJ40kTz0", @@ -160,6 +162,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "OXWz_x6-dro", @@ -212,6 +215,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "ghrlZIMDzbM", @@ -264,6 +268,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "04tYkKUPPv4", @@ -316,6 +321,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "wjCrjR5WpgQ", @@ -368,6 +374,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "wkVlb8rSies", @@ -420,6 +427,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "RdU3F5vN3_s", @@ -472,6 +480,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "950BdJKBhGo", @@ -524,6 +533,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "W0x7GcZkvH4", @@ -576,6 +586,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "0EK_M2taRIM", @@ -628,6 +639,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "INLFlN-PZq4", @@ -680,6 +692,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "8JXc4idKS_c", @@ -732,6 +745,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "vFFT1iAUNDE", @@ -788,6 +802,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "g92HIac9ufA", @@ -840,6 +855,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "CinJhZF5ZuA", @@ -892,6 +908,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "t7hmovsG_f0", @@ -944,6 +961,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "FrEDny55ch8", @@ -996,6 +1014,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "PyyT5tHbOLw", @@ -1048,6 +1067,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "_ZkUb7iIOqQ", @@ -1100,6 +1120,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "UxZH9lRdLD0", @@ -1152,6 +1173,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "aYlXNpaQydk", @@ -1204,6 +1226,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "SZiwpL62to8", @@ -1256,6 +1279,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "mbg1Cn6Ua9U", @@ -1308,6 +1332,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), ], ctoken: Some("CBkSSBILbWJnMUNuNlVhOVUiEVJEQU1WTTduaWdYUVMxWGIwMg53QUVCOGdFQ2VBRSUzRDgY0AEB-gEQQzcxNUY2RDFGQjIwNEQwQRgKggEVUFQ6RWd0dFltY3hRMjQyVldFNVZR"), diff --git a/src/client/snapshots/rustypipe__client__music_details__tests__map_music_related.snap b/src/client/snapshots/rustypipe__client__music_details__tests__map_music_related.snap index 4749fc2..c882bc6 100644 --- a/src/client/snapshots/rustypipe__client__music_details__tests__map_music_related.snap +++ b/src/client/snapshots/rustypipe__client__music_details__tests__map_music_related.snap @@ -35,6 +35,7 @@ MusicRelated( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "g92HIac9ufA", @@ -67,6 +68,7 @@ MusicRelated( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "khgCIMs_lVQ", @@ -99,6 +101,7 @@ MusicRelated( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "i2VGa-ETiM4", @@ -131,6 +134,7 @@ MusicRelated( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "INLFlN-PZq4", @@ -163,6 +167,7 @@ MusicRelated( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "ZzbNM2l-AAA", @@ -195,6 +200,7 @@ MusicRelated( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "i4loHXi8f3A", @@ -227,6 +233,7 @@ MusicRelated( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "miqQAzOXPBo", @@ -259,6 +266,7 @@ MusicRelated( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "hh5GKVa8VtM", @@ -291,6 +299,7 @@ MusicRelated( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "dzwSnvfKEtw", @@ -323,6 +332,7 @@ MusicRelated( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "REmUidcJt5I", @@ -355,6 +365,7 @@ MusicRelated( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "OXWz_x6-dro", @@ -387,6 +398,7 @@ MusicRelated( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "aFoqCI75WoY", @@ -419,6 +431,7 @@ MusicRelated( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "_Pm74XignKI", @@ -451,6 +464,7 @@ MusicRelated( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "-uOShlFu1v8", @@ -483,6 +497,7 @@ MusicRelated( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "LP9sF1v-vz4", @@ -515,6 +530,7 @@ MusicRelated( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "KJrPsT2X-yk", @@ -547,6 +563,7 @@ MusicRelated( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "tkzYyEp4zB4", @@ -579,6 +596,7 @@ MusicRelated( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "ZpD59tu5_Rk", @@ -611,6 +629,7 @@ MusicRelated( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "_eNXeEx9Hvk", @@ -643,6 +662,7 @@ MusicRelated( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), ], other_versions: [ @@ -669,6 +689,7 @@ MusicRelated( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "Yi2nsnpw5h0", @@ -693,6 +714,7 @@ MusicRelated( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "2Qefh0W_H88", @@ -717,6 +739,7 @@ MusicRelated( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "oo89OQvzkIo", @@ -741,6 +764,7 @@ MusicRelated( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), ], albums: [ diff --git a/src/client/snapshots/rustypipe__client__music_new__tests__map_music_new_videos_default.snap b/src/client/snapshots/rustypipe__client__music_new__tests__map_music_new_videos_default.snap index 0702ea3..88ae8ab 100644 --- a/src/client/snapshots/rustypipe__client__music_new__tests__map_music_new_videos_default.snap +++ b/src/client/snapshots/rustypipe__client__music_new__tests__map_music_new_videos_default.snap @@ -31,6 +31,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "gFERoNpcnFU", @@ -60,6 +61,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "bmEzom5sfCI", @@ -89,6 +91,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "QHY2pm7uT3k", @@ -118,6 +121,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "Su42LK7I4NM", @@ -147,6 +151,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "mly7ha04bEE", @@ -176,6 +181,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "c91bmLbGt-g", @@ -213,6 +219,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "IwzkfMmNMpM", @@ -242,6 +249,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "_-spkuonX2k", @@ -275,6 +283,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "48pBUciAbRY", @@ -304,5 +313,6 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), ] diff --git a/src/client/snapshots/rustypipe__client__music_new__tests__map_music_new_videos_w_podcasts.snap b/src/client/snapshots/rustypipe__client__music_new__tests__map_music_new_videos_w_podcasts.snap index 3ab035d..2423d08 100644 --- a/src/client/snapshots/rustypipe__client__music_new__tests__map_music_new_videos_w_podcasts.snap +++ b/src/client/snapshots/rustypipe__client__music_new__tests__map_music_new_videos_w_podcasts.snap @@ -31,6 +31,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "_UN2gwabRBI", @@ -60,6 +61,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "aY72b4ZGPbo", @@ -89,6 +91,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "Cu82AvG87_g", @@ -118,6 +121,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "p9R94XSYjwI", @@ -147,6 +151,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "Tlg574e9fuU", @@ -176,6 +181,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "1L-RpSmlWp0", @@ -205,6 +211,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "EI28gmgBMfw", @@ -234,6 +241,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "Z1DEwM1E7ho", @@ -267,6 +275,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "hqnDi07CsJU", @@ -296,6 +305,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "_T2tvIwOMfc", @@ -325,6 +335,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "seDc-M7aSOI", @@ -354,6 +365,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "APJAQoSCwuA", @@ -383,6 +395,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "965Lv2AwODM", @@ -412,6 +425,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "Yl7NAOn0YJw", @@ -441,6 +455,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "TVhoS5qhVi4", @@ -470,6 +485,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "dZdaP7DGze4", @@ -499,6 +515,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "SsizZ2VZe6c", @@ -528,6 +545,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "xFRIddDw8bw", @@ -557,6 +575,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "Rbhky_2qIUo", @@ -586,6 +605,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "ECovqS_ItUo", @@ -615,6 +635,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "uxP0y-m6ysA", @@ -644,6 +665,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "simC880SUGk", @@ -673,6 +695,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "dGLVJ35_gnA", @@ -702,6 +725,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "vY6UiUDPuMk", @@ -731,6 +755,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "QMQw_waEPi0", @@ -760,6 +785,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "Sc2-3BK2mzM", @@ -793,6 +819,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "bprHBlahnmM", @@ -817,6 +844,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "FMhHc5x2DzE", @@ -846,6 +874,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "nOjbJdw2dPs", @@ -875,6 +904,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "1G1zcTV5yX4", @@ -904,6 +934,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "BcbKoY7XpJE", @@ -933,6 +964,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "mq6zggKZTFU", @@ -962,6 +994,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "aQFl1xhloVo", @@ -991,6 +1024,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "A3IhjA2aMUg", @@ -1024,6 +1058,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "cxIOWM0xLc4", @@ -1053,6 +1088,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "IFKAgKgVaSI", @@ -1082,6 +1118,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "iGUN99hW3nU", @@ -1111,6 +1148,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "_alKEACsIds", @@ -1140,6 +1178,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "WGNJIF7OoAc", @@ -1169,6 +1208,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "a_TotMZ5hxc", @@ -1202,6 +1242,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "0eoeyKkWBRs", @@ -1231,6 +1272,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "DU4NtqyTnuM", @@ -1260,6 +1302,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "kLbn61Z4LDI", @@ -1289,6 +1332,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "vMFNI5lOLwU", @@ -1326,6 +1370,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "AZoZbtI67Yk", @@ -1355,6 +1400,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "Ah4Dn3VAnMk", @@ -1384,6 +1430,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "sLklEvxhmAQ", @@ -1413,6 +1460,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "2Lbp1P4pP6c", @@ -1442,6 +1490,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "2TYIa09PXyo", @@ -1471,6 +1520,7 @@ expression: map_res.c track_type: episode, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "Hdy7l8fkREo", @@ -1500,6 +1550,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "A-sjPe3xvqY", @@ -1533,6 +1584,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "jFVX_v2yAas", @@ -1562,6 +1614,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "YDfL2Ns8wz4", @@ -1591,6 +1644,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "du4hVdxqyr8", @@ -1620,6 +1674,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "G5vlW0PZ878", @@ -1649,6 +1704,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "Gtg2TSR19Mg", @@ -1678,6 +1734,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "vJ3wwezOV_8", @@ -1707,6 +1764,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "76q5EiRyYks", @@ -1736,6 +1794,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "nEjntI9GMVM", @@ -1765,6 +1824,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "Gtct_ipIQmo", @@ -1794,6 +1854,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "aw4kqTyZshk", @@ -1823,6 +1884,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "xjoCNfK3vxo", @@ -1852,6 +1914,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "DN1gYO3bu-k", @@ -1876,6 +1939,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "X_cqTeG7v98", @@ -1905,6 +1969,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "b_B4ebhKvQ4", @@ -1934,6 +1999,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "VQp1QmwOzxw", @@ -1963,6 +2029,7 @@ expression: map_res.c track_type: episode, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "suAR1PYFNYA", @@ -1992,6 +2059,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "No3Cr6ph-9U", @@ -2021,6 +2089,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "ORJEgiVY08U", @@ -2050,6 +2119,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "2px4-y1Y0PI", @@ -2079,6 +2149,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "kchzKOizhGg", @@ -2108,6 +2179,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "V6eAGSz4JI8", @@ -2137,6 +2209,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "1A5hWzS00Nc", @@ -2166,6 +2239,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "bzsSkarE4zw", @@ -2199,6 +2273,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "59HJZIMVxAg", @@ -2228,6 +2303,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "8XQYz7JKjWI", @@ -2257,6 +2333,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "5FkJkpTWSWk", @@ -2294,6 +2371,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "1m51ncAU4uA", @@ -2327,6 +2405,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "Ycff6mFkoPY", @@ -2356,6 +2435,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "g0ghPuWqYR0", @@ -2385,6 +2465,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "1YiTQJcKajE", @@ -2414,6 +2495,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "TuyisGsNr4g", @@ -2443,6 +2525,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "ClU3aqamHGQ", @@ -2472,6 +2555,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "bYyB3FzPRfg", @@ -2505,6 +2589,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "I5eu4XMWZR8", @@ -2534,6 +2619,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "ziNtA-mcXTY", @@ -2563,6 +2649,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "CDEikOST7ZQ", @@ -2596,6 +2683,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "YQzvJSR5jy8", @@ -2625,6 +2713,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "lPaplIqUXJc", @@ -2654,6 +2743,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "78Y0SxVVxP4", @@ -2683,6 +2773,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "2e-xqMWT9GY", @@ -2712,6 +2803,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "81RRIPE404o", @@ -2741,6 +2833,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "uxR8VhGG9Pc", @@ -2770,6 +2863,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "JSNwR0MzGZQ", @@ -2799,6 +2893,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "DS8dvzDXpjQ", @@ -2828,6 +2923,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "j10zAWP5KsM", @@ -2857,6 +2953,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "ugFKFWhsoZA", @@ -2886,6 +2983,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "xXO1h6Kthcw", @@ -2915,6 +3013,7 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "VOUqmbeilXA", @@ -2944,5 +3043,6 @@ expression: map_res.c track_type: video, track_nr: None, by_va: false, + unavailable: false, ), ] diff --git a/src/client/snapshots/rustypipe__client__music_playlist__tests__map_music_album_20240228_twoColumns.snap b/src/client/snapshots/rustypipe__client__music_playlist__tests__map_music_album_20240228_twoColumns.snap index 84ca230..3438871 100644 --- a/src/client/snapshots/rustypipe__client__music_playlist__tests__map_music_album_20240228_twoColumns.snap +++ b/src/client/snapshots/rustypipe__client__music_playlist__tests__map_music_album_20240228_twoColumns.snap @@ -43,6 +43,7 @@ MusicAlbum( album_type: single, year: Some(2020), by_va: false, + track_count: 1, tracks: [ TrackItem( id: "XX0epju-YvY", @@ -68,6 +69,7 @@ MusicAlbum( track_type: video, track_nr: Some(1), by_va: false, + unavailable: false, ), ], variants: [], diff --git a/src/client/snapshots/rustypipe__client__music_playlist__tests__map_music_album_20250225_recommends.snap b/src/client/snapshots/rustypipe__client__music_playlist__tests__map_music_album_20250225_recommends.snap new file mode 100644 index 0000000..ee819e1 --- /dev/null +++ b/src/client/snapshots/rustypipe__client__music_playlist__tests__map_music_album_20250225_recommends.snap @@ -0,0 +1,156 @@ +--- +source: src/client/music_playlist.rs +expression: map_res.c +--- +MusicAlbum( + id: "MPREb_u1I69lSAe5v", + playlist_id: Some("OLAK5uy_lGP_zv0vJDUlecQDzugUJmjcF7pvyVNyY"), + name: "Waldbrand", + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/IYxE8yTIpFUu0OayA5SaxFEn6zQ7T21hpkvI8CODY9NEH1XIhyoUhGohkZuaK-xSu22BC4wjp6srNjIW=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/IYxE8yTIpFUu0OayA5SaxFEn6zQ7T21hpkvI8CODY9NEH1XIhyoUhGohkZuaK-xSu22BC4wjp6srNjIW=w120-h120-l90-rj", + width: 120, + height: 120, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/IYxE8yTIpFUu0OayA5SaxFEn6zQ7T21hpkvI8CODY9NEH1XIhyoUhGohkZuaK-xSu22BC4wjp6srNjIW=w226-h226-l90-rj", + width: 226, + height: 226, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/IYxE8yTIpFUu0OayA5SaxFEn6zQ7T21hpkvI8CODY9NEH1XIhyoUhGohkZuaK-xSu22BC4wjp6srNjIW=w544-h544-l90-rj", + width: 544, + height: 544, + ), + ], + artists: [ + ArtistId( + id: Some("UCpJyCbFbdTrx0M90HCNBHFQ"), + name: "Madeline Juno", + ), + ], + artist_id: Some("UCpJyCbFbdTrx0M90HCNBHFQ"), + description: None, + album_type: ep, + year: Some(2016), + by_va: false, + track_count: 5, + tracks: [ + TrackItem( + id: "aGd3VKSOTxY", + name: "Ich wache auf", + duration: Some(222), + cover: [], + artists: [ + ArtistId( + id: Some("UCpJyCbFbdTrx0M90HCNBHFQ"), + name: "Madeline Juno", + ), + ], + artist_id: Some("UCpJyCbFbdTrx0M90HCNBHFQ"), + album: Some(AlbumId( + id: "MPREb_u1I69lSAe5v", + name: "Waldbrand", + )), + view_count: Some(208000), + track_type: track, + track_nr: Some(1), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "lhPOMUjV4rE", + name: "Waldbrand", + duration: Some(209), + cover: [], + artists: [ + ArtistId( + id: Some("UCpJyCbFbdTrx0M90HCNBHFQ"), + name: "Madeline Juno", + ), + ], + artist_id: Some("UCpJyCbFbdTrx0M90HCNBHFQ"), + album: Some(AlbumId( + id: "MPREb_u1I69lSAe5v", + name: "Waldbrand", + )), + view_count: Some(6000000), + track_type: video, + track_nr: Some(2), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "Bu26uFtpt58", + name: "Verlernt", + duration: Some(224), + cover: [], + artists: [ + ArtistId( + id: Some("UCpJyCbFbdTrx0M90HCNBHFQ"), + name: "Madeline Juno", + ), + ], + artist_id: Some("UCpJyCbFbdTrx0M90HCNBHFQ"), + album: Some(AlbumId( + id: "MPREb_u1I69lSAe5v", + name: "Waldbrand", + )), + view_count: Some(418000), + track_type: track, + track_nr: Some(3), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "RgwNqqiVqdY", + name: "In Farbe", + duration: Some(222), + cover: [], + artists: [ + ArtistId( + id: Some("UCpJyCbFbdTrx0M90HCNBHFQ"), + name: "Madeline Juno", + ), + ], + artist_id: Some("UCpJyCbFbdTrx0M90HCNBHFQ"), + album: Some(AlbumId( + id: "MPREb_u1I69lSAe5v", + name: "Waldbrand", + )), + view_count: Some(127000), + track_type: track, + track_nr: Some(4), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "2TuOh30XbCI", + name: "Stadt im Hinterland", + duration: Some(198), + cover: [], + artists: [ + ArtistId( + id: Some("UCpJyCbFbdTrx0M90HCNBHFQ"), + name: "Madeline Juno", + ), + ], + artist_id: Some("UCpJyCbFbdTrx0M90HCNBHFQ"), + album: Some(AlbumId( + id: "MPREb_u1I69lSAe5v", + name: "Waldbrand", + )), + view_count: Some(79000), + track_type: track, + track_nr: Some(5), + by_va: false, + unavailable: false, + ), + ], + variants: [], +) diff --git a/src/client/snapshots/rustypipe__client__music_playlist__tests__map_music_album_description.snap b/src/client/snapshots/rustypipe__client__music_playlist__tests__map_music_album_description.snap index 13e1d87..fcd9927 100644 --- a/src/client/snapshots/rustypipe__client__music_playlist__tests__map_music_album_description.snap +++ b/src/client/snapshots/rustypipe__client__music_playlist__tests__map_music_album_description.snap @@ -43,6 +43,7 @@ MusicAlbum( album_type: album, year: Some(2015), by_va: false, + track_count: 11, tracks: [ TrackItem( id: "YQHsXMglC9A", @@ -64,6 +65,7 @@ MusicAlbum( track_type: video, track_nr: Some(1), by_va: false, + unavailable: false, ), TrackItem( id: "fk4BbF7B29w", @@ -85,6 +87,7 @@ MusicAlbum( track_type: video, track_nr: Some(2), by_va: false, + unavailable: false, ), TrackItem( id: "z7NEG3SGZ_g", @@ -106,6 +109,7 @@ MusicAlbum( track_type: track, track_nr: Some(3), by_va: false, + unavailable: false, ), TrackItem( id: "a1IuJLebHgM", @@ -127,6 +131,7 @@ MusicAlbum( track_type: track, track_nr: Some(4), by_va: false, + unavailable: false, ), TrackItem( id: "-fsCc7Be1H0", @@ -148,6 +153,7 @@ MusicAlbum( track_type: track, track_nr: Some(5), by_va: false, + unavailable: false, ), TrackItem( id: "l8djdhhFuxo", @@ -169,6 +175,7 @@ MusicAlbum( track_type: track, track_nr: Some(6), by_va: false, + unavailable: false, ), TrackItem( id: "Qiu59lZShCo", @@ -190,6 +197,7 @@ MusicAlbum( track_type: track, track_nr: Some(7), by_va: false, + unavailable: false, ), TrackItem( id: "-hzFTJDJGkQ", @@ -211,6 +219,7 @@ MusicAlbum( track_type: track, track_nr: Some(8), by_va: false, + unavailable: false, ), TrackItem( id: "Db9ciJPIaEU", @@ -232,6 +241,7 @@ MusicAlbum( track_type: track, track_nr: Some(9), by_va: false, + unavailable: false, ), TrackItem( id: "jb5g4UFHmfQ", @@ -253,6 +263,7 @@ MusicAlbum( track_type: track, track_nr: Some(10), by_va: false, + unavailable: false, ), TrackItem( id: "1kZsaRkVEUY", @@ -274,6 +285,7 @@ MusicAlbum( track_type: track, track_nr: Some(11), by_va: false, + unavailable: false, ), ], variants: [], diff --git a/src/client/snapshots/rustypipe__client__music_playlist__tests__map_music_album_one_artist.snap b/src/client/snapshots/rustypipe__client__music_playlist__tests__map_music_album_one_artist.snap index 486d93f..e0ebfef 100644 --- a/src/client/snapshots/rustypipe__client__music_playlist__tests__map_music_album_one_artist.snap +++ b/src/client/snapshots/rustypipe__client__music_playlist__tests__map_music_album_one_artist.snap @@ -39,6 +39,7 @@ MusicAlbum( album_type: album, year: Some(2016), by_va: false, + track_count: 18, tracks: [ TrackItem( id: "g0iRiJ_ck48", @@ -60,6 +61,7 @@ MusicAlbum( track_type: track, track_nr: Some(1), by_va: false, + unavailable: false, ), TrackItem( id: "rREEBXp0y9s", @@ -81,6 +83,7 @@ MusicAlbum( track_type: track, track_nr: Some(2), by_va: false, + unavailable: false, ), TrackItem( id: "zvU5Y8Q19hU", @@ -102,6 +105,7 @@ MusicAlbum( track_type: track, track_nr: Some(3), by_va: false, + unavailable: false, ), TrackItem( id: "ARKLrzzTQA0", @@ -123,6 +127,7 @@ MusicAlbum( track_type: track, track_nr: Some(4), by_va: false, + unavailable: false, ), TrackItem( id: "tstLgN8A_Ng", @@ -144,6 +149,7 @@ MusicAlbum( track_type: track, track_nr: Some(5), by_va: false, + unavailable: false, ), TrackItem( id: "k2DjgQOY3Ts", @@ -165,6 +171,7 @@ MusicAlbum( track_type: track, track_nr: Some(6), by_va: false, + unavailable: false, ), TrackItem( id: "azHwhecxEsI", @@ -186,6 +193,7 @@ MusicAlbum( track_type: track, track_nr: Some(7), by_va: false, + unavailable: false, ), TrackItem( id: "_FcsdYIQ2co", @@ -207,6 +215,7 @@ MusicAlbum( track_type: track, track_nr: Some(8), by_va: false, + unavailable: false, ), TrackItem( id: "27bOWEbshyE", @@ -228,6 +237,7 @@ MusicAlbum( track_type: track, track_nr: Some(9), by_va: false, + unavailable: false, ), TrackItem( id: "riD_3oZwt8w", @@ -249,6 +259,7 @@ MusicAlbum( track_type: track, track_nr: Some(10), by_va: false, + unavailable: false, ), TrackItem( id: "8GNvjF3no9s", @@ -270,6 +281,7 @@ MusicAlbum( track_type: track, track_nr: Some(11), by_va: false, + unavailable: false, ), TrackItem( id: "YHMFzf1uN2U", @@ -291,6 +303,7 @@ MusicAlbum( track_type: track, track_nr: Some(12), by_va: false, + unavailable: false, ), TrackItem( id: "jvV-z5F3oAo", @@ -312,6 +325,7 @@ MusicAlbum( track_type: track, track_nr: Some(13), by_va: false, + unavailable: false, ), TrackItem( id: "u8_9cxlrh8k", @@ -333,6 +347,7 @@ MusicAlbum( track_type: track, track_nr: Some(14), by_va: false, + unavailable: false, ), TrackItem( id: "gSvKcvM1Wk0", @@ -354,6 +369,7 @@ MusicAlbum( track_type: track, track_nr: Some(15), by_va: false, + unavailable: false, ), TrackItem( id: "wQHgKRJ0pDQ", @@ -375,6 +391,7 @@ MusicAlbum( track_type: track, track_nr: Some(16), by_va: false, + unavailable: false, ), TrackItem( id: "Ckz5i6-hzf0", @@ -396,6 +413,7 @@ MusicAlbum( track_type: track, track_nr: Some(17), by_va: false, + unavailable: false, ), TrackItem( id: "y5zuUgyFqrc", @@ -417,6 +435,7 @@ MusicAlbum( track_type: track, track_nr: Some(18), by_va: false, + unavailable: false, ), ], variants: [ diff --git a/src/client/snapshots/rustypipe__client__music_playlist__tests__map_music_album_single.snap b/src/client/snapshots/rustypipe__client__music_playlist__tests__map_music_album_single.snap index ed4ce55..9bb270a 100644 --- a/src/client/snapshots/rustypipe__client__music_playlist__tests__map_music_album_single.snap +++ b/src/client/snapshots/rustypipe__client__music_playlist__tests__map_music_album_single.snap @@ -43,6 +43,7 @@ MusicAlbum( album_type: single, year: Some(2020), by_va: false, + track_count: 1, tracks: [ TrackItem( id: "XX0epju-YvY", @@ -68,6 +69,7 @@ MusicAlbum( track_type: video, track_nr: Some(1), by_va: false, + unavailable: false, ), ], variants: [], diff --git a/src/client/snapshots/rustypipe__client__music_playlist__tests__map_music_album_unavailable.snap b/src/client/snapshots/rustypipe__client__music_playlist__tests__map_music_album_unavailable.snap index 16fb88f..3637c4f 100644 --- a/src/client/snapshots/rustypipe__client__music_playlist__tests__map_music_album_unavailable.snap +++ b/src/client/snapshots/rustypipe__client__music_playlist__tests__map_music_album_unavailable.snap @@ -34,6 +34,7 @@ MusicAlbum( album_type: album, year: Some(2019), by_va: true, + track_count: 18, tracks: [ TrackItem( id: "JWeJHN5P-E8", @@ -55,6 +56,7 @@ MusicAlbum( track_type: video, track_nr: Some(1), by_va: false, + unavailable: false, ), TrackItem( id: "5jd-AhBwcCQ", @@ -76,6 +78,7 @@ MusicAlbum( track_type: video, track_nr: Some(2), by_va: false, + unavailable: false, ), TrackItem( id: "_cmORZMgv6I", @@ -97,6 +100,7 @@ MusicAlbum( track_type: video, track_nr: Some(3), by_va: false, + unavailable: false, ), TrackItem( id: "M_kVMsFaGYs", @@ -118,6 +122,7 @@ MusicAlbum( track_type: video, track_nr: Some(5), by_va: false, + unavailable: false, ), TrackItem( id: "c8AfY6yhdkM", @@ -139,6 +144,7 @@ MusicAlbum( track_type: track, track_nr: Some(6), by_va: false, + unavailable: false, ), TrackItem( id: "DSQEKEegiH0", @@ -160,6 +166,7 @@ MusicAlbum( track_type: video, track_nr: Some(7), by_va: false, + unavailable: false, ), TrackItem( id: "2TTOKQSzuQY", @@ -181,6 +188,7 @@ MusicAlbum( track_type: video, track_nr: Some(8), by_va: false, + unavailable: false, ), TrackItem( id: "iRaX0BfME70", @@ -202,6 +210,7 @@ MusicAlbum( track_type: video, track_nr: Some(9), by_va: false, + unavailable: false, ), TrackItem( id: "Kn3cruxYj0c", @@ -223,6 +232,7 @@ MusicAlbum( track_type: track, track_nr: Some(11), by_va: false, + unavailable: false, ), TrackItem( id: "-P1FyntN_Uc", @@ -244,6 +254,7 @@ MusicAlbum( track_type: video, track_nr: Some(12), by_va: false, + unavailable: false, ), TrackItem( id: "njdlNT1RRo4", @@ -265,6 +276,7 @@ MusicAlbum( track_type: track, track_nr: Some(13), by_va: false, + unavailable: false, ), TrackItem( id: "Si-CXM8CHqQ", @@ -286,6 +298,7 @@ MusicAlbum( track_type: track, track_nr: Some(18), by_va: false, + unavailable: false, ), ], variants: [], diff --git a/src/client/snapshots/rustypipe__client__music_playlist__tests__map_music_album_various_artists.snap b/src/client/snapshots/rustypipe__client__music_playlist__tests__map_music_album_various_artists.snap index 932ff7c..d8f03c7 100644 --- a/src/client/snapshots/rustypipe__client__music_playlist__tests__map_music_album_various_artists.snap +++ b/src/client/snapshots/rustypipe__client__music_playlist__tests__map_music_album_various_artists.snap @@ -34,6 +34,7 @@ MusicAlbum( album_type: single, year: Some(2022), by_va: true, + track_count: 6, tracks: [ TrackItem( id: "8IqLxg0GqXc", @@ -55,6 +56,7 @@ MusicAlbum( track_type: video, track_nr: Some(1), by_va: false, + unavailable: false, ), TrackItem( id: "9WYpLYAEub0", @@ -76,6 +78,7 @@ MusicAlbum( track_type: track, track_nr: Some(2), by_va: false, + unavailable: false, ), TrackItem( id: "R48tE237bW4", @@ -97,6 +100,7 @@ MusicAlbum( track_type: track, track_nr: Some(3), by_va: false, + unavailable: false, ), TrackItem( id: "-UzsoR6z-vg", @@ -118,6 +122,7 @@ MusicAlbum( track_type: track, track_nr: Some(4), by_va: false, + unavailable: false, ), TrackItem( id: "kbNVyn8Ex28", @@ -139,6 +144,7 @@ MusicAlbum( track_type: track, track_nr: Some(5), by_va: false, + unavailable: false, ), TrackItem( id: "NJrQZUzWP5Y", @@ -160,6 +166,7 @@ MusicAlbum( track_type: track, track_nr: Some(6), by_va: false, + unavailable: false, ), ], variants: [], diff --git a/src/client/snapshots/rustypipe__client__music_playlist__tests__map_music_playlist_20240228_album.snap b/src/client/snapshots/rustypipe__client__music_playlist__tests__map_music_playlist_20240228_album.snap index 5d69c60..eeafa78 100644 --- a/src/client/snapshots/rustypipe__client__music_playlist__tests__map_music_playlist_20240228_album.snap +++ b/src/client/snapshots/rustypipe__client__music_playlist__tests__map_music_playlist_20240228_album.snap @@ -59,6 +59,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), ], ctoken: None, diff --git a/src/client/snapshots/rustypipe__client__music_playlist__tests__map_music_playlist_20240228_twoColumns.snap b/src/client/snapshots/rustypipe__client__music_playlist__tests__map_music_playlist_20240228_twoColumns.snap index 367d1be..4694e0f 100644 --- a/src/client/snapshots/rustypipe__client__music_playlist__tests__map_music_playlist_20240228_twoColumns.snap +++ b/src/client/snapshots/rustypipe__client__music_playlist__tests__map_music_playlist_20240228_twoColumns.snap @@ -84,6 +84,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "P-zJCLBqZc4", @@ -116,6 +117,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "_mAPAtjWZGE", @@ -148,6 +150,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "JbXkjRqWTxc", @@ -184,6 +187,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "72b8D6s_y_U", @@ -216,6 +220,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "mHKNroJOcig", @@ -248,6 +253,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "0C1NFu4NB_4", @@ -280,6 +286,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "EnLWwwtO1-A", @@ -316,6 +323,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "cafxLTAWi-g", @@ -352,6 +360,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "uyemSV1SpnE", @@ -384,6 +393,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "ogc58xMpPCc", @@ -408,6 +418,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "tsw1LgVkFjE", @@ -440,6 +451,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "xSB8trUFX1A", @@ -472,6 +484,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "yEKTrciCvvY", @@ -496,6 +509,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "LbHsWjX9dv4", @@ -528,6 +542,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "L2apFB6EF-Y", @@ -560,6 +575,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "uCW2sZZofhk", @@ -592,6 +608,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "XZ9DKiNZszM", @@ -616,6 +633,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "J1AOKFRqCjg", @@ -652,6 +670,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "XNd6d6H1LBo", @@ -676,6 +695,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "SSy4VdjEJKM", @@ -708,6 +728,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "0am_BfODDvc", @@ -744,6 +765,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "xv3qKrCq2w8", @@ -776,6 +798,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "pZC82a-2eo0", @@ -808,6 +831,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "kOmmYiigFLE", @@ -840,6 +864,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "Jcp48M-vRJw", @@ -872,6 +897,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "YeSgtLJQGJs", @@ -904,6 +930,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "_LY6aFUVmOU", @@ -940,6 +967,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "SCTMdJ1cuoU", @@ -972,6 +1000,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "TEOwoK-CMes", @@ -1004,6 +1033,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "JgI6z6aQhEA", @@ -1036,6 +1066,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "1FxeCa6kypU", @@ -1072,6 +1103,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "hG6YzmvbosI", @@ -1104,6 +1136,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "y3PKcVd7UtM", @@ -1136,6 +1169,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "UiCRuNo4dGg", @@ -1168,6 +1202,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "3uXHaVENo6E", @@ -1192,6 +1227,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "EX2d37tT5fo", @@ -1224,6 +1260,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "RjQxmy90hTg", @@ -1268,6 +1305,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "IsLFK8TkaVw", @@ -1300,6 +1338,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "myRx1SRqxic", @@ -1332,6 +1371,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "BDuDCIt2eiY", @@ -1368,6 +1408,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "Do0lH6GDy7w", @@ -1400,6 +1441,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "g2oZ6FSl9TU", @@ -1432,6 +1474,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "cHc3cXXIydc", @@ -1464,6 +1507,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "ITW3C8lIQlk", @@ -1496,6 +1540,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "rKGRuQBnatM", @@ -1528,6 +1573,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "JstDN42iDDo", @@ -1564,6 +1610,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "POcbY0NTG9w", @@ -1596,6 +1643,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "Jf3JOkPsogI", @@ -1632,6 +1680,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "lKLGceNzFAM", @@ -1664,6 +1713,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "XNupKC5A6jc", @@ -1696,6 +1746,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "BDWxBtjUyWQ", @@ -1728,6 +1779,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "7LZIEUxH9Ro", @@ -1760,6 +1812,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "5K9y2WGUl0E", @@ -1792,6 +1845,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "UzuQCBPpZ7U", @@ -1828,6 +1882,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "SU20Ah4PE48", @@ -1860,6 +1915,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "3RI2LsrZ9OE", @@ -1892,6 +1948,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "2KoWN3sAFms", @@ -1924,6 +1981,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "EcHhTnHOzAk", @@ -1956,6 +2014,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "NjjMprtE004", @@ -1988,6 +2047,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "gk5sKJ4PgPU", @@ -2020,6 +2080,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "K81Cfizqe9A", @@ -2052,6 +2113,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "bM7QN9S0Dno", @@ -2084,6 +2146,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "07O7i2BzqUM", @@ -2116,6 +2179,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "m2mJGmMtBfA", @@ -2148,6 +2212,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "0gTcGawN9xk", @@ -2180,6 +2245,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "_tbHFWpYFbA", @@ -2212,6 +2278,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "X2rGbIe14Ys", @@ -2244,6 +2311,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "HIVVqNy5w_g", @@ -2280,6 +2348,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "cJH0qBxeBmI", @@ -2304,6 +2373,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "a0C_z75ES4A", @@ -2336,6 +2406,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "jJQAZKK5_5I", @@ -2368,6 +2439,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "FcBaTjGk5Cg", @@ -2400,6 +2472,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "vwNNfKpGw00", @@ -2432,6 +2505,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "UKwFZI9zHlY", @@ -2464,6 +2538,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "x62rX6BYeYE", @@ -2496,6 +2571,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "9BXn7ZNc35Q", @@ -2532,6 +2608,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "QKYN0pLq1ew", @@ -2564,6 +2641,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "P5Aq3oxynt4", @@ -2596,6 +2674,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "tYbZqVBulkU", @@ -2628,6 +2707,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "KUpIwlt3TAA", @@ -2660,6 +2740,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "nlkNJ4oavoQ", @@ -2692,6 +2773,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "pduHLli6NnA", @@ -2716,6 +2798,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "rbNpTesNEuw", @@ -2748,6 +2831,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "ecMLL1XKbQA", @@ -2780,6 +2864,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "OvfD_geCvkI", @@ -2812,6 +2897,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "Qg9ea0wi_18", @@ -2844,6 +2930,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "z5bVgD6KjQU", @@ -2880,6 +2967,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "UqiemFNeprQ", @@ -2912,6 +3000,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "1yAcDPQ7bPs", @@ -2936,6 +3025,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "xbHdNkV1Bgg", @@ -2972,6 +3062,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "AjGbzsAH2dI", @@ -3008,6 +3099,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "29OvRKJlOX4", @@ -3040,6 +3132,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "JVUypCxmfQA", @@ -3072,6 +3165,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "KWIfPu8860w", @@ -3104,6 +3198,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "x1DGqCmCeaE", @@ -3136,6 +3231,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "Of5EmGLKEn4", @@ -3160,6 +3256,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "T9_p5vicleo", @@ -3192,6 +3289,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "R_X1K3arztQ", @@ -3224,6 +3322,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "VTFALCPPUN4", @@ -3256,6 +3355,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), ], ctoken: Some("4qmFsgJbEi1WTFJEQ0xBSzV1eV9rYjdFQmk2eTNHcnRKcmk0X1pINTZNczc4NkRGRWltYk0aKmVoVlFWRHBGWjNSWFZrVmFRbFJGVGxGVlJsWlBUa0dTQVFNSXVnUSUzRA%3D%3D"), diff --git a/src/client/snapshots/rustypipe__client__music_playlist__tests__map_music_playlist_20241125_facepile.snap b/src/client/snapshots/rustypipe__client__music_playlist__tests__map_music_playlist_20241125_facepile.snap index 68e8b5d..5646999 100644 --- a/src/client/snapshots/rustypipe__client__music_playlist__tests__map_music_playlist_20241125_facepile.snap +++ b/src/client/snapshots/rustypipe__client__music_playlist__tests__map_music_playlist_20241125_facepile.snap @@ -59,6 +59,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "RPGLMuxkLCs", @@ -83,6 +84,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "z-ALpnnQLrk", @@ -107,6 +109,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "_rrbTTv8zcQ", @@ -131,6 +134,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "JE16OKTawLw", @@ -155,6 +159,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "RQNY0Wzm7DQ", @@ -179,6 +184,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "uhy24PKBkd0", @@ -203,6 +209,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "OL1hQadBHfs", @@ -227,6 +234,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "Zge_SUfk0r8", @@ -251,6 +259,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "yFGIeU_IDE4", @@ -275,6 +284,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "P6MVqfQzPIg", @@ -299,6 +309,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "9n0pLDn8Z_I", @@ -323,6 +334,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "oXbx2YtIkeQ", @@ -347,6 +359,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "pfBBTTwxo8Q", @@ -371,6 +384,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "WxtRqzxSAh0", @@ -395,6 +409,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "ianUckvxtLw", @@ -419,6 +434,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "eb2Ghj1g1ic", @@ -443,6 +459,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "8TpEsyVtCog", @@ -467,6 +484,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "KD_WAei4LMg", @@ -491,6 +509,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "qfpOCrtweKk", @@ -515,6 +534,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "6gv3nrOA_bQ", @@ -539,6 +559,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "waaic6UnkU8", @@ -563,6 +584,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "lSy4MLC_uV4", @@ -587,6 +609,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "BuN8-U_quok", @@ -611,6 +634,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "g_UTG10nzaQ", @@ -635,6 +659,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "kNykFWaDbGw", @@ -659,6 +684,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "gJF7vxCYTgY", @@ -683,6 +709,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "CodZMQ_Anc0", @@ -707,6 +734,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "oKHMTKJdZ_M", @@ -731,6 +759,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "--O_Eyok_eE", @@ -755,6 +784,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "2bT3ljKMSo8", @@ -779,6 +809,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "YRAX_slrbsI", @@ -803,6 +834,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "aRRbCEwUSuw", @@ -827,6 +859,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "5sV8SzTbJS8", @@ -851,6 +884,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "ZxxZlU2o1TE", @@ -875,6 +909,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "gIjo5at4AxE", @@ -899,6 +934,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "NSGk7-kyeEU", @@ -923,6 +959,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "cgJtZ7Otc4Y", @@ -947,6 +984,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "l5LQu3Q0nWY", @@ -971,6 +1009,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "YX4Z3ZlWUFc", @@ -995,6 +1034,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "LoyvqR41lKw", @@ -1019,6 +1059,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "HbQtMZbtx_Q", @@ -1043,6 +1084,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "0DHRbP9ecgw", @@ -1067,6 +1109,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "rFOFkvk-xus", @@ -1091,6 +1134,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "P8zxnSihJ_8", @@ -1115,6 +1159,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "RWgeHl9XkCY", @@ -1139,6 +1184,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "I1n539enNNY", @@ -1163,6 +1209,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "70VKekyZz5g", @@ -1187,6 +1234,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "2OWJ1bwFu6Y", @@ -1211,6 +1259,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "zLiSA2i-niw", @@ -1235,6 +1284,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "wyXlw7nMpko", @@ -1259,6 +1309,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "NrU4fhzvFpA", @@ -1283,6 +1334,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "1xhKegaA1hQ", @@ -1307,6 +1359,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "9F4lZ8psBtg", @@ -1331,6 +1384,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "G3uUtejX9to", @@ -1355,6 +1409,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "-0Xn5pViCss", @@ -1379,6 +1434,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "a7u71Fco99I", @@ -1403,6 +1459,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "H6uUbvcgKdk", @@ -1427,6 +1484,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "tPRTCauHtkw", @@ -1451,6 +1509,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "pMKAQExcarM", @@ -1475,6 +1534,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "7E-z-7KCdBI", @@ -1499,6 +1559,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "EPtbC0ZVddo", @@ -1523,6 +1584,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "TpPHng0eGJs", @@ -1547,6 +1609,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "rt2QFQwJYcs", @@ -1571,6 +1634,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "WPyfaztFDQ4", @@ -1595,6 +1659,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "5lmumP0DaUw", @@ -1619,6 +1684,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), ], ctoken: None, diff --git a/src/client/snapshots/rustypipe__client__music_playlist__tests__map_music_playlist_long.snap b/src/client/snapshots/rustypipe__client__music_playlist__tests__map_music_playlist_long.snap index 0c6184d..77ffab3 100644 --- a/src/client/snapshots/rustypipe__client__music_playlist__tests__map_music_playlist_long.snap +++ b/src/client/snapshots/rustypipe__client__music_playlist__tests__map_music_playlist_long.snap @@ -59,6 +59,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "8rRj5ZXRNko", @@ -83,6 +84,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "lHZtcC67yrY", @@ -107,6 +109,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "TSkVVVBS9k8", @@ -131,6 +134,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "lc-cnCRhE7c", @@ -155,6 +159,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "3ryohiCVq3M", @@ -179,6 +184,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "BNHamTwxJ6Q", @@ -207,6 +213,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "5mqelmYUcI0", @@ -231,6 +238,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "k9EYjn5f_nE", @@ -255,6 +263,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "fkMg_X9lHMc", @@ -279,6 +288,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "4wOoLLDXbDY", @@ -303,6 +313,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "Z_mf9aCHag8", @@ -327,6 +338,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "cZ58odQo87A", @@ -351,6 +363,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "1il3RFk5Okw", @@ -375,6 +388,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "8WQMBv2deYQ", @@ -399,6 +413,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "vGrfFzagzHs", @@ -423,6 +438,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "1gDbpWC_9pE", @@ -447,6 +463,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "p-AWcCCbBHw", @@ -471,6 +488,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "RPN88D_HjMU", @@ -499,6 +517,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "5PST7Ld4wWU", @@ -523,6 +542,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "opoDBF_b-fg", @@ -547,6 +567,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "AMT9IOyXmBM", @@ -571,6 +592,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "VP5B1UmgHfc", @@ -595,6 +617,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "vcuQpbs0yT0", @@ -619,6 +642,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "LeMLVEJLruQ", @@ -643,6 +667,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "MtDPKJSsBgc", @@ -667,6 +692,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "4tDpYxNYqPg", @@ -691,6 +717,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "EkWjaoH7k6w", @@ -715,6 +742,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "tERRFWuYG48", @@ -739,6 +767,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "wCcJuN47UcY", @@ -763,6 +792,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "qdtLCfEcPL4", @@ -787,6 +817,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "wjXUBG15eZ8", @@ -811,6 +842,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "HBjDZMJUduo", @@ -835,6 +867,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "xkXQQ0IAbk0", @@ -859,6 +892,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "DraA3PUuoQc", @@ -883,6 +917,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "wMIGQp4YhuU", @@ -907,6 +942,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "38lrK74voaI", @@ -931,6 +967,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "2qW9rOSFF1M", @@ -959,6 +996,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "tMILH6UEfPA", @@ -983,6 +1021,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "izHB2EdMngg", @@ -1007,6 +1046,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "haECT-SerHk", @@ -1031,6 +1071,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "cVikZ8Oe_XA", @@ -1055,6 +1096,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "drFsXLChrWc", @@ -1079,6 +1121,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "1EMFt7m_8yE", @@ -1103,6 +1146,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "_yWU0lFghxU", @@ -1127,6 +1171,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "XlD-LO3ogFM", @@ -1151,6 +1196,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "nAzjWqNfgvc", @@ -1179,6 +1225,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "PySC3RGhZJU", @@ -1203,6 +1250,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "G-iwLoyH6ZE", @@ -1227,6 +1275,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "fgCOUO-s8nY", @@ -1251,6 +1300,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "m-Ik3yy728Y", @@ -1275,6 +1325,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "U0_UYW5Y4cM", @@ -1299,6 +1350,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "rsrDYTEicq8", @@ -1323,6 +1375,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "2aU4wRgl_0E", @@ -1347,6 +1400,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "FzcJxJAxFtw", @@ -1375,6 +1429,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "2hyibXdOp5w", @@ -1399,6 +1454,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "YaKG5cUVB30", @@ -1423,6 +1479,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "Ahwc-ouFeTQ", @@ -1447,6 +1504,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "SoImFhORKpg", @@ -1471,6 +1529,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "jP4-XrbGt3M", @@ -1495,6 +1554,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "Yy2RsG4lnm4", @@ -1519,6 +1579,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "388e_8mu1t4", @@ -1543,6 +1604,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "dHHtPi-j7dQ", @@ -1567,6 +1629,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "d8ERTCVXIUE", @@ -1591,6 +1654,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "vQXn3EzzYY4", @@ -1615,6 +1679,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "zA-BTpC-yvI", @@ -1639,6 +1704,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "rnzIN9H_G10", @@ -1663,6 +1729,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "fcBbT1GTxqM", @@ -1687,6 +1754,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "wCDsm_dt1cI", @@ -1711,6 +1779,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "4j3AOJV1J8I", @@ -1735,6 +1804,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "RtuW08ZIgvg", @@ -1759,6 +1829,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "cbTXqKBIQ40", @@ -1783,6 +1854,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "oSd0Lph4luY", @@ -1807,6 +1879,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "oq0rrYrufYU", @@ -1831,6 +1904,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "0-P_YkS0z8s", @@ -1855,6 +1929,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "4BAKb2p450Q", @@ -1879,6 +1954,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "yqObMM_QzVQ", @@ -1903,6 +1979,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "dlvStoOyEzE", @@ -1927,6 +2004,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "VNttGAaek2U", @@ -1951,6 +2029,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "TxZMfufRJfo", @@ -1975,6 +2054,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "6agT2asF4as", @@ -1999,6 +2079,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "EcW0n83La5A", @@ -2023,6 +2104,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "_b61hg8UlZM", @@ -2047,6 +2129,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "kDMFranvFuQ", @@ -2071,6 +2154,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "1apku0pVDeE", @@ -2095,6 +2179,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "g6JYzOjglBs", @@ -2119,6 +2204,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "GYK-NfOo7b4", @@ -2143,6 +2229,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "omUuR45iU0g", @@ -2167,6 +2254,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "w7BE3inS-NM", @@ -2191,6 +2279,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "FM-5BPMnhm0", @@ -2215,6 +2304,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "MnNZNfixTOw", @@ -2239,6 +2329,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "qe80EeU8cT8", @@ -2263,6 +2354,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "-s2-6KYgqpQ", @@ -2287,6 +2379,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "RSlp874hESE", @@ -2315,6 +2408,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "oTI3tRQ_-3k", @@ -2339,6 +2433,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "_okA84gaEJw", @@ -2363,6 +2458,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "pLHnnJRaP7Q", @@ -2387,6 +2483,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "H2hGrsExuyc", @@ -2411,6 +2508,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "RsZvjqG2lec", @@ -2435,6 +2533,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "qYRCiQ6d35w", @@ -2463,6 +2562,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), ], ctoken: Some("4qmFsgI-EiRWTFBMNWREeDY4MVQ0YlI3WkYxSXVXek92MW9tbFJiRTdQaUoaFmVnWlFWRHBEUjFtU0FRTUl1Z1ElM0Q%3D"), diff --git a/src/client/snapshots/rustypipe__client__music_playlist__tests__map_music_playlist_nomusic.snap b/src/client/snapshots/rustypipe__client__music_playlist__tests__map_music_playlist_nomusic.snap index 2abbf05..30b53f4 100644 --- a/src/client/snapshots/rustypipe__client__music_playlist__tests__map_music_playlist_nomusic.snap +++ b/src/client/snapshots/rustypipe__client__music_playlist__tests__map_music_playlist_nomusic.snap @@ -59,6 +59,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "RPGLMuxkLCs", @@ -83,6 +84,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "z-ALpnnQLrk", @@ -107,6 +109,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "_rrbTTv8zcQ", @@ -131,6 +134,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "JE16OKTawLw", @@ -155,6 +159,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "RQNY0Wzm7DQ", @@ -179,6 +184,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "uhy24PKBkd0", @@ -203,6 +209,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "OL1hQadBHfs", @@ -227,6 +234,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "Zge_SUfk0r8", @@ -251,6 +259,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "yFGIeU_IDE4", @@ -275,6 +284,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "P6MVqfQzPIg", @@ -299,6 +309,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "9n0pLDn8Z_I", @@ -323,6 +334,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "oXbx2YtIkeQ", @@ -347,6 +359,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "pfBBTTwxo8Q", @@ -371,6 +384,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "WxtRqzxSAh0", @@ -395,6 +409,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "ianUckvxtLw", @@ -419,6 +434,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "eb2Ghj1g1ic", @@ -443,6 +459,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "8TpEsyVtCog", @@ -467,6 +484,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "KD_WAei4LMg", @@ -491,6 +509,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "qfpOCrtweKk", @@ -515,6 +534,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "6gv3nrOA_bQ", @@ -539,6 +559,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "waaic6UnkU8", @@ -563,6 +584,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "lSy4MLC_uV4", @@ -587,6 +609,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "BuN8-U_quok", @@ -611,6 +634,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "g_UTG10nzaQ", @@ -635,6 +659,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "kNykFWaDbGw", @@ -659,6 +684,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "gJF7vxCYTgY", @@ -683,6 +709,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "CodZMQ_Anc0", @@ -707,6 +734,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "oKHMTKJdZ_M", @@ -731,6 +759,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "--O_Eyok_eE", @@ -755,6 +784,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "2bT3ljKMSo8", @@ -779,6 +809,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "YRAX_slrbsI", @@ -803,6 +834,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "aRRbCEwUSuw", @@ -827,6 +859,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "5sV8SzTbJS8", @@ -851,6 +884,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "ZxxZlU2o1TE", @@ -875,6 +909,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "gIjo5at4AxE", @@ -899,6 +934,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "NSGk7-kyeEU", @@ -923,6 +959,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "cgJtZ7Otc4Y", @@ -947,6 +984,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "l5LQu3Q0nWY", @@ -971,6 +1009,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "YX4Z3ZlWUFc", @@ -995,6 +1034,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "LoyvqR41lKw", @@ -1019,6 +1059,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "HbQtMZbtx_Q", @@ -1043,6 +1084,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "0DHRbP9ecgw", @@ -1067,6 +1109,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "rFOFkvk-xus", @@ -1091,6 +1134,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "P8zxnSihJ_8", @@ -1115,6 +1159,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "RWgeHl9XkCY", @@ -1139,6 +1184,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "I1n539enNNY", @@ -1163,6 +1209,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "70VKekyZz5g", @@ -1187,6 +1234,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "2OWJ1bwFu6Y", @@ -1211,6 +1259,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "zLiSA2i-niw", @@ -1235,6 +1284,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "wyXlw7nMpko", @@ -1259,6 +1309,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "NrU4fhzvFpA", @@ -1283,6 +1334,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "1xhKegaA1hQ", @@ -1307,6 +1359,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "9F4lZ8psBtg", @@ -1331,6 +1384,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "G3uUtejX9to", @@ -1355,6 +1409,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "-0Xn5pViCss", @@ -1379,6 +1434,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "a7u71Fco99I", @@ -1403,6 +1459,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "H6uUbvcgKdk", @@ -1427,6 +1484,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "tPRTCauHtkw", @@ -1451,6 +1509,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "pMKAQExcarM", @@ -1475,6 +1534,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "7E-z-7KCdBI", @@ -1499,6 +1559,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "EPtbC0ZVddo", @@ -1523,6 +1584,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "TpPHng0eGJs", @@ -1547,6 +1609,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "rt2QFQwJYcs", @@ -1571,6 +1634,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "WPyfaztFDQ4", @@ -1595,6 +1659,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "5lmumP0DaUw", @@ -1619,6 +1684,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), ], ctoken: None, diff --git a/src/client/snapshots/rustypipe__client__music_playlist__tests__map_music_playlist_short.snap b/src/client/snapshots/rustypipe__client__music_playlist__tests__map_music_playlist_short.snap index 7f4f115..14a7a71 100644 --- a/src/client/snapshots/rustypipe__client__music_playlist__tests__map_music_playlist_short.snap +++ b/src/client/snapshots/rustypipe__client__music_playlist__tests__map_music_playlist_short.snap @@ -61,6 +61,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "nBZlrbrBO1I", @@ -85,6 +86,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "AcTDlsUej2w", @@ -109,6 +111,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "k6ZoE4RrcDs", @@ -133,6 +136,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "2n5GKLdrTfk", @@ -157,6 +161,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "psuRGfAaju4", @@ -181,6 +186,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "_JGGLJMpVks", @@ -205,6 +211,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "1YUBbF24H44", @@ -229,6 +236,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "E0WRQpjckYg", @@ -253,6 +261,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "mqiH0ZSkM9I", @@ -277,6 +286,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "UAWcs5H-qgQ", @@ -301,6 +311,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "bqO3Y5e4Dow", @@ -325,6 +336,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "ouEezpuPc3A", @@ -349,6 +361,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "i-qT5n_5Mys", @@ -373,6 +386,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "PMGY8fLwess", @@ -397,6 +411,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "2ebfSItB0oM", @@ -421,6 +436,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "c4BLVznuWnU", @@ -445,6 +461,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "c0wUKCekI34", @@ -469,6 +486,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "vNfgVjZF8_4", @@ -493,6 +511,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "XPpTgCho5ZA", @@ -517,6 +536,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "-oqAU5VxFWs", @@ -541,6 +561,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "CA1VHbdq5hY", @@ -565,6 +586,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "aNzCDt2eidg", @@ -589,6 +611,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "A48hOToMuRE", @@ -613,6 +636,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "qHm9MG9xw1o", @@ -637,6 +661,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "74NhLkjIeMs", @@ -661,6 +686,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "EptPhiK_q0E", @@ -685,6 +711,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "44u7_wQ1s0g", @@ -709,6 +736,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "toOyxylnNkI", @@ -733,6 +761,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "ljXSjIph5ZM", @@ -757,6 +786,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "DJFMRLIe-0o", @@ -785,6 +815,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "goqqohUitmw", @@ -809,6 +840,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "_LwX7GCE5rI", @@ -833,6 +865,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "7KHPC-kEQOA", @@ -861,6 +894,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "26PAgklYYvo", @@ -885,6 +919,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "bO3S8CKafbE", @@ -909,6 +944,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "tMsbeyeTtpk", @@ -933,6 +969,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "fvXn3rmhdc4", @@ -957,6 +994,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "2p4n7JgdCsc", @@ -981,6 +1019,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "HtNS1afUOnE", @@ -1005,6 +1044,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "ufbDvPaVrzs", @@ -1029,6 +1069,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "H1_icnjg6MY", @@ -1053,6 +1094,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "7Lna4Hu4-AQ", @@ -1081,6 +1123,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "K9qu2QMBguw", @@ -1113,6 +1156,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "uWeqeQkjLto", @@ -1137,6 +1181,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "X_ZOGHUWwqE", @@ -1161,6 +1206,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "mHeK0Cwr9sg", @@ -1185,6 +1231,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "0Bf3CJZ4hvg", @@ -1209,6 +1256,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "7TCncxWNcPU", @@ -1233,6 +1281,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "PxNYvk_0Onw", @@ -1257,6 +1306,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "WLoWBe9BRP4", @@ -1281,6 +1331,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "1XYLKoEETVA", @@ -1305,6 +1356,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "Ghl_vkEV3tc", @@ -1329,6 +1381,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "5qHRMFQ0pLg", @@ -1353,6 +1406,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "X-vispdELDo", @@ -1377,6 +1431,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "il_L6c_fOvs", @@ -1401,6 +1456,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "hCjcgoubkPM", @@ -1425,6 +1481,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "nwXlRq_QyTI", @@ -1449,6 +1506,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "ZdsER1S3t8k", @@ -1477,6 +1535,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "fyrsExw_LUg", @@ -1501,6 +1560,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "BS4t017LSoA", @@ -1533,6 +1593,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "0AYzzzBaPBI", @@ -1557,6 +1618,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "zM0K3LC7Aak", @@ -1581,6 +1643,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "1le0xDbrVj8", @@ -1605,6 +1668,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "RdFaKz71-5M", @@ -1629,6 +1693,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "d6hUByfuhM4", @@ -1653,6 +1718,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "-uxeu0MbNR0", @@ -1677,6 +1743,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "35VK8yonvsc", @@ -1701,6 +1768,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "ELD3aRzbVQg", @@ -1725,6 +1793,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "BD7HwXv18aU", @@ -1749,6 +1818,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "WJJLfUwIVR4", @@ -1773,6 +1843,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "NjW1S0WIiJw", @@ -1797,6 +1868,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "-4szr0EMrgk", @@ -1821,6 +1893,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "88NWeOGrxys", @@ -1853,6 +1926,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "BxqtS-7GxFM", @@ -1877,6 +1951,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "KUKt_LbaBnM", @@ -1901,6 +1976,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "bhL7A8k6kU8", @@ -1925,6 +2001,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "mUN36hFtazE", @@ -1949,6 +2026,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "dcBZP_pt0uY", @@ -1973,6 +2051,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "m342B1Vv3tM", @@ -1997,6 +2076,7 @@ MusicPlaylist( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "N_5RiRBvPSk", @@ -2029,6 +2109,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "Q5kH0wg_sKo", @@ -2061,6 +2142,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "j9zlc5zufl8", @@ -2093,6 +2175,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "ufxjiU7BgR4", @@ -2125,6 +2208,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "7OfB_8rrtug", @@ -2157,6 +2241,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "UqmvAc81XuM", @@ -2189,6 +2274,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "QDULTFB8gSY", @@ -2221,6 +2307,7 @@ MusicPlaylist( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), ], ctoken: None, diff --git a/src/client/snapshots/rustypipe__client__music_search__tests__map_music_search_main_artist.snap b/src/client/snapshots/rustypipe__client__music_search__tests__map_music_search_main_artist.snap index 05732a9..9824ee8 100644 --- a/src/client/snapshots/rustypipe__client__music_search__tests__map_music_search_main_artist.snap +++ b/src/client/snapshots/rustypipe__client__music_search__tests__map_music_search_main_artist.snap @@ -54,6 +54,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, )), Track(TrackItem( id: "aZ1hziFhj1o", @@ -86,6 +87,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, )), Album(AlbumItem( id: "MPREb_l2IU1O3l6QK", @@ -154,6 +156,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, )), Track(TrackItem( id: "65Q7EdWnjqM", @@ -186,6 +189,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, )), Track(TrackItem( id: "EL72UcDZLSk", @@ -218,6 +222,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, )), Track(TrackItem( id: "b1kbLwvqugk", @@ -242,6 +247,7 @@ MusicSearchResult( track_type: video, track_nr: None, by_va: false, + unavailable: false, )), Track(TrackItem( id: "3tmd-ClpJxA", @@ -266,6 +272,7 @@ MusicSearchResult( track_type: video, track_nr: None, by_va: false, + unavailable: false, )), Track(TrackItem( id: "FuXNumBwDOM", @@ -290,6 +297,7 @@ MusicSearchResult( track_type: video, track_nr: None, by_va: false, + unavailable: false, )), Album(AlbumItem( id: "MPREb_BiCQyyofUtj", diff --git a/src/client/snapshots/rustypipe__client__music_search__tests__map_music_search_main_default.snap b/src/client/snapshots/rustypipe__client__music_search__tests__map_music_search_main_default.snap index ae29e6a..8aa60c8 100644 --- a/src/client/snapshots/rustypipe__client__music_search__tests__map_music_search_main_default.snap +++ b/src/client/snapshots/rustypipe__client__music_search__tests__map_music_search_main_default.snap @@ -29,6 +29,7 @@ MusicSearchResult( track_type: video, track_nr: None, by_va: false, + unavailable: false, )), Track(TrackItem( id: "NU611fxGyPU", @@ -53,6 +54,7 @@ MusicSearchResult( track_type: video, track_nr: None, by_va: false, + unavailable: false, )), Track(TrackItem( id: "Yi2nsnpw5h0", @@ -77,6 +79,7 @@ MusicSearchResult( track_type: video, track_nr: None, by_va: false, + unavailable: false, )), Track(TrackItem( id: "2Qefh0W_H88", @@ -101,6 +104,7 @@ MusicSearchResult( track_type: video, track_nr: None, by_va: false, + unavailable: false, )), Track(TrackItem( id: "BL-aIpCLWnU", @@ -133,6 +137,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, )), Track(TrackItem( id: "PpKu3UsHYrk", @@ -165,6 +170,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, )), Track(TrackItem( id: "jynOfK8JB0E", @@ -197,6 +203,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, )), Track(TrackItem( id: "pgjQkcYD-rQ", @@ -221,6 +228,7 @@ MusicSearchResult( track_type: video, track_nr: None, by_va: false, + unavailable: false, )), Track(TrackItem( id: "w2GXdb-pHo8", @@ -245,6 +253,7 @@ MusicSearchResult( track_type: episode, track_nr: None, by_va: false, + unavailable: false, )), Track(TrackItem( id: "JepNreB58TA", @@ -269,6 +278,7 @@ MusicSearchResult( track_type: video, track_nr: None, by_va: false, + unavailable: false, )), Album(AlbumItem( id: "MPREb_rR0VQ4fTxPM", @@ -616,6 +626,7 @@ MusicSearchResult( track_type: episode, track_nr: None, by_va: false, + unavailable: false, )), Track(TrackItem( id: "GE0UAdxPTc0", @@ -640,6 +651,7 @@ MusicSearchResult( track_type: episode, track_nr: None, by_va: false, + unavailable: false, )), Track(TrackItem( id: "4gi9y3sTrXE", @@ -664,6 +676,7 @@ MusicSearchResult( track_type: episode, track_nr: None, by_va: false, + unavailable: false, )), User(UserItem( id: "UCOeTBeQwhOSvNcaZhxM1PUg", diff --git a/src/client/snapshots/rustypipe__client__music_search__tests__map_music_search_main_live.snap b/src/client/snapshots/rustypipe__client__music_search__tests__map_music_search_main_live.snap index b0f605b..ff12ea6 100644 --- a/src/client/snapshots/rustypipe__client__music_search__tests__map_music_search_main_live.snap +++ b/src/client/snapshots/rustypipe__client__music_search__tests__map_music_search_main_live.snap @@ -67,6 +67,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, )), Track(TrackItem( id: "Yx-sGL0xX-U", @@ -99,6 +100,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, )), Track(TrackItem( id: "HzdD8kbDzZA", @@ -131,6 +133,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, )), Track(TrackItem( id: "Zh7Un8gVFak", @@ -155,6 +158,7 @@ MusicSearchResult( track_type: video, track_nr: None, by_va: false, + unavailable: false, )), Track(TrackItem( id: "BMnD36Abw_0", @@ -179,6 +183,7 @@ MusicSearchResult( track_type: video, track_nr: None, by_va: false, + unavailable: false, )), Album(AlbumItem( id: "MPREb_UQFAF6UM4DN", @@ -611,6 +616,7 @@ MusicSearchResult( track_type: episode, track_nr: None, by_va: false, + unavailable: false, )), Track(TrackItem( id: "MiVivWh7zrA", @@ -635,6 +641,7 @@ MusicSearchResult( track_type: episode, track_nr: None, by_va: false, + unavailable: false, )), Track(TrackItem( id: "7-hMhhUO8b8", @@ -659,6 +666,7 @@ MusicSearchResult( track_type: episode, track_nr: None, by_va: false, + unavailable: false, )), User(UserItem( id: "UCdQrWgvHD9f-caMSn3SS-WQ", diff --git a/src/client/snapshots/rustypipe__client__music_search__tests__map_music_search_main_radio.snap b/src/client/snapshots/rustypipe__client__music_search__tests__map_music_search_main_radio.snap index c399053..d08f976 100644 --- a/src/client/snapshots/rustypipe__client__music_search__tests__map_music_search_main_radio.snap +++ b/src/client/snapshots/rustypipe__client__music_search__tests__map_music_search_main_radio.snap @@ -37,6 +37,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, )), Track(TrackItem( id: "VHLPvrlclmQ", @@ -69,6 +70,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, )), Track(TrackItem( id: "R9TPed_ohKM", @@ -101,6 +103,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, )), Track(TrackItem( id: "Ej1nxBxFSKc", @@ -125,6 +128,7 @@ MusicSearchResult( track_type: video, track_nr: None, by_va: false, + unavailable: false, )), Track(TrackItem( id: "26OrUhkRa3c", @@ -149,6 +153,7 @@ MusicSearchResult( track_type: video, track_nr: None, by_va: false, + unavailable: false, )), Track(TrackItem( id: "Idk-oFqn3kM", @@ -173,6 +178,7 @@ MusicSearchResult( track_type: video, track_nr: None, by_va: false, + unavailable: false, )), Album(AlbumItem( id: "MPREb_CYbQPbuAWrt", diff --git a/src/client/snapshots/rustypipe__client__music_search__tests__map_music_search_main_typo.snap b/src/client/snapshots/rustypipe__client__music_search__tests__map_music_search_main_typo.snap index 2128d16..708bfcf 100644 --- a/src/client/snapshots/rustypipe__client__music_search__tests__map_music_search_main_typo.snap +++ b/src/client/snapshots/rustypipe__client__music_search__tests__map_music_search_main_typo.snap @@ -73,6 +73,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, )), Track(TrackItem( id: "pt0YvfnhGgI", @@ -105,6 +106,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, )), Track(TrackItem( id: "0yPnvetCm-U", @@ -137,6 +139,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, )), Track(TrackItem( id: "3ryohiCVq3M", @@ -161,6 +164,7 @@ MusicSearchResult( track_type: video, track_nr: None, by_va: false, + unavailable: false, )), Track(TrackItem( id: "6Bt1KeMNqvc", @@ -185,6 +189,7 @@ MusicSearchResult( track_type: video, track_nr: None, by_va: false, + unavailable: false, )), Track(TrackItem( id: "5YQRHUItXTI", @@ -209,6 +214,7 @@ MusicSearchResult( track_type: video, track_nr: None, by_va: false, + unavailable: false, )), Album(AlbumItem( id: "MPREb_V5f8YfHKp2j", diff --git a/src/client/snapshots/rustypipe__client__music_search__tests__map_music_search_suggestion_default.snap b/src/client/snapshots/rustypipe__client__music_search__tests__map_music_search_suggestion_default.snap index e7e40c0..9846487 100644 --- a/src/client/snapshots/rustypipe__client__music_search__tests__map_music_search_suggestion_default.snap +++ b/src/client/snapshots/rustypipe__client__music_search__tests__map_music_search_suggestion_default.snap @@ -75,6 +75,7 @@ MusicSearchSuggestion( track_type: track, track_nr: None, by_va: false, + unavailable: false, )), ], ) diff --git a/src/client/snapshots/rustypipe__client__music_search__tests__map_music_search_tracks_default.snap b/src/client/snapshots/rustypipe__client__music_search__tests__map_music_search_tracks_default.snap index 1a7fbc3..c47ba13 100644 --- a/src/client/snapshots/rustypipe__client__music_search__tests__map_music_search_tracks_default.snap +++ b/src/client/snapshots/rustypipe__client__music_search__tests__map_music_search_tracks_default.snap @@ -37,6 +37,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "cATe8Toht70", @@ -73,6 +74,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "0I1UpXSYdOQ", @@ -105,6 +107,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "9G2tG8V5_PY", @@ -137,6 +140,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "WwNKyoizf8k", @@ -169,6 +173,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "kS1o36LXQkc", @@ -201,6 +206,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "UQQ6L1j6mXE", @@ -233,6 +239,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "9l9dCro-7l8", @@ -265,6 +272,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "S_PRpDtgUfI", @@ -297,6 +305,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "Xt_ReZc0gnw", @@ -329,6 +338,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "diN3WCxpqis", @@ -361,6 +371,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "9q3FfH_57Rc", @@ -393,6 +404,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "U29V08A9yBs", @@ -429,6 +441,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "HHEKbGlLoEM", @@ -461,6 +474,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "qE_dGvQG1rU", @@ -493,6 +507,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "1tyPs3ccT7E", @@ -529,6 +544,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "6pSmQ-MHKbg", @@ -561,6 +577,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "rNsISA-kWzM", @@ -593,6 +610,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "AdvPpJVvyEg", @@ -625,6 +643,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "7q7o-kjIKpo", @@ -657,6 +676,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), ], ctoken: Some("EqQDEgtibGFjayBtYW1iYRqUA0VnV0tBUUlJQVVnVWFnd1FBeEFFRUFrUURoQUtFQVdDQVF0Q1RDMWhTWEJEVEZkdVZZSUJDMk5CVkdVNFZHOW9kRGN3Z2dFTE1Fa3hWWEJZVTFsa1QxR0NBUXM1UnpKMFJ6aFdOVjlRV1lJQkMxZDNUa3Q1YjJsNlpqaHJnZ0VMYTFNeGJ6TTJURmhSYTJPQ0FRdFZVVkUyVERGcU5tMVlSWUlCQ3psc09XUkRjbTh0TjJ3NGdnRUxVMTlRVW5CRWRHZFZaa21DQVF0WWRGOVNaVnBqTUdkdWQ0SUJDMlJwVGpOWFEzaHdjV2x6Z2dFTE9YRXpSbVpJWHpVM1VtT0NBUXRWTWpsV01EaEJPWGxDYzRJQkMwaElSVXRpUjJ4TWIwVk5nZ0VMY1VWZlpFZDJVVWN4Y2xXQ0FRdEVXak14Y0hoNVdXaFNhNElCQ3pad1UyMVJMVTFJUzJKbmdnRUxjazV6U1ZOQkxXdFhlazJDQVF0QlpIWlFjRXBXZG5sRlo0SUJDemR4TjI4dGEycEpTM0J2GPHq0C4%3D"), diff --git a/src/client/snapshots/rustypipe__client__music_search__tests__map_music_search_tracks_no_artist_link.snap b/src/client/snapshots/rustypipe__client__music_search__tests__map_music_search_tracks_no_artist_link.snap index 89e49d0..25fd51f 100644 --- a/src/client/snapshots/rustypipe__client__music_search__tests__map_music_search_tracks_no_artist_link.snap +++ b/src/client/snapshots/rustypipe__client__music_search__tests__map_music_search_tracks_no_artist_link.snap @@ -41,6 +41,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "OJ5ZittaTCk", @@ -73,6 +74,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "H199HKaUk3g", @@ -105,6 +107,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "UlNOkZEcSjQ", @@ -137,6 +140,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "L61sF-655Zw", @@ -169,6 +173,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "bOK90e8P3k0", @@ -201,6 +206,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "oRHLx2mc2zY", @@ -241,6 +247,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), ], ctoken: None, diff --git a/src/client/snapshots/rustypipe__client__music_search__tests__map_music_search_tracks_typo.snap b/src/client/snapshots/rustypipe__client__music_search__tests__map_music_search_tracks_typo.snap index b66f30c..f5dc29e 100644 --- a/src/client/snapshots/rustypipe__client__music_search__tests__map_music_search_tracks_typo.snap +++ b/src/client/snapshots/rustypipe__client__music_search__tests__map_music_search_tracks_typo.snap @@ -37,6 +37,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "pt0YvfnhGgI", @@ -69,6 +70,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "VinJmH-uidY", @@ -101,6 +103,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "YmSmymHRnEE", @@ -133,6 +136,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "TgfIbiHCOLo", @@ -165,6 +169,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "lCi6N_uq3vE", @@ -197,6 +202,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "QIjqe2B3RdQ", @@ -229,6 +235,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "q2pUotlXPeM", @@ -261,6 +268,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "0yPnvetCm-U", @@ -293,6 +301,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "EU5Vly60VGU", @@ -325,6 +334,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "UnxQ0TI4IMs", @@ -357,6 +367,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "ufpny1KxwcU", @@ -389,6 +400,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "duzWgZFJNwA", @@ -421,6 +433,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "rnXq-1n0lt0", @@ -453,6 +466,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "vHkqdC6-rOI", @@ -485,6 +499,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "nTlceSET_b8", @@ -517,6 +532,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "D8GhmRiIfxI", @@ -549,6 +565,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "01CS-jTaY1U", @@ -581,6 +598,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "2sKkKKKXO28", @@ -613,6 +631,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "czlgl6n9voM", @@ -645,6 +664,7 @@ MusicSearchResult( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), ], ctoken: Some("EqcDEg5saWJsaW5nc21lbnNjaBqUA0VnV0tBUUlJQVVnVWFnd1FBeEFFRUFrUURoQUtFQVdDQVFzMk5EZzFVR2hQZEVoNldZSUJDM0IwTUZsMlptNW9SMmRKZ2dFTFZtbHVTbTFJTFhWcFpGbUNBUXRaYlZOdGVXMUlVbTVGUllJQkMxUm5aa2xpYVVoRFQweHZnZ0VMYkVOcE5rNWZkWEV6ZGtXQ0FRdFJTV3B4WlRKQ00xSmtVWUlCQzNFeWNGVnZkR3hZVUdWTmdnRUxNSGxRYm5abGRFTnRMVldDQVF0RlZUVldiSGsyTUZaSFZZSUJDMVZ1ZUZFd1ZFazBTVTF6Z2dFTGRXWndibmt4UzNoM1kxV0NBUXRrZFhwWFoxcEdTazUzUVlJQkMzSnVXSEV0TVc0d2JIUXdnZ0VMZGtocmNXUkROaTF5VDBtQ0FRdHVWR3hqWlZORlZGOWlPSUlCQzBRNFIyaHRVbWxKWm5oSmdnRUxNREZEVXkxcVZHRlpNVldDQVFzeWMwdHJTMHRMV0U4eU9JSUJDMk42Ykdkc05tNDVkbTlOGPHq0C4%3D"), diff --git a/src/client/snapshots/rustypipe__client__music_search__tests__map_music_search_tracks_videos.snap b/src/client/snapshots/rustypipe__client__music_search__tests__map_music_search_tracks_videos.snap index 0bd76fe..9298f11 100644 --- a/src/client/snapshots/rustypipe__client__music_search__tests__map_music_search_tracks_videos.snap +++ b/src/client/snapshots/rustypipe__client__music_search__tests__map_music_search_tracks_videos.snap @@ -29,6 +29,7 @@ MusicSearchResult( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "vbl9KrZxOF8", @@ -53,6 +54,7 @@ MusicSearchResult( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "eMfROJt0a7Q", @@ -77,6 +79,7 @@ MusicSearchResult( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "1ktLEhfkBCI", @@ -101,6 +104,7 @@ MusicSearchResult( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "2hAlp3Khsnk", @@ -125,6 +129,7 @@ MusicSearchResult( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "CHixjhwY0ek", @@ -149,6 +154,7 @@ MusicSearchResult( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "8YXKgZ393Ec", @@ -173,6 +179,7 @@ MusicSearchResult( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "KFNznAXnjXc", @@ -197,6 +204,7 @@ MusicSearchResult( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "hDhJeJZmTDA", @@ -221,6 +229,7 @@ MusicSearchResult( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "6kKSDXiip_8", @@ -245,6 +254,7 @@ MusicSearchResult( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "vfzlr70ogaI", @@ -269,6 +279,7 @@ MusicSearchResult( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "Fjth6cKGI88", @@ -293,6 +304,7 @@ MusicSearchResult( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "fznwvW9Kn4s", @@ -317,6 +329,7 @@ MusicSearchResult( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "Jore0zZW-_M", @@ -341,6 +354,7 @@ MusicSearchResult( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "_THM-2Ph-6I", @@ -365,6 +379,7 @@ MusicSearchResult( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "koJAGIUlnD0", @@ -389,6 +404,7 @@ MusicSearchResult( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "4tvQPrHcR4w", @@ -413,6 +429,7 @@ MusicSearchResult( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "CUh6MTvB_4E", @@ -437,6 +454,7 @@ MusicSearchResult( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "4TWR90KJl84", @@ -461,6 +479,7 @@ MusicSearchResult( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "Cw7eMibV-Xk", @@ -485,6 +504,7 @@ MusicSearchResult( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), ], ctoken: Some("EqQDEgtibGFjayBtYW1iYRqUA0VnV0tBUUlRQVVnVWFnd1FBeEFFRUFrUURoQUtFQVdDQVF0YVpXVnljbTUxVEdrMVJZSUJDM1ppYkRsTGNscDRUMFk0Z2dFTFpVMW1VazlLZERCaE4xR0NBUXN4YTNSTVJXaG1hMEpEU1lJQkN6Sm9RV3h3TTB0b2MyNXJnZ0VMUTBocGVHcG9kMWt3Wld1Q0FRczRXVmhMWjFvek9UTkZZNElCQzB0R1RucHVRVmh1YWxoamdnRUxhRVJvU21WS1dtMVVSRUdDQVFzMmEwdFRSRmhwYVhCZk9JSUJDM1ptZW14eU56QnZaMkZKZ2dFTFJtcDBhRFpqUzBkSk9EaUNBUXRtZW01M2RsYzVTMjQwYzRJQkMwcHZjbVV3ZWxwWExWOU5nZ0VMWDFSSVRTMHlVR2d0TmttQ0FRdHJiMHBCUjBsVmJHNUVNSUlCQ3pSMGRsRlFja2hqVWpSM2dnRUxRMVZvTmsxVWRrSmZORVdDQVFzMFZGZFNPVEJMU213NE5JSUJDME4zTjJWTmFXSldMVmhyGPHq0C4%3D"), diff --git a/src/client/snapshots/rustypipe__client__music_history__tests__map_history.snap b/src/client/snapshots/rustypipe__client__music_userdata__tests__map_history.snap similarity index 97% rename from src/client/snapshots/rustypipe__client__music_history__tests__map_history.snap rename to src/client/snapshots/rustypipe__client__music_userdata__tests__map_history.snap index d025f4a..06d0fe8 100644 --- a/src/client/snapshots/rustypipe__client__music_history__tests__map_history.snap +++ b/src/client/snapshots/rustypipe__client__music_userdata__tests__map_history.snap @@ -1,5 +1,5 @@ --- -source: src/client/music_history.rs +source: src/client/music_userdata.rs expression: map_res.c --- Paginator( @@ -37,6 +37,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), playback_date: "[date]", playback_date_txt: Some("Today"), @@ -73,6 +74,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), playback_date: "[date]", playback_date_txt: Some("Today"), @@ -109,6 +111,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), playback_date: "[date]", playback_date_txt: Some("Today"), @@ -145,6 +148,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), playback_date: "[date]", playback_date_txt: Some("Today"), @@ -181,6 +185,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), playback_date: "[date]", playback_date_txt: Some("Today"), @@ -217,6 +222,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), playback_date: "[date]", playback_date_txt: Some("Today"), @@ -257,6 +263,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), playback_date: "[date]", playback_date_txt: Some("Today"), @@ -285,6 +292,7 @@ Paginator( track_type: episode, track_nr: None, by_va: false, + unavailable: false, ), playback_date: "[date]", playback_date_txt: Some("Today"), @@ -321,6 +329,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), playback_date: "[date]", playback_date_txt: Some("Last week"), @@ -357,6 +366,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), playback_date: "[date]", playback_date_txt: Some("Last week"), @@ -393,6 +403,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), playback_date: "[date]", playback_date_txt: Some("Last week"), @@ -429,6 +440,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), playback_date: "[date]", playback_date_txt: Some("Last week"), @@ -469,6 +481,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), playback_date: "[date]", playback_date_txt: Some("Last week"), @@ -505,6 +518,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), playback_date: "[date]", playback_date_txt: Some("Last week"), @@ -541,6 +555,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), playback_date: "[date]", playback_date_txt: Some("Last week"), @@ -577,6 +592,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), playback_date: "[date]", playback_date_txt: Some("Last week"), @@ -617,6 +633,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), playback_date: "[date]", playback_date_txt: Some("Last week"), @@ -653,6 +670,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), playback_date: "[date]", playback_date_txt: Some("Last week"), @@ -689,6 +707,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), playback_date: "[date]", playback_date_txt: Some("Last week"), @@ -725,6 +744,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), playback_date: "[date]", playback_date_txt: Some("Last week"), @@ -761,6 +781,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), playback_date: "[date]", playback_date_txt: Some("Last week"), @@ -797,6 +818,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), playback_date: "[date]", playback_date_txt: Some("Last week"), @@ -829,6 +851,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), playback_date: "[date]", playback_date_txt: Some("Last week"), diff --git a/src/client/snapshots/rustypipe__client__pagination__tests__map_playlist_tracks.snap b/src/client/snapshots/rustypipe__client__pagination__tests__map_playlist_tracks.snap index 1c3a627..d005c8a 100644 --- a/src/client/snapshots/rustypipe__client__pagination__tests__map_playlist_tracks.snap +++ b/src/client/snapshots/rustypipe__client__pagination__tests__map_playlist_tracks.snap @@ -28,6 +28,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "f9g6NCHQrcE", @@ -56,6 +57,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "CAVfEwrwT_o", @@ -84,6 +86,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "VUr9JZQ8F2g", @@ -108,6 +111,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "XQat6rNNbdQ", @@ -132,6 +136,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "EQyU6fGDn0c", @@ -156,6 +161,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "g4poKgQZX6w", @@ -180,6 +186,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "YTHr7gxwYUQ", @@ -204,6 +211,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "MfCSDn6q6j4", @@ -228,6 +236,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "gx9KFXb5x_o", @@ -252,6 +261,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "d7R7DQ5tlQo", @@ -276,6 +286,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "cZPjgcqHSa8", @@ -300,6 +311,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "ogDLdREonWY", @@ -324,6 +336,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "pRQpKprUUPY", @@ -348,6 +361,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "qZoQw9b4uCo", @@ -372,6 +386,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "q23qghoF6Nk", @@ -396,6 +411,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "yU0aKa7PFBg", @@ -420,6 +436,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "DVCAqvypaCc", @@ -444,6 +461,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "XdnI7sm6LeQ", @@ -468,6 +486,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "KcOXNSJtFLg", @@ -492,6 +511,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "K0UxHXZwgsg", @@ -516,6 +536,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "eyyNwOSQ3Yg", @@ -540,6 +561,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "1yskotqNuXI", @@ -564,6 +586,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "C03n4AAiL9w", @@ -588,6 +611,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "a2wNRTKRusM", @@ -612,6 +636,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "AIf61iHwWMQ", @@ -636,6 +661,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "BixqbSRjY2Y", @@ -660,6 +686,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "Acgy-3d4P6o", @@ -684,6 +711,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "5M_yA9M7yNc", @@ -708,6 +736,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "PjJuezhos3U", @@ -732,6 +761,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "XMutaJI2-kc", @@ -756,6 +786,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "Xac6Q7hcZkQ", @@ -780,6 +811,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "JfwjsjBcDoU", @@ -804,6 +836,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "zshiQUV3ohw", @@ -828,6 +861,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "g1eTAt1_VAM", @@ -856,6 +890,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "c3rLrFC8igY", @@ -880,6 +915,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: true, ), TrackItem( id: "1im4DNEYzEM", @@ -908,6 +944,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "8BUxw9ocM2s", @@ -932,6 +969,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "g4cSpnGbHPE", @@ -960,6 +998,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "1Sdj9MiCowQ", @@ -988,6 +1027,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "2DbR35g-0ZY", @@ -1012,6 +1052,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "j09hpp3AxIE", @@ -1036,6 +1077,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "J3GN6JXjV3g", @@ -1060,6 +1102,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "pULl-p02upM", @@ -1084,6 +1127,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "O6By8JeCtQQ", @@ -1108,6 +1152,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "NGn3IYQ7M7E", @@ -1132,6 +1177,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "o43oI5x86dI", @@ -1156,6 +1202,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "7TNqUrINxzs", @@ -1180,6 +1227,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "f3BD5Zm3cp0", @@ -1208,6 +1256,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "sF4yTDp95Eo", @@ -1232,6 +1281,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "1EwLNHg6ejY", @@ -1256,6 +1306,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "-l75qaSDWe8", @@ -1280,6 +1331,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "7h7ntYLLrfQ", @@ -1304,6 +1356,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "ApUl3Ops69M", @@ -1328,6 +1381,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "2YcJ8Wightw", @@ -1352,6 +1406,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "W3q8Od5qJio", @@ -1376,6 +1431,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "WPFLAjmWCtk", @@ -1400,6 +1456,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "tC76tIp0kBk", @@ -1424,6 +1481,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "kiMG_JV2gbo", @@ -1448,6 +1506,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "CrYYg_atdtk", @@ -1472,6 +1531,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "XTPGpBBwt1w", @@ -1496,6 +1556,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "uC08L4xxjNM", @@ -1520,6 +1581,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "5fAoV_AAMf0", @@ -1544,6 +1606,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "u5Vz7obL460", @@ -1568,6 +1631,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "ZPJlyRv_IGI", @@ -1592,6 +1656,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "s2SLbln-JwE", @@ -1616,6 +1681,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "28xHtRw6pG8", @@ -1640,6 +1706,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "joWoKqUTRvc", @@ -1664,6 +1731,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "XNMFTqhcNrE", @@ -1688,6 +1756,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "v3vPLgJ9FX8", @@ -1716,6 +1785,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "UFXOd179kOA", @@ -1740,6 +1810,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "4xRsDnKgHZc", @@ -1764,6 +1835,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "mE3IjoEqMqY", @@ -1788,6 +1860,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "E7e5vxKerqA", @@ -1812,6 +1885,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "axmZ_5Rx4Go", @@ -1836,6 +1910,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "44Ig6BsOCYA", @@ -1860,6 +1935,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "3iLBFEJjdN0", @@ -1884,6 +1960,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "M-ncq2eHF_k", @@ -1908,6 +1985,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "-AJoJ-ggiKI", @@ -1932,6 +2010,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "cgb-zp9DDHg", @@ -1960,6 +2039,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "Q7ZXg3KQLt0", @@ -1984,6 +2064,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "ysAEZOwp5rM", @@ -2008,6 +2089,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "m5vfng33SVE", @@ -2032,6 +2114,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "yMfgjVlGbUE", @@ -2056,6 +2139,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "OQIYEPe6DWY", @@ -2080,6 +2164,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "5FS8RIH7BpI", @@ -2104,6 +2189,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "zSRKgFB9piY", @@ -2128,6 +2214,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "e4eHhgwHCME", @@ -2156,6 +2243,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "q3hZvho7jNk", @@ -2180,6 +2268,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "0nWysyj_Z4Y", @@ -2204,6 +2293,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "aGCcLWU0OVo", @@ -2228,6 +2318,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "OQsXLK4MeEA", @@ -2252,6 +2343,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "xm7dxIqOO2M", @@ -2276,6 +2368,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "jlaaByab4Zk", @@ -2304,6 +2397,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "KG9-jSqXz4U", @@ -2328,6 +2422,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "7dISZnwsBSA", @@ -2352,6 +2447,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "F_PPdS-PB14", @@ -2376,6 +2472,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "DMg9idvVY8M", @@ -2400,6 +2497,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "DGEmoSFI94Y", @@ -2424,6 +2522,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "BtZufymxHvE", @@ -2452,6 +2551,7 @@ Paginator( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), ], ctoken: Some("4qmFsgI8EiRWTFBMNWREeDY4MVQ0YlI3WkYxSXVXek92MW9tbFJiRTdQaUoaFGVnZFFWRHBEVGtGQ2tnRURDTG9F"), diff --git a/src/client/snapshots/rustypipe__client__pagination__tests__map_radio_tracks.snap b/src/client/snapshots/rustypipe__client__pagination__tests__map_radio_tracks.snap index 2f5c164..ea322b1 100644 --- a/src/client/snapshots/rustypipe__client__pagination__tests__map_radio_tracks.snap +++ b/src/client/snapshots/rustypipe__client__pagination__tests__map_radio_tracks.snap @@ -56,6 +56,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "hh5GKVa8VtM", @@ -108,6 +109,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "RdU3F5vN3_s", @@ -160,6 +162,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "OXWz_x6-dro", @@ -212,6 +215,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "ghrlZIMDzbM", @@ -264,6 +268,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "QiziJ40kTz0", @@ -316,6 +321,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "950BdJKBhGo", @@ -368,6 +374,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "tkzYyEp4zB4", @@ -420,6 +427,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "ffqliB42Nh4", @@ -472,6 +480,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "vFFT1iAUNDE", @@ -528,6 +537,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "8JXc4idKS_c", @@ -580,6 +590,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "4JJFrjkRxmo", @@ -632,6 +643,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "0EK_M2taRIM", @@ -684,6 +696,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "04tYkKUPPv4", @@ -736,6 +749,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "W0x7GcZkvH4", @@ -788,6 +802,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "INLFlN-PZq4", @@ -840,6 +855,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "GhL8GUjXEfk", @@ -892,6 +908,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "TaZkqPK0sbw", @@ -948,6 +965,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "ogKU5EQ0Wn0", @@ -1000,6 +1018,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "g92HIac9ufA", @@ -1052,6 +1071,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "_E6gDU0m_hk", @@ -1104,6 +1124,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "FrEDny55ch8", @@ -1156,6 +1177,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "-uOShlFu1v8", @@ -1208,6 +1230,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "PyyT5tHbOLw", @@ -1260,6 +1283,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), ], ctoken: Some("CBkSSBILUHl5VDV0SGJPTHciEVJEQU1WTTduaWdYUVMxWGIwMg53QUVCOGdFQ2VBRSUzRDgY0AEB-gEQQzcxNUY2RDFGQjIwNEQwQRgKggEVUFQ6RWd0UWVYbFVOWFJJWWs5TWR3"), diff --git a/src/client/snapshots/rustypipe__client__pagination__tests__map_saved_tracks.snap b/src/client/snapshots/rustypipe__client__pagination__tests__map_saved_tracks.snap index 65aea83..f343dca 100644 --- a/src/client/snapshots/rustypipe__client__pagination__tests__map_saved_tracks.snap +++ b/src/client/snapshots/rustypipe__client__pagination__tests__map_saved_tracks.snap @@ -36,6 +36,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "0uSu-jHdDd4", @@ -68,6 +69,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "11pkE_azpBQ", @@ -100,6 +102,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "1tJPy7XlfCQ", @@ -132,6 +135,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "2JpUBTLjfPA", @@ -164,6 +168,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "6WiuMIp9B6Y", @@ -196,6 +201,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "8nfNNAlsTTA", @@ -228,6 +234,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "C1U6oXpz4As", @@ -260,6 +267,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "DvKw0jTUN-s", @@ -292,6 +300,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "GDSVX--bsRU", @@ -324,6 +333,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "I-ArzgPbNx8", @@ -356,6 +366,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "OElgvIuT8TY", @@ -388,6 +399,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "RGlOEBJyhrc", @@ -420,6 +432,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "UUCM1WR611g", @@ -452,6 +465,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "WlzrZsEtWbs", @@ -484,6 +498,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "apY7iYoYtD8", @@ -516,6 +531,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "azSEPwrxG2c", @@ -548,6 +564,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "b9FNHTk-tAM", @@ -580,6 +597,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "eAeGr78VYxM", @@ -612,6 +630,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "efCzrXOWM0Q", @@ -644,6 +663,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "fbmHQLiF1qs", @@ -676,6 +696,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "h0qhAXLom-Y", @@ -708,6 +729,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "hTL2vAvAbNM", @@ -740,6 +762,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "hptOG4EVgMs", @@ -772,6 +795,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "iRIlHsC8xL8", @@ -804,6 +828,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), ], ctoken: Some("4qmFsgJcEhRGRW11c2ljX2xpa2VkX3ZpZGVvcxpEQ0JwNkprTkNhMUZIVW05SlEwRkZVVUZvYjBOYVZ6UnBSRUZxWXpsaVF6ZENhRU4yT1ZwdFRVRjNnZ01HS2dRSUFCQUI%3D"), diff --git a/src/client/snapshots/rustypipe__client__pagination__tests__map_search_tracks.snap b/src/client/snapshots/rustypipe__client__pagination__tests__map_search_tracks.snap index 6e7e4ef..731e3e6 100644 --- a/src/client/snapshots/rustypipe__client__pagination__tests__map_search_tracks.snap +++ b/src/client/snapshots/rustypipe__client__pagination__tests__map_search_tracks.snap @@ -36,6 +36,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "vMZqNPZADFw", @@ -68,6 +69,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "C8B-nBnB7Bk", @@ -100,6 +102,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "29MOu6Y781I", @@ -132,6 +135,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "AdvPpJVvyEg", @@ -164,6 +168,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "kv3Z269PQvE", @@ -196,6 +201,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "y74ZqAkFkK4", @@ -228,6 +234,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "ZVnqAUnj-1Y", @@ -260,6 +267,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "REmUidcJt5I", @@ -292,6 +300,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "63sEilefjtQ", @@ -324,6 +333,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "_LGy1K5vmq8", @@ -356,6 +366,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "Ak98OIfed8o", @@ -388,6 +399,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "_aSqdZKxcuU", @@ -420,6 +432,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "6Lb4bmEEfnY", @@ -452,6 +465,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "4lrp5FWFIak", @@ -484,6 +498,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "Kk8vT1o_gYE", @@ -524,6 +539,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "FbUrY0GdO88", @@ -556,6 +572,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "OFesVwAdT80", @@ -588,6 +605,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "lNeJjPPKE1g", @@ -620,6 +638,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), TrackItem( id: "SW_woyyA1Bg", @@ -652,6 +671,7 @@ Paginator( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), ], ctoken: Some("EqQDEgtibGFjayBtYW1iYRqUA0VnV0tBUUlJQVVnb2Fnd1FBeEFFRUFrUURoQUtFQVdDQVF0eVRuTkpVMEV0YTFkNlRZSUJDM1pOV25GT1VGcEJSRVozZ2dFTFF6aENMVzVDYmtJM1FtdUNBUXN5T1UxUGRUWlpOemd4U1lJQkMwRmtkbEJ3U2xaMmVVVm5nZ0VMYTNZeldqSTJPVkJSZGtXQ0FRdDVOelJhY1VGclJtdExOSUlCQzFwV2JuRkJWVzVxTFRGWmdnRUxVa1Z0Vldsa1kwcDBOVW1DQVFzMk0zTkZhV3hsWm1wMFVZSUJDMTlNUjNreFN6VjJiWEU0Z2dFTFFXczVPRTlKWm1Wa09HLUNBUXRmWVZOeFpGcExlR04xVllJQkN6Wk1ZalJpYlVWRlptNVpnZ0VMTkd4eWNEVkdWMFpKWVd1Q0FRdExhemgyVkRGdlgyZFpSWUlCQzBaaVZYSlpNRWRrVHpnNGdnRUxUMFpsYzFaM1FXUlVPRENDQVF0c1RtVkthbEJRUzBVeFo0SUJDMU5YWDNkdmVYbEJNVUpuGPHq0C4%3D"), diff --git a/src/client/snapshots/rustypipe__client__playlist__tests__map_playlist_data_20250316_cmdexecutor.snap b/src/client/snapshots/rustypipe__client__playlist__tests__map_playlist_data_20250316_cmdexecutor.snap new file mode 100644 index 0000000..04f9d2c --- /dev/null +++ b/src/client/snapshots/rustypipe__client__playlist__tests__map_playlist_data_20250316_cmdexecutor.snap @@ -0,0 +1,4146 @@ +--- +source: src/client/playlist.rs +expression: map_res.c +--- +Playlist( + id: "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + name: "Best Playlist Ever", + videos: Paginator( + count: Some(178), + items: [ + VideoItem( + id: "dvgZkm1xWPE", + name: "Coldplay - Viva La Vida (Official Video)", + duration: Some(243), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/dvgZkm1xWPE/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAF6wSFDQWvb39pnjwAKbZqtBo8zw", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/dvgZkm1xWPE/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBFCw6TDR5kZFRnA-LWrbocaJpkIw", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/dvgZkm1xWPE/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCa5GcQ_dGJ502O6pc0xONmTLHDtA", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/dvgZkm1xWPE/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAT-QcZjRo6kpkqpSOTHjVTUjO3tA", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCDPM_n1atn2ijUwHd0NNRQw", + name: "Coldplay", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("16 years ago"), + view_count: Some(964000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "89dGC8de0CA", + name: "Aerosmith - Dream On (Audio)", + duration: Some(269), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/89dGC8de0CA/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCmOt0R6jvhtuUevep9_yydAS-K2g", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/89dGC8de0CA/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDgs_EmMC8KHsROcKAWphZ9mIbg_A", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/89dGC8de0CA/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDdZpVdlqFrtNvT46qP7JdV2qS_xg", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/89dGC8de0CA/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBOZcKJ9IfFyi28ANcj5GcmaR20Rg", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCBxdHQVOaZhUOIj_3gt2FYw", + name: "Aerosmith", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("11 years ago"), + view_count: Some(168000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "3ATxLct2jDo", + name: "Lenny Kravitz - The Chamber (Lyric Video)", + duration: Some(298), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/3ATxLct2jDo/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCf241ir3ZWZiz00Y2ybY5qVNQpcg", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/3ATxLct2jDo/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCfLQtmh1Mmt3oHFlQwrjROi2Uauw", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/3ATxLct2jDo/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDlGsIg2fF-qkWKzEST8BDE3W8Ung", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/3ATxLct2jDo/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLD-Y1_zai7VZoR4q_u1gqFa86qtlw", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCdIs5dRqgZ1IWOdLZimHL_w", + name: "Lenny Kravitz", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("10 years ago"), + view_count: Some(9600000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "iX-QaNzd-0Y", + name: "Milky Chance - Stolen Dance (Official Video) [HD Version]", + duration: Some(314), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/iX-QaNzd-0Y/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLC5see3pLr032qk6-rO01a3ZhLfQQ", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/iX-QaNzd-0Y/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAsp00oKrv27y4VFJM3C3_xvGYVZQ", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/iX-QaNzd-0Y/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAIfO7lUol3rspcVVkLp3gdO4Wfcw", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/iX-QaNzd-0Y/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLB6ExMLEFyzsV8pFYFI3ZKbIdAcOQ", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCy-ez61m5LdG3FQVr-4Crcw", + name: "Milky Chance Official", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("11 years ago"), + view_count: Some(989000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "6gaEhK2C0tQ", + name: "Cut Copy - Take Me Over", + duration: Some(298), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/6gaEhK2C0tQ/hqdefault.jpg?sqp=-oaymwE1CKgBEF5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-CYAC0AWKAgwIABABGEcgZShVMA8=&rs=AOn4CLC0KMWvU_M5lBkSRY9rNlFBx_9_3Q", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/6gaEhK2C0tQ/hqdefault.jpg?sqp=-oaymwE1CMQBEG5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-CYAC0AWKAgwIABABGEcgZShVMA8=&rs=AOn4CLC1g2ZhbqfuM8Gm14EmG0DBAHyBzQ", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/6gaEhK2C0tQ/hqdefault.jpg?sqp=-oaymwE2CPYBEIoBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gmAAtAFigIMCAAQARhHIGUoVTAP&rs=AOn4CLCFp3bWZfBBlYBCgwgKvg5PSEAuPw", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/6gaEhK2C0tQ/hqdefault.jpg?sqp=-oaymwE2CNACELwBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gmAAtAFigIMCAAQARhHIGUoVTAP&rs=AOn4CLAxXDiDPOQR7-nXNDSxGTr7OaDMRg", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCvueeIpQ6l5BlyzUTWY13eQ", + name: "Cut Copy", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("12 years ago"), + view_count: Some(431000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "yy21fr7z6wY", + name: "Vance Joy - Riptide (Lyric video)", + duration: Some(200), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/yy21fr7z6wY/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBFaWd6gj8eNEOrCIrGHOl9aCz3vg", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/yy21fr7z6wY/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCrsCuQ4xQiyrNlRWmAe5HkEesrNg", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/yy21fr7z6wY/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBw2M2Hs_hFSeGd_c5dz2aIyWaIfw", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/yy21fr7z6wY/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBoF_tp0ITQOi7B79RIDznD1NZ7hA", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCZ0kE5a34dmh_sehHxYArDg", + name: "Local Session Manager", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("11 years ago"), + view_count: Some(13000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "E3Cw6-xRHdg", + name: "Haddaway - What Is Love [Full HD Official Music Video]", + duration: Some(237), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/E3Cw6-xRHdg/hqdefault.jpg?sqp=-oaymwE1CKgBEF5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-CYAC0AWKAgwIABABGGUgTyhJMA8=&rs=AOn4CLDUW5zYWFEKW8K69uJ5-77Y1-gebg", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/E3Cw6-xRHdg/hqdefault.jpg?sqp=-oaymwE1CMQBEG5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-CYAC0AWKAgwIABABGGUgTyhJMA8=&rs=AOn4CLBlidLDBkHrFrbEjhr3usfxETLfOA", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/E3Cw6-xRHdg/hqdefault.jpg?sqp=-oaymwE2CPYBEIoBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gmAAtAFigIMCAAQARhlIE8oSTAP&rs=AOn4CLBzWtFXB5Gt77VEAsfYlh9-F87i8A", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/E3Cw6-xRHdg/hqdefault.jpg?sqp=-oaymwE2CNACELwBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gmAAtAFigIMCAAQARhlIE8oSTAP&rs=AOn4CLDbMoUzeS0jiR4cP-h35lZocq8Bgw", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCSsQJRhZ5eO7MM_K_g7AS6A", + name: "Kiss András", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("12 years ago"), + view_count: Some(769000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "NUsoVlDFqZg", + name: "Enrique Iglesias - Bailando ft. Descemer Bueno, Gente De Zona", + duration: Some(287), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/NUsoVlDFqZg/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLB_it4kap2IgxTHmuK4k6HcH2cYrQ", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/NUsoVlDFqZg/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAzdGRFlJ9x2cfGvyc--2p551-PNg", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/NUsoVlDFqZg/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDX9s-shgYo1TVzFx99K3kQBrVhAg", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/NUsoVlDFqZg/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBoUMQqcN7M6bX6FQQpbZOMcHUc8A", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UC-6czyMkxDi8E8akPl0c7_w", + name: "Enrique Iglesias", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("10 years ago"), + view_count: Some(3600000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "pUjE9H8QlA4", + name: "Mr. Probz - Waves (Robin Schulz Remix Radio Edit)", + duration: Some(231), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/pUjE9H8QlA4/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLB6LvruwJXddjxT03Kqu5nBKrB7Nw", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/pUjE9H8QlA4/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLB-Q_M2fqi4zmt3v7pIvKnqWR4mUQ", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/pUjE9H8QlA4/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDHU93zInHE7XVYSdsNYgGQv2MtnQ", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/pUjE9H8QlA4/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDO9wWPCLhP98n25yT9jMxChE2-8A", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UC6YQf4SyHMZJ1jh5g6efPCg", + name: "Mr. Probz", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("11 years ago"), + view_count: Some(648000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "cpYPPXf63a4", + name: "Daniel Santacruz - Lento - Kizomba (Official Video HD)", + duration: Some(267), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/cpYPPXf63a4/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAQcHM5ewk6s7ya_AxkQ6ghE8Izpw", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/cpYPPXf63a4/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLClFKn-_WN6qVwgZ_2t5ITQp8TPMQ", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/cpYPPXf63a4/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBDzGVYkQcMnk2eFcTBL15muVgX3A", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/cpYPPXf63a4/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLD9hfCe5nXi4bOIMaVIjeKowWWHow", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCDJk0j9rBf7wuh7KWG70uug", + name: "Daniel Santacruz", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("11 years ago"), + view_count: Some(266000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "G7JLoOKefvQ", + name: "Alejandro Sanz - Não Me Compares ft. Ivete Sangalo (Official Video)", + duration: Some(307), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/G7JLoOKefvQ/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBoE8KNiEkb6UHG1aLS4obo2LPkQw", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/G7JLoOKefvQ/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDmVuiAGVM1KpQ9hyc6-WXpUBnRTA", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/G7JLoOKefvQ/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCfEWSAu9HA3-VZAkjCQ58UvK7KDg", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/G7JLoOKefvQ/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDSriv5maYtXtV4t_FIgceTyqOIOA", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCV4S6_JoeDq9j6mgbpkmA0Q", + name: "Alejandro Sanz", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("12 years ago"), + view_count: Some(92000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "_rxgp7TJhUE", + name: "Britney Spears - Perfume (Official Video)", + duration: Some(264), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/_rxgp7TJhUE/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBGIZuqNCrS6KvtexBWq2Dcb95syw", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/_rxgp7TJhUE/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAjz_-tUpU8js7mwcIBqeMhEkM8Zw", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/_rxgp7TJhUE/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCDG5fI4x8MvOFgJ_y1hCRfwxoRqA", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/_rxgp7TJhUE/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBr3gGhqkXnQ3sidK9zStu4O8R-Cg", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCgffc95YDBlkGrBAJUHUmXQ", + name: "Britney Spears", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("11 years ago"), + view_count: Some(45000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "Bs5-klTyb9o", + name: "John Newman - Losing Sleep (Official Music Video)", + duration: Some(263), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/Bs5-klTyb9o/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDbAkbM7bwoPGPHer-jP2X-jW_ByQ", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/Bs5-klTyb9o/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBodv57L6lXFA0y0gTLsWyx7H7VIw", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/Bs5-klTyb9o/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCYvUvyl_d2aWHN6nZ86o3NjZjA2g", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/Bs5-klTyb9o/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLA47S7BgWfj3ykO3QLI0bGrnk0oog", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCXtn650vh9Dj7uz8cFac0AQ", + name: "John Newman", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("11 years ago"), + view_count: Some(41000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "My2FRPA3Gf8", + name: "Miley Cyrus - Wrecking Ball (Official Video)", + duration: Some(222), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/My2FRPA3Gf8/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAAU5FGE6fEMSyb0zazDsXTQXg1_w", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/My2FRPA3Gf8/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBQguhsJ7nVWvya_1pNJNKUjOOIWQ", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/My2FRPA3Gf8/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBHwjM3lKojQ2TX8TobYlMijuzeUA", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/My2FRPA3Gf8/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDJxi2IUAaKs8Lz7bMgrTY7O-74qA", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCn7dB9UMTBDjKtEKBy_XISw", + name: "Miley Cyrus", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("11 years ago"), + view_count: Some(1200000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "W1tzURKYFNs", + name: "Miley Cyrus - Adore You (Official Video)", + duration: Some(278), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/W1tzURKYFNs/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDF9cdRnk9KlmTvAHqhnSEqLMW0hQ", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/W1tzURKYFNs/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLB9_IEjtA0Jkl2lw2kqx2lfCs5R4A", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/W1tzURKYFNs/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLANDNdnKXTcxs__K1VT-YptiXyhZw", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/W1tzURKYFNs/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLB9L3Xrcdw4klCiNlTyC0uaQAOHmQ", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCn7dB9UMTBDjKtEKBy_XISw", + name: "Miley Cyrus", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("11 years ago"), + view_count: Some(219000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "tO3n1oSPW58", + name: "Travie McCoy: Rough Water ft. Jason Mraz [OFFICIAL VIDEO]", + duration: Some(218), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/tO3n1oSPW58/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBSuPh1OFOvWL-6-t8VV713BfK87g", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/tO3n1oSPW58/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDmi9vp4oaXbLWhSfESsWOhMZbspA", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/tO3n1oSPW58/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLD1j1dmHqsre8ppLgH6fpP9DXFFtA", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/tO3n1oSPW58/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLA7D4mwh4_kxUkPZxpleULdA1IAOw", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UClVrJwcIy7saPcGc1nct80A", + name: "Fueled By Ramen", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("11 years ago"), + view_count: Some(7800000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "6daRqd54o9U", + name: "Blind Zero - I See Desire", + duration: Some(244), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/6daRqd54o9U/hqdefault.jpg?sqp=-oaymwE1CKgBEF5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-BIAC4AOKAgwIABABGGYgZihmMA8=&rs=AOn4CLCfp2TOVksM4-M1Ldryt8IkhwHCOw", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/6daRqd54o9U/hqdefault.jpg?sqp=-oaymwE1CMQBEG5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-BIAC4AOKAgwIABABGGYgZihmMA8=&rs=AOn4CLCBHBsZ2uzyUUbGBRcEgeGiTdOT7w", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/6daRqd54o9U/hqdefault.jpg?sqp=-oaymwE2CPYBEIoBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gSAAuADigIMCAAQARhmIGYoZjAP&rs=AOn4CLCrXOiqVqAH651zPdtEN7fcNc8SGA", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/6daRqd54o9U/hqdefault.jpg?sqp=-oaymwE2CNACELwBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gSAAuADigIMCAAQARhmIGYoZjAP&rs=AOn4CLC9lrGMO2KwUkDbuGQ0ZVF-12g7JQ", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCEYG3e7S3WPxrQKt6yOFLGw", + name: "Blind Zero", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("12 years ago"), + view_count: Some(60000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "GmpjYFbvcQQ", + name: "Berg - Tell Me (Audio)", + duration: Some(208), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/GmpjYFbvcQQ/hqdefault.jpg?sqp=-oaymwE1CKgBEF5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-BIAC4AOKAgwIABABGGUgYChZMA8=&rs=AOn4CLCb6b03B57iGs4HpqNNY7hxNHe4lQ", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/GmpjYFbvcQQ/hqdefault.jpg?sqp=-oaymwE1CMQBEG5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-BIAC4AOKAgwIABABGGUgYChZMA8=&rs=AOn4CLD0zvVj6alWjydhRz4HEY7Ik-o4Qw", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/GmpjYFbvcQQ/hqdefault.jpg?sqp=-oaymwE2CPYBEIoBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gSAAuADigIMCAAQARhlIGAoWTAP&rs=AOn4CLCiKBKEjAIgSNgS-79kGZbEyq8Ypw", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/GmpjYFbvcQQ/hqdefault.jpg?sqp=-oaymwE2CNACELwBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gSAAuADigIMCAAQARhlIGAoWTAP&rs=AOn4CLB5K5_OyMCG7kJe3v1T1B_cp-sRoA", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UC3AH36Ou3_gO4Ey1SYCIWxA", + name: "Filtr Portugal", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("11 years ago"), + view_count: Some(652000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "EoA1mCqdsVM", + name: "LISBOA - Wendy Nazaré & Pep\'s", + duration: Some(231), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/EoA1mCqdsVM/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCoh9T2bHvzcu_upQWPL3mOXMEflw", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/EoA1mCqdsVM/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDZQV5hhB3Lh1wjCFCzxcyBEzn4JQ", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/EoA1mCqdsVM/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDUNzlo6_euj-nQZ-H1FNFrxAo-dw", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/EoA1mCqdsVM/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLD4HEfyjtsX8QM9376hegmgUjWw_w", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCuWkRJW3O20-BXyuzvzvjUw", + name: "wendynazare", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("12 years ago"), + view_count: Some(2400000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "Cj25UpcBDt0", + name: "Faul, Wad Ad, Pnau - Changes (Videoclip)", + duration: Some(205), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/Cj25UpcBDt0/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBMJyT7zfC37tN594N0CGY03H0aYg", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/Cj25UpcBDt0/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDpe8UOX6JuyTrQKGyM0a_u0SYqjw", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/Cj25UpcBDt0/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAbACML8uIr9sCp-e9JJ17PRNI9hw", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/Cj25UpcBDt0/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCeSC8bLoDmSXHBp_AnSYUjadDPQA", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCdDwQirXr-a15rk0Tw5uxMw", + name: "FAUL & WAD", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("11 years ago"), + view_count: Some(117000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "W-TE_Ys4iwM", + name: "One Direction - Story of My Life", + duration: Some(248), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/W-TE_Ys4iwM/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAYZ4HjprMg0TJQ7fdUNenempmEVQ", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/W-TE_Ys4iwM/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLD7ByBPNTImD6c_J3OqiGxG_ajVfg", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/W-TE_Ys4iwM/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCQaCb7H2DkF5szyEM5sI0K9QNWTw", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/W-TE_Ys4iwM/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCpuwRHuaqH514yXPUn_q49LMnF0g", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCb2HGwORFBo94DmRx4oLzow", + name: "One Direction", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("11 years ago"), + view_count: Some(1000000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "T-sxSd1uwoU", + name: "Britney Spears - I Wanna Go (Official Video)", + duration: Some(274), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/T-sxSd1uwoU/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLB2c2jyFq5JkNhgBSVPVhNKHVrUzA", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/T-sxSd1uwoU/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAQa0w3fHuwi6Q2TxrO4v2DDUjTHw", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/T-sxSd1uwoU/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLD8NAXWvEmz1V6QJyG3Mqpb4T1nqg", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/T-sxSd1uwoU/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAu_FqgYktDFr9sZyqp3j4hYu4l4g", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCgffc95YDBlkGrBAJUHUmXQ", + name: "Britney Spears", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("13 years ago"), + view_count: Some(290000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "YxIiPLVR6NA", + name: "Avicii - Hey Brother (Lyric)", + duration: Some(259), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/YxIiPLVR6NA/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDetnXwumhmam0sGXcYJBoxUfU4qw", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/YxIiPLVR6NA/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBQcMH4N-guweBz4t792r3SrNYTKg", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/YxIiPLVR6NA/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAJpt2_6077rTXoKQwVWIhOk-0zFg", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/YxIiPLVR6NA/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCXf99Kl9zyUUe-6lry7VaSgDpW5g", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCPHjpfnnGklkRBBTd0k6aHg", + name: "Avicii", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("11 years ago"), + view_count: Some(583000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "XC3ahd6Di3M", + name: "U2 - Ordinary Love (From Mandela OST) Lyric Video", + duration: Some(219), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/XC3ahd6Di3M/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCU8eyalkOK8mbO7b1qoYsReJWfLw", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/XC3ahd6Di3M/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCUyQCCYvt3Rtnpzfrosz9vs0nFjA", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/XC3ahd6Di3M/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLB1zfNcmLHbpMkk2yyGuBQKW9d9lA", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/XC3ahd6Di3M/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAx6LkJ7pv394iXT_7YCRZws45hwA", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UC4gPNusMDwx2Xm-YI35AkCA", + name: "U2", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("11 years ago"), + view_count: Some(68000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "vAqPeOUCfyw", + name: "Federico Scavo - Funky Nassau (Official Video Teaser)", + duration: Some(162), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/vAqPeOUCfyw/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLA8NYx1N1tOXDCr-NR1TpZwQzrqYA", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/vAqPeOUCfyw/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCHNJs40QnBASTFwJCjOjexiaoM4Q", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/vAqPeOUCfyw/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDWfRS4sQpvCcAI44nY75D4kCw8Zw", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/vAqPeOUCfyw/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBblobV6r-4v5IoyIn9yHCi8Fpmhw", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UC5eYHWDQqAsiKlnvLCz-ezg", + name: "Energy TV", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("11 years ago"), + view_count: Some(18000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "zVOXmhn-AcA", + name: "George Michael - Amazing", + duration: Some(266), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/zVOXmhn-AcA/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDr4v68wFOQT0KoK1SMztpkO9mkzw", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/zVOXmhn-AcA/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAJMh6iownHU6xajR7-r_kAHxmtGA", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/zVOXmhn-AcA/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAlxLcEHcbkjYNnrRmXQOv2Lq6uIA", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/zVOXmhn-AcA/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLA9U3N4uglj3CX8L8eFUmHR1aBrfw", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UC85sMkq9uDGJDQf8fUo6VBA", + name: "WinterGirl991", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("13 years ago"), + view_count: Some(842000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "450p7goxZqg", + name: "John Legend - All of Me (Official Video)", + duration: Some(308), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/450p7goxZqg/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBvlfpDDdkHbnlGlnH25l5Eqh4ofA", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/450p7goxZqg/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLB5eBvqkowH7YmqRakDaowPkNUFsw", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/450p7goxZqg/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBqlxGbEnBmZFKfbtYgBa83e4nDtQ", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/450p7goxZqg/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCMPXbqFo3XANmCIDQNxRS2qtmDiQ", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCEa-JnNdYCIFn3HMhjGEWpQ", + name: "John Legend", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("11 years ago"), + view_count: Some(2400000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "-nV1WxvsfTk", + name: "Habibi I love you ( Mon amour, I love you) Ahmed Chawki, Kenza Farah ft Pitbull", + duration: Some(228), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/-nV1WxvsfTk/hqdefault.jpg?sqp=-oaymwE1CKgBEF5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-CYAC0AWKAgwIABABGFEgWihlMA8=&rs=AOn4CLBhU3DSdZ_sJUv5bEQR35yjlcXQww", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/-nV1WxvsfTk/hqdefault.jpg?sqp=-oaymwE1CMQBEG5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-CYAC0AWKAgwIABABGFEgWihlMA8=&rs=AOn4CLCYNa9RpmkKU6QG9e8HyfXcGJE6RQ", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/-nV1WxvsfTk/hqdefault.jpg?sqp=-oaymwE2CPYBEIoBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gmAAtAFigIMCAAQARhRIFooZTAP&rs=AOn4CLDMwkPCb7NUmj-g1aed80ttasgiGQ", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/-nV1WxvsfTk/hqdefault.jpg?sqp=-oaymwE2CNACELwBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gmAAtAFigIMCAAQARhRIFooZTAP&rs=AOn4CLARZUVQxMpkA2y9VViiaVDRlnVC2Q", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCMmD10HZfTh-jrnI6M7duTw", + name: "JOANDCOLABEL", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("11 years ago"), + view_count: Some(21000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "akhmS1D2Ce4", + name: "Lana Del Rey vs Cedric Gervais \'Summertime Sadness\' Remix", + duration: Some(226), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/akhmS1D2Ce4/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBOwnviX2uKfqMYRvgXiKsIxl8KrQ", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/akhmS1D2Ce4/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCMnrVN0P-042Sc2uoxc5nC4bPzDw", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/akhmS1D2Ce4/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCJyHtoJXHkeTKw-uov5shc9RrOow", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/akhmS1D2Ce4/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLC0yrIPDo_utjblcEW4NwPxHNhsjQ", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCpDJl2EmP7Oh90Vylx0dZtA", + name: "Spinnin\' Records", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("11 years ago"), + view_count: Some(178000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "t6hD6r3sIOE", + name: "Don Diablo & Matt Nash - Starlight (Could You Be Mine) (Original)", + duration: Some(344), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/t6hD6r3sIOE/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDLShpTYnVnnu6xn1ZcWnbnAq46nw", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/t6hD6r3sIOE/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAWGbkTMfW5lHbREv3YCHg_LkXeeA", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/t6hD6r3sIOE/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBbNoGf0B-5EQgWW8KrH0LP61sbMg", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/t6hD6r3sIOE/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLA4-8W0kfUm-C4d95AQ3XkcJckB6A", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UC0fpPkYoKHpNtr8P2kWtgdg", + name: "Axtone", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("11 years ago"), + view_count: Some(3900000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "LqAF832WSi0", + name: "The Aston Shuffle - Comfortable (Official Video) ft. Will Heard", + duration: Some(248), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/LqAF832WSi0/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBYTvDUhLxQSSzkKUvfLYyQcvXXlA", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/LqAF832WSi0/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAAUM3IwOxEYaM0aM0G7KG3nbJURg", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/LqAF832WSi0/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDVIem8Z9gDMbxFXZLyT7cVRd6RfA", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/LqAF832WSi0/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCDKPgWzEbsTAC__dcK4Rfe9_Sgkw", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UC3M-u_ZX2TRdEBX8Zax-F2Q", + name: "The Aston Shuffle", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("11 years ago"), + view_count: Some(865000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "i-gyZ35074k", + name: "Zedd - Stay The Night ft. Hayley Williams", + duration: Some(217), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/i-gyZ35074k/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBZQ1nDFb8pMur7r6zHJ-h74Z6wPw", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/i-gyZ35074k/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDdxjuMNoXsis-gAg4SxA0XCk8-mQ", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/i-gyZ35074k/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDYsEe48t_mdibG92Fjk8cdqbpXvA", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/i-gyZ35074k/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLARr3iQdufs-E9sjgYz_fHDB47_gw", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCPNokRZ9hacjIQ3IQL6HNUQ", + name: "Zedd", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("11 years ago"), + view_count: Some(292000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "hN5X4kGhAtU", + name: "Empire Of The Sun - We Are The People (Official Music Video)", + duration: Some(312), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/hN5X4kGhAtU/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAVCuZZCbYNGXqsT_mLAyoqCx7dFA", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/hN5X4kGhAtU/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBiEX3UOVDQPYSi4A3El70WElycbQ", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/hN5X4kGhAtU/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLB5N0XKCGgQByN-nVnkyzEACtBdUA", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/hN5X4kGhAtU/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAfDk5d1Q2fLuIIURN-GegpZuFTmA", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCyacMWc-JhzX6iq2PCF-4jw", + name: "Empire Of The Sun", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("14 years ago"), + view_count: Some(150000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "0injWL1Kl98", + name: "Robbie Williams - Beyond the Sea", + duration: Some(264), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/0injWL1Kl98/hqdefault.jpg?sqp=-oaymwE1CKgBEF5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-BIAC4AOKAgwIABABGGEgZShDMA8=&rs=AOn4CLCdFdX_XwvjeFoM8WibjneZ4EKGsg", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/0injWL1Kl98/hqdefault.jpg?sqp=-oaymwE1CMQBEG5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-BIAC4AOKAgwIABABGGEgZShDMA8=&rs=AOn4CLBf1bpDXnVwPt4Y7i4Lw4A4V3v2Ng", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/0injWL1Kl98/hqdefault.jpg?sqp=-oaymwE2CPYBEIoBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gSAAuADigIMCAAQARhhIGUoQzAP&rs=AOn4CLDWw8NDXC_z4y4MMZIWaDu9hgSZ8Q", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/0injWL1Kl98/hqdefault.jpg?sqp=-oaymwE2CNACELwBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gSAAuADigIMCAAQARhhIGUoQzAP&rs=AOn4CLAe-PBxTtkmOGulBqgs5C7Zay5YFA", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCx8HeHB5BRhva9c2g4h0Qmg", + name: "ididseeitcome", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("14 years ago"), + view_count: Some(1700000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "0KiKEB5guoY", + name: "Eros Ramazzotti - Hasta El Éxtasis ft. Nicole Scherzinger", + duration: Some(226), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/0KiKEB5guoY/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBcAjaMjCb430KoqXibNw4x2Aae9w", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/0KiKEB5guoY/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDIO30YiTs4ZoNLvfLBzl7kJqX5Bg", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/0KiKEB5guoY/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAqHD21K6bO_TKoVDPHu8H6hDu3qg", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/0KiKEB5guoY/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBrfo6dRz5sJqf1vqsS1OxpfVsChw", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UC-6TzsYLnG8R-K-r-rVaaeA", + name: "ErosRamazzotti", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("11 years ago"), + view_count: Some(5800000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "BR_DFMUzX4E", + name: "Armin van Buuren feat. Trevor Guthrie - This Is What It Feels Like (Official Music Video)", + duration: Some(250), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/BR_DFMUzX4E/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBpYen3YJBZVCHxCOiR2eHWEQDZIA", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/BR_DFMUzX4E/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCWwrVSwgbAO0yz1Qx8gg69TyXYhg", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/BR_DFMUzX4E/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBwUCpZjwaKeafxwNABH230FFtEyQ", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/BR_DFMUzX4E/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCsbcNCb_mt2dGtNuJuALlwmLoM8Q", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCGZXYc32ri4D0gSLPf2pZXQ", + name: "Armada Music TV", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("11 years ago"), + view_count: Some(140000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "RsKQOm_iJug", + name: "A LIGHT THAT NEVER COMES (Official Lyric Video) - LINKIN PARK x STEVE AOKI", + duration: Some(238), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/RsKQOm_iJug/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDRbUy6H24jiZ4vTBAIZ8_Qf2YIYA", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/RsKQOm_iJug/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBQwmW1_spb2cyFS7UWASybrE9UmQ", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/RsKQOm_iJug/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAYK_-O06XjcwAuEtcol8cWWgIw3A", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/RsKQOm_iJug/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLC9myemrIqhiAXdzFjL0ydrniZ0UA", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCZU9T1ceaOgwfLRq7OKFU4Q", + name: "Linkin Park", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("11 years ago"), + view_count: Some(16000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "yZqmarGShxg", + name: "Calvin Harris & Alesso - Under Control (Official Video) ft. Hurts", + duration: Some(211), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/yZqmarGShxg/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAk4ekkgJwCLdeho5NpJ2Iu8miMQA", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/yZqmarGShxg/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLD23-BBj6TMY9DsXtgPajGk5RjSUA", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/yZqmarGShxg/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAsUENcuOiy0_L3W0LDcWYcSRRAAw", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/yZqmarGShxg/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDjOKGSWUTCbhMXpY_K9D6A4P7NcQ", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCIjYyZxkFucP_W-tmXg_9Ow", + name: "Calvin Harris", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("11 years ago"), + view_count: Some(305000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "L5GwTfI_PD8", + name: "Fly Project - Toca Toca | Official Music Video", + duration: Some(170), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/L5GwTfI_PD8/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLC2djC5eb_sUntqpiAaF0QNaHUWrQ", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/L5GwTfI_PD8/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBycNY58Ilnl_JQ4e2IhIMjDj-wvg", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/L5GwTfI_PD8/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBJTXTMdi1nuob4h8TIO4-cU8xD3Q", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/L5GwTfI_PD8/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAgnCTTCwavbAnTAWtzyP0aMuN-vg", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCr5xubfcrZYYBDEOJCdI13A", + name: "Fly Project", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("11 years ago"), + view_count: Some(219000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "JL0q8o-IAc8", + name: "Fly Project - Goodbye | Official Music Video", + duration: Some(190), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/JL0q8o-IAc8/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAQdDNNH8BpWBVFllkY01ZGRraOqw", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/JL0q8o-IAc8/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAnd85hPZQwOEw9XR0WG68i18Wzew", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/JL0q8o-IAc8/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBELNYmIMf7g9upvnSy9Pjcr9VQnQ", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/JL0q8o-IAc8/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBJYY-Q6FIO4WjOkd-9S8ZtxenVBw", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCr5xubfcrZYYBDEOJCdI13A", + name: "Fly Project", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("14 years ago"), + view_count: Some(51000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "wCXc37dJWNA", + name: "Fly Project - Back In My Life | Official Music Video", + duration: Some(204), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/wCXc37dJWNA/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLACP6HZfTtHkQoKpDJ_7QSqog8gkQ", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/wCXc37dJWNA/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCRiFgvLnJZYtw8tijFghbNNxC6gQ", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/wCXc37dJWNA/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBTWl7tCjBa5qssIqXR4sPSSx1yHA", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/wCXc37dJWNA/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLC12XP-uxyy0SNBwazKsknP4gdq_w", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCr5xubfcrZYYBDEOJCdI13A", + name: "Fly Project", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("12 years ago"), + view_count: Some(24000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "3P06kyFpIQU", + name: "Fly Project - Musica | Official Music Video", + duration: Some(222), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/3P06kyFpIQU/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCEebF1WfL-1pnsJsb1o_OxFU4lRw", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/3P06kyFpIQU/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBuSwOhaJjJP9D2JYEliS_7L_iHkg", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/3P06kyFpIQU/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCuSzPGZvi25E2wjAIydZJTE1y3SQ", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/3P06kyFpIQU/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCLExcSMTkBgv8CBGoBog5wgaflvg", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCr5xubfcrZYYBDEOJCdI13A", + name: "Fly Project", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("13 years ago"), + view_count: Some(104000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "zsmUOdmm02A", + name: "P!nk - True Love (Official Video) ft. Lily Allen", + duration: Some(233), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/zsmUOdmm02A/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLB3PgIVgaEh_Y_Ki8bYUzcg_LnrIQ", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/zsmUOdmm02A/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBILVRU779bmWcRgTBgJNTuZ7XrEw", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/zsmUOdmm02A/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDej3TzzcXAiE3z72W3QbegCi3dNQ", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/zsmUOdmm02A/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAsJWFtAZuVLND_NBrtj0OZBrhprQ", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCE5yTn9ljzSnC_oMp9Jnckg", + name: "P!NK", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("11 years ago"), + view_count: Some(159000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "47dtFZ8CFo8", + name: "Capital Cities - Safe And Sound", + duration: Some(227), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/47dtFZ8CFo8/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDxg8TVh9qLSm2kcqf9Sr1Sbgcv3A", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/47dtFZ8CFo8/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLB_LIR2L5x5LXe32TESIXox2qL-rA", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/47dtFZ8CFo8/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBHmVTivrzPGMmv8JyU57_ee-AQyA", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/47dtFZ8CFo8/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLB6e-auxuAuBC4I9t3tJQAtV-cobA", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCV3qsXcX2DaGzpJg2pw9q5g", + name: "Capital Cities", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("11 years ago"), + view_count: Some(823000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "BEXtdcg7ZfQ", + name: "Kika - Can\'t Feel Love (Tonight)", + duration: Some(242), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/BEXtdcg7ZfQ/hqdefault.jpg?sqp=-oaymwE1CKgBEF5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-CYAC0AWKAgwIABABGGUgZShlMA8=&rs=AOn4CLDJROFGUTRIszbU9OxA9kATF2ZG0A", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/BEXtdcg7ZfQ/hqdefault.jpg?sqp=-oaymwE1CMQBEG5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-CYAC0AWKAgwIABABGGUgZShlMA8=&rs=AOn4CLA3IoBz2PSsjPTJ1ufKAsUjFeAtzw", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/BEXtdcg7ZfQ/hqdefault.jpg?sqp=-oaymwE2CPYBEIoBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gmAAtAFigIMCAAQARhlIGUoZTAP&rs=AOn4CLCbP0Ph5BGxUt9txX4ijYpHKdSyHg", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/BEXtdcg7ZfQ/hqdefault.jpg?sqp=-oaymwE2CNACELwBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gmAAtAFigIMCAAQARhlIGUoZTAP&rs=AOn4CLBxApXA0D4D1vjvSijeVTs4zDAgRw", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCv6fbkfpZgUrEZXbSkiyC1Q", + name: "Pedro Miguel", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("11 years ago"), + view_count: Some(271000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "g1j1qwQQ8-Q", + name: "James Blunt - Bonfire Heart (Official Music Video)", + duration: Some(226), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/g1j1qwQQ8-Q/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCAHKCLTmGjoEm1nMR8M5fBZ2Bi2g", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/g1j1qwQQ8-Q/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBNU-hGY2K7pCY2s_mTya-uuI-tNQ", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/g1j1qwQQ8-Q/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLD4bMerODi_s4MP_1duBQfLFGzzRQ", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/g1j1qwQQ8-Q/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBnFQKwGD4W2n4srW_2Z2MwmRIhnQ", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCUg8KhMXhFxJm-YQzOQ7nPw", + name: "James Blunt", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("11 years ago"), + view_count: Some(94000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "sC2nElyx7Ds", + name: "Enrique Iglesias - Heart Attack (Official Music Video)", + duration: Some(231), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/sC2nElyx7Ds/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBD_ZyHaNedxcep7V0vCNwPuegTZA", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/sC2nElyx7Ds/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBPvRaKGd4pQwrv79HvwWVMe82WQQ", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/sC2nElyx7Ds/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLD_yR4QCHqCEQ_hIzYt9lz75Vbb_A", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/sC2nElyx7Ds/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBmIReHif4lqMsmdsSucE5M_jndpA", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UC-6czyMkxDi8E8akPl0c7_w", + name: "Enrique Iglesias", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("11 years ago"), + view_count: Some(110000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "-whp15J2n_M", + name: "ARASH feat Helena- Broken Angel (Official Video)", + duration: Some(203), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/-whp15J2n_M/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBdy7L_4ufBSDdHGXYAt7HMFQPnIQ", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/-whp15J2n_M/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDiEQRj3DC7DJfL8o6j93ssLq0mUQ", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/-whp15J2n_M/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDhRkVtvQnOci9Ma1HrjMiqbG2HeQ", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/-whp15J2n_M/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBhdOC0tvcG4PuX9Jkk7zUhz7H0ew", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCU-0c1hN3jzWTdIetJCUULw", + name: "Warner Music Sweden", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("14 years ago"), + view_count: Some(76000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "hT_nvWreIhg", + name: "OneRepublic - Counting Stars", + duration: Some(284), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/hT_nvWreIhg/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBIhao5qL--RZvtadDiYgT44baoDw", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/hT_nvWreIhg/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAsYzXI0TjGD18yzU7Y2XiSbEW1zw", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/hT_nvWreIhg/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLD07e2ntG66xGjVR_Kk4uHAGuW7bg", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/hT_nvWreIhg/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLD4ZkdBZxlYjMNx8xnLPU4AdoVhiQ", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCi4EDAgjULwwNBHOg1aaCig", + name: "OneRepublic", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("11 years ago"), + view_count: Some(4100000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "UJWk_KNbDHo", + name: "The Lumineers - \"Stubborn Love\" (Official Video)", + duration: Some(280), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/UJWk_KNbDHo/hqdefault.jpg?sqp=-oaymwE1CKgBEF5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-CYAC0AWKAgwIABABGGUgVShPMA8=&rs=AOn4CLB3xVN3wmMah3co1EO7nYVvUSkeog", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/UJWk_KNbDHo/hqdefault.jpg?sqp=-oaymwE1CMQBEG5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-CYAC0AWKAgwIABABGGUgVShPMA8=&rs=AOn4CLDFyy6Ns1aKkOvgvlX6LfiTB9q2eA", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/UJWk_KNbDHo/hqdefault.jpg?sqp=-oaymwE2CPYBEIoBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gmAAtAFigIMCAAQARhlIFUoTzAP&rs=AOn4CLDFEP7AJx4SNVzFAiAK_T9lHLnp0g", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/UJWk_KNbDHo/hqdefault.jpg?sqp=-oaymwE2CNACELwBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gmAAtAFigIMCAAQARhlIFUoTzAP&rs=AOn4CLAl0SO4FZZ6SUKRMRn95L3ZLBRU-A", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCB7P9Hr5BYB5Mkxau6t3Sgw", + name: "The Lumineers", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("12 years ago"), + view_count: Some(169000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "MC8QcaMMVQE", + name: "Kings Of Leon - Wait For Me (Audio)", + duration: Some(213), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/MC8QcaMMVQE/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCAAbDSdJQlhIQmjXbBUwQQb5xqug", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/MC8QcaMMVQE/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDLnyeFrl4uKWmMCPijCtbtS9PDLA", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/MC8QcaMMVQE/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLC8hPFnguyZKSnbKsxMLknXGkROxw", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/MC8QcaMMVQE/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBqmFas4L0jxsT50nXK-_ZNJWgFxQ", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCfJein8E4rcYZSUCc8UqyMA", + name: "Kings of Leon", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("11 years ago"), + view_count: Some(28000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "jzy2dgEUOhY", + name: "Guru Josh Project - Infinity (Klaas Vocal Mix) [Ultra Records]", + duration: Some(195), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/jzy2dgEUOhY/hqdefault.jpg?sqp=-oaymwE1CKgBEF5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AGGBYAC4AOKAgwIABABGHIgUyg_MA8=&rs=AOn4CLAnw9WlRNIB1ssFUX4x7FAdsKuvdg", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/jzy2dgEUOhY/hqdefault.jpg?sqp=-oaymwE1CMQBEG5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AGGBYAC4AOKAgwIABABGHIgUyg_MA8=&rs=AOn4CLB4Mi95fDi4hWe743pwjB6LYsLEFQ", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/jzy2dgEUOhY/hqdefault.jpg?sqp=-oaymwE2CPYBEIoBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgBhgWAAuADigIMCAAQARhyIFMoPzAP&rs=AOn4CLAUoW9lbl3glxKs1noRsbI2WhfYKQ", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/jzy2dgEUOhY/hqdefault.jpg?sqp=-oaymwE2CNACELwBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgBhgWAAuADigIMCAAQARhyIFMoPzAP&rs=AOn4CLDmacmuMILsbsDH4cBFEeYF6qBcNA", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UC4rasfm9J-X4jNl9SvXp8xA", + name: "Ultra Records", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("16 years ago"), + view_count: Some(239000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "3YhoejhnW8w", + name: "Camila - De Que Me Sirve la Vida", + duration: Some(351), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/3YhoejhnW8w/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDfgpFk1HtN5u0ZBNo78q1mrs_4nw", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/3YhoejhnW8w/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLApVZI-D45J5ojT34Gus61UJaEXdw", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/3YhoejhnW8w/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBMX62qB4qKHZzvBcmVj-XPVeS1JQ", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/3YhoejhnW8w/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCj8mZhCEqajEImqnY0RgKyYWOS5A", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCTbABe0xvBjIQeCMXU_R7fA", + name: "Camila", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("13 years ago"), + view_count: Some(285000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "HL4HjQwMx-o", + name: "Maná - Amor Clandestino (Video Oficial)", + duration: Some(293), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/HL4HjQwMx-o/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLA6VzpyD2lVc5N71uaB_23uIgQ19A", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/HL4HjQwMx-o/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLA3cspSDPLqEjL0muVDihd0tnqWkQ", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/HL4HjQwMx-o/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDoxvLVbdLzk9pqUptaJPA1vcBVYA", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/HL4HjQwMx-o/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAsuN6aDouSBRmGB6piUuUiuL5R5Q", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UC3cSX-0y3IZzr2F2J1dFlUg", + name: "OficialMana", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("13 years ago"), + view_count: Some(428000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "_KSyWS8UgA4", + name: "Cali Y El Dandee - Yo Te Esperaré", + duration: Some(254), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/_KSyWS8UgA4/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBU46lqWcHWhFSwiCUytw5njUpmZg", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/_KSyWS8UgA4/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCQFylRnsllq8tClcowKxgPcUEWTg", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/_KSyWS8UgA4/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCdlzpDwD9BJFdH-K2j0bcOFcADsg", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/_KSyWS8UgA4/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCKuicZvyotuY9nfW3zfXlOD6cH8A", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UC-xukSIikEbhER7PqlB1nuQ", + name: "CALIDANDEE", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("13 years ago"), + view_count: Some(556000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "3O1_3zBUKM8", + name: "Naughty Boy - La la la ft. Sam Smith (Official Video)", + duration: Some(244), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/3O1_3zBUKM8/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDSX6rdGdayCv9q8ORPnwvXyZbY7w", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/3O1_3zBUKM8/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAqUmKxnTY6wYdHwceZVW8Bi14OjA", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/3O1_3zBUKM8/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLC09zyYP3V7DJhsQ0ZH3RYVV9OFeA", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/3O1_3zBUKM8/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLChZ9Ft8GWnxmAKv9lu8JzEkTDATw", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCrJot6B0r3pIS0Q6ZTwZKvw", + name: "Naughty Boy", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("11 years ago"), + view_count: Some(1300000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "CfihYWRWRTQ", + name: "John Newman - Love Me Again", + duration: Some(236), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/CfihYWRWRTQ/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCIcrhbh_N3owILzML6-7eEWqpvOA", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/CfihYWRWRTQ/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBwdDIM9Ie3BilA9LiQ3N1nUfG5eQ", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/CfihYWRWRTQ/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBzF89D001zicGbPbH4FzOdvJ0taQ", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/CfihYWRWRTQ/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBu1Ay7NR8qPDRBOxuC7aw1Icscvw", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCXtn650vh9Dj7uz8cFac0AQ", + name: "John Newman", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("11 years ago"), + view_count: Some(1000000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "pr6uyXT1-Vs", + name: "Dança da Lua - Eugénia Melo e Castro e Ney Matogrosso", + duration: Some(117), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/pr6uyXT1-Vs/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDDE5LY_52_9eCxWt7iijMLmg2c4w", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/pr6uyXT1-Vs/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAF6cjFxbxjzKCDqB6BCEdrfKKAKw", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/pr6uyXT1-Vs/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCQFciI8SQNgZHXCJtHYwvy3i8fpg", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/pr6uyXT1-Vs/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAP2CEkVK-tHiLm57UjszBKiAmlZQ", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UC0amZq9I39vfeRjfA8pZd5A", + name: "Mario Rietsch Monteiro", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("14 years ago"), + view_count: Some(70000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "6BTjG-dhf5s", + name: "Daddy Yankee - Limbo (Video Oficial)", + duration: Some(255), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/6BTjG-dhf5s/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCB6CojJe9yunlBLoJxLLS3drmglg", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/6BTjG-dhf5s/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBoZsX1OkxGBO8Mwp2kPCxGtAtoig", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/6BTjG-dhf5s/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCoyW5GYQuCU4vS8IGhAsYod8FQeQ", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/6BTjG-dhf5s/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCcrOamSmXRhCbyraIUWQBBh1dALA", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UC9TO_oo4c_LrOiKNaY6aysA", + name: "Daddy Yankee", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("12 years ago"), + view_count: Some(1400000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "5dbEhBKGOtY", + name: "David Guetta - Play Hard ft. Ne-Yo, Akon (Official Video)", + duration: Some(242), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/5dbEhBKGOtY/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAu20cZb31Jew5t4T0WSPbozhkOWw", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/5dbEhBKGOtY/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDN5rDJy-e3Q-oKv56oGAeiWxp_wA", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/5dbEhBKGOtY/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBVTlhWdeeQAPN_hbtd9SiOfiD-cg", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/5dbEhBKGOtY/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDIwWRFUUwHSYpwbnNbM-__RVoGFA", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UC1l7wYrva1qCH-wgqcHaaRg", + name: "David Guetta", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("11 years ago"), + view_count: Some(1200000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "_xSv4RXT2as", + name: "Pegate Mas.", + duration: Some(207), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/_xSv4RXT2as/hqdefault.jpg?sqp=-oaymwE1CKgBEF5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-CYAC0AWKAgwIABABGGUgVShNMA8=&rs=AOn4CLBovKLROUB5Na0a16y1ET9WQv6hhg", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/_xSv4RXT2as/hqdefault.jpg?sqp=-oaymwE1CMQBEG5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-CYAC0AWKAgwIABABGGUgVShNMA8=&rs=AOn4CLDbucfXWctpGpQEFIEWBwyPsQQbCQ", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/_xSv4RXT2as/hqdefault.jpg?sqp=-oaymwE2CPYBEIoBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gmAAtAFigIMCAAQARhlIFUoTTAP&rs=AOn4CLDf6sDB2DAqcBDyzP3UJKJpejE1tg", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/_xSv4RXT2as/hqdefault.jpg?sqp=-oaymwE2CNACELwBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gmAAtAFigIMCAAQARhlIFUoTTAP&rs=AOn4CLA8Ztf7jm-8mOOQ98-WrAW961e4pg", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCPZ4LPqzBCJGFcWdvk5xxOg", + name: "ReggaetontodoelTIME", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("13 years ago"), + view_count: Some(1000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "0NKUpo_xKyQ", + name: "Ellie Goulding - Lights (Official Video)", + duration: Some(214), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/0NKUpo_xKyQ/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLADtMt8JfkPpoGaMv2hURRXMU6R7Q", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/0NKUpo_xKyQ/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDSVoLlva8D-wJcGTCVC1ZXRKu0IQ", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/0NKUpo_xKyQ/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAE0Ug5lFw6sgJQtIQvCjfu5jOkmg", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/0NKUpo_xKyQ/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLArr-cx_RTYEtrkdPTi3m7tqzGhUA", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCt-am4x4ZyeohfgM85qFgdQ", + name: "Ellie Goulding", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("14 years ago"), + view_count: Some(232000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "lbSOLBMUvIE", + name: "Michael Bublé - Home [Official Music Video]", + duration: Some(226), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/lbSOLBMUvIE/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDvWhUK20wEvDvx6tWIpQZSj6TFKg", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/lbSOLBMUvIE/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLArB-KUURodCmDX4zuumnYJ5TKeqA", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/lbSOLBMUvIE/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAONZ3Xn5kovwS5qaQ8cPFqkH_lzA", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/lbSOLBMUvIE/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLD-f74zKaipTYXwuF-NDq2hCMN9HQ", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCHqQruhGENdmWy_oeH1f8QA", + name: "Michael Bublé", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("15 years ago"), + view_count: Some(185000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "ZPq570o-Nv0", + name: "ESC Portugal - 2003 - Deixa me Sonhar - Rita Guerra", + duration: Some(192), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/ZPq570o-Nv0/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBDO-vYQxpK3yOgOXuagFIx-eguMA", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/ZPq570o-Nv0/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLD4OWcwdAzRxskG6UVTgLauZwxtbA", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/ZPq570o-Nv0/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCzDYn5hCxHQKE0xNOTCb3i-znFbg", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/ZPq570o-Nv0/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCzM8lVpFtRZ-st8Lgv3Asn0VmvAw", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCV25caWF5Lt_nKLJ2UowvkQ", + name: "Ricardo Mendes", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("16 years ago"), + view_count: Some(19000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "1xXtAhX-eiM", + name: "LOREEN \"Sober\" (2011)", + duration: Some(233), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/1xXtAhX-eiM/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAHtZd0WZV-JSsmM0VB8EWv7KbSlA", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/1xXtAhX-eiM/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBuSZs-3Xgj0e9wv1aa7YYln8jROw", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/1xXtAhX-eiM/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLB61OqKRcSm3wBKCUcpyy3sb8BqpQ", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/1xXtAhX-eiM/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDB5CdXIzUcb-Cc1RD-OrqnCCiRIg", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCU-0c1hN3jzWTdIetJCUULw", + name: "Warner Music Sweden", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("13 years ago"), + view_count: Some(6000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "xPOBdqHWios", + name: "Loreen - My Heart Is Refusing Me (Lyric Video)", + duration: Some(224), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/xPOBdqHWios/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLC8Lh3CkNdyJcTn7gtMzddSd9zh3g", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/xPOBdqHWios/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDUEluw5neNRplNJt9DbenjOTNWlQ", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/xPOBdqHWios/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBehcEqFGrYkQptor0Ghns4sxrowA", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/xPOBdqHWios/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLALKt1b0KiTCQrkK1-DT59TyUpBeg", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCU-0c1hN3jzWTdIetJCUULw", + name: "Warner Music Sweden", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("12 years ago"), + view_count: Some(2500000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "6_5D4y6x-oo", + name: "Edward Maya & Mia Martina - Stereo Love (Ultra Music)", + duration: Some(255), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/6_5D4y6x-oo/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDaC_kZhD5OIIbgv87Jmr8GNL7w3A", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/6_5D4y6x-oo/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBhkN0HtMjznrQqMlxBezBSZpHOQA", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/6_5D4y6x-oo/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBONE-_u-aoQlsUh5nYrgs6QUPgUg", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/6_5D4y6x-oo/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBPhxbr2T5fpBosc8qPzVLKIDcAhA", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UC4rasfm9J-X4jNl9SvXp8xA", + name: "Ultra Records", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("14 years ago"), + view_count: Some(62000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "oASZG96v0Rk", + name: "Akcent - That\'s My Name (Ultra Music)", + duration: Some(254), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/oASZG96v0Rk/hqdefault.jpg?sqp=-oaymwE1CKgBEF5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-CYAC0AWKAgwIABABGGUgXyhDMA8=&rs=AOn4CLClGyeg9LhLdOH_CUakbhXmikljTg", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/oASZG96v0Rk/hqdefault.jpg?sqp=-oaymwE1CMQBEG5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-CYAC0AWKAgwIABABGGUgXyhDMA8=&rs=AOn4CLDsbf0YdGxcU_GJLos0h-LPWWh7Ww", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/oASZG96v0Rk/hqdefault.jpg?sqp=-oaymwE2CPYBEIoBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gmAAtAFigIMCAAQARhlIF8oQzAP&rs=AOn4CLD6T1Sk2KThe_f0-4SW5jisNy35Bw", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/oASZG96v0Rk/hqdefault.jpg?sqp=-oaymwE2CNACELwBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gmAAtAFigIMCAAQARhlIF8oQzAP&rs=AOn4CLBd5s5UzVJEp9Zg3YkMxP7CUi4QgQ", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UC4rasfm9J-X4jNl9SvXp8xA", + name: "Ultra Records", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("15 years ago"), + view_count: Some(154000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "d1dcXgGQT2M", + name: "La Ley - Mentira (Video Oficial)", + duration: Some(289), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/d1dcXgGQT2M/hqdefault.jpg?sqp=-oaymwE1CKgBEF5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-BIAC4AOKAgwIABABGE4gTihlMA8=&rs=AOn4CLAlDX9aQI088nOKb_O8q-H2fKj8OA", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/d1dcXgGQT2M/hqdefault.jpg?sqp=-oaymwE1CMQBEG5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-BIAC4AOKAgwIABABGE4gTihlMA8=&rs=AOn4CLDXXu3Eq8Sn66U0CUuBkC_jWtmdrQ", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/d1dcXgGQT2M/hqdefault.jpg?sqp=-oaymwE2CPYBEIoBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gSAAuADigIMCAAQARhOIE4oZTAP&rs=AOn4CLBzZwbcbxOQ5CT1DIMLTQ907z_FsQ", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/d1dcXgGQT2M/hqdefault.jpg?sqp=-oaymwE2CNACELwBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gSAAuADigIMCAAQARhOIE4oZTAP&rs=AOn4CLDmFaKxRVU5T3CfypAQ0DLBkamPuQ", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCP1b9jYyEqiNhJi4GqYdovw", + name: "Warner Music México", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("16 years ago"), + view_count: Some(255000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "O2fU28Pehdc", + name: "Maite Perroni - Tu y Yo (Video Oficial)", + duration: Some(243), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/O2fU28Pehdc/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAnTmI3HSwFkBYgpooV5oGnBoeAYg", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/O2fU28Pehdc/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDcvNVpXvvxcr61JSdwB1NkSLqZCQ", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/O2fU28Pehdc/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDcYhdUh2BlV5az8L6Iuq-It6ONjA", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/O2fU28Pehdc/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDLmlSoF2pcg72a8myCdj2UkAoJcg", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCU720aZHx6_8ABYWvBHbWUQ", + name: "Maite Perroni", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("11 years ago"), + view_count: Some(134000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "p-Z3YrHJ1sU", + name: "Edward Maya & Vika Jigulina - Stereo Love (Official Music Video)", + duration: Some(253), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/p-Z3YrHJ1sU/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAS7gls6oe0TfboDpVgwUjTmTLB9g", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/p-Z3YrHJ1sU/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCS8Udu4Esa0SEPLdshEVw9jbCg9Q", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/p-Z3YrHJ1sU/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDx8O_LL4-vrngtFsM3WgBGX3Q8LQ", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/p-Z3YrHJ1sU/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDBWAvjWTOgxJrQUMO7uk_5shK1kw", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCpDJl2EmP7Oh90Vylx0dZtA", + name: "Spinnin\' Records", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("15 years ago"), + view_count: Some(671000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "mLxYzju_G88", + name: "SCHILLER - I\'VE SEEN IT ALL (MIT MAYA SABAN)", + duration: Some(242), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/mLxYzju_G88/hqdefault.jpg?sqp=-oaymwE1CKgBEF5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-BIAC4AOKAgwIABABGGUgZShlMA8=&rs=AOn4CLCf8dDCPboKZf3Su_VeG3s7rYb__g", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/mLxYzju_G88/hqdefault.jpg?sqp=-oaymwE1CMQBEG5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-BIAC4AOKAgwIABABGGUgZShlMA8=&rs=AOn4CLCXipaBMoF6pPuE9jkVY55zSso-4Q", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/mLxYzju_G88/hqdefault.jpg?sqp=-oaymwE2CPYBEIoBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gSAAuADigIMCAAQARhlIGUoZTAP&rs=AOn4CLBpRXW1Q8tCQ_2DHeZ-9GcLtYpCNw", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/mLxYzju_G88/hqdefault.jpg?sqp=-oaymwE2CNACELwBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gSAAuADigIMCAAQARhlIGUoZTAP&rs=AOn4CLDCH24UlbTQIdwsrdZX6BbnSnD9qw", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCUUyi3ZKOX5JRftg38ZxFhQ", + name: "ukasu", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("16 years ago"), + view_count: Some(3800000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "dQlxjSm0qU0", + name: "SCHILLER: „I Feel You\" // with Heppner // Official Video", + duration: Some(228), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/dQlxjSm0qU0/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDsc0fDYBvJZ0H3JX2qc4id6xGs1A", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/dQlxjSm0qU0/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDeg9yV_a_ihwSZx0RhErXzH2O13A", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/dQlxjSm0qU0/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCICmnt7t-QoZUpYOp_EFcuc0OiLw", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/dQlxjSm0qU0/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAdnE8UJYENbk0IqcyL00WPZWRxhA", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCmM5xlAZDZ-h3bi6AXzDNKQ", + name: "SCHILLER official", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("16 years ago"), + view_count: Some(39000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "Jbt8oH5Lxto", + name: "The Beatles - Love me Do", + duration: Some(143), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/Jbt8oH5Lxto/hqdefault.jpg?sqp=-oaymwE1CKgBEF5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-BIAC6AKKAgwIABABGGUgZShlMA8=&rs=AOn4CLASno47mz_ynIg_IiAlstSWVh9f8Q", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/Jbt8oH5Lxto/hqdefault.jpg?sqp=-oaymwE1CMQBEG5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-BIAC6AKKAgwIABABGGUgZShlMA8=&rs=AOn4CLBg8nOdMSj9QwH8kZPAGpjaWJdPtw", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/Jbt8oH5Lxto/hqdefault.jpg?sqp=-oaymwE2CPYBEIoBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gSAAugCigIMCAAQARhlIGUoZTAP&rs=AOn4CLDLVhWwsaSX4pk9XCyya4TJgLflcA", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/Jbt8oH5Lxto/hqdefault.jpg?sqp=-oaymwE2CNACELwBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gSAAugCigIMCAAQARhlIGUoZTAP&rs=AOn4CLAHm5wGZWv9WHcfQu4ipKfzbz5u8Q", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCSu-uDw30vUo1p9uBk-w_Yw", + name: "HitboxAgs", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("12 years ago"), + view_count: Some(14000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "3EBz2baAGHo", + name: "Dirty South feat. Rudy - Phazing (Original Mix)", + duration: Some(453), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/3EBz2baAGHo/hqdefault.jpg?sqp=-oaymwE1CKgBEF5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-BIAC4AOKAgwIABABGBMgMih_MA8=&rs=AOn4CLBI5yGjuPSvupdJ1iiknxfpr8Yg2g", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/3EBz2baAGHo/hqdefault.jpg?sqp=-oaymwE1CMQBEG5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-BIAC4AOKAgwIABABGBMgMih_MA8=&rs=AOn4CLDPXZZcDasKOg5yKp8HCzX5zFPkmw", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/3EBz2baAGHo/hqdefault.jpg?sqp=-oaymwE2CPYBEIoBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gSAAuADigIMCAAQARgTIDIofzAP&rs=AOn4CLDpmdk5uCUuQ5nQQ8Xfo7M8bvyW2g", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/3EBz2baAGHo/hqdefault.jpg?sqp=-oaymwE2CNACELwBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gSAAuADigIMCAAQARgTIDIofzAP&rs=AOn4CLCIWxiBJPp6Zbq1EJeyhWVZ0A5YNg", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCD0k_PDzp5JHi2a2MZA-AVg", + name: "deltoeidis", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("14 years ago"), + view_count: Some(437000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "J-gYJBsln-w", + name: "Krewella - Alive (Video)", + duration: Some(207), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/J-gYJBsln-w/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDfhQSAPLGNzG19EPS8TauB3RVnTA", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/J-gYJBsln-w/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBLMGjEU5-Nfj3-1UiqLdkpY_8W5w", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/J-gYJBsln-w/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDTHmbhRVTaG9Sl8gG-8VtE9rA0sQ", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/J-gYJBsln-w/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCtswxiGQ9Fccb1j51Fs3Hc2PTbsA", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCDY_0WzkHyj0A1ev6RTql1Q", + name: "Krewella", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("12 years ago"), + view_count: Some(114000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "q7yCLn-O-Y0", + name: "Fun.: Carry On [OFFICIAL VIDEO]", + duration: Some(345), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/q7yCLn-O-Y0/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLANnYEVw6irRD-bIgs5Ecuw3M-VSw", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/q7yCLn-O-Y0/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCPDa15oP49C7l9JNNQcp5dVPAsdw", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/q7yCLn-O-Y0/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLC4L2CNkoMveWPEF-AX6oLFloFvKw", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/q7yCLn-O-Y0/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLD0prSGZWRnaEk19t2eNgoEEwGBIQ", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UClVrJwcIy7saPcGc1nct80A", + name: "Fueled By Ramen", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("12 years ago"), + view_count: Some(115000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "bek1y2uiQGA", + name: "Avicii vs Nicky Romero - I Could Be The One (Nicktim)", + duration: Some(286), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/bek1y2uiQGA/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCszqGjdqkNE0jask-NzfJCgEYhIg", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/bek1y2uiQGA/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDYz6284MIvQcjDTpG6PldcpF_52A", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/bek1y2uiQGA/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLA55IbSmhmsCz5FYeDeUmOHV8N7iQ", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/bek1y2uiQGA/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCp10TFTKeaSWeuuUIfVpVjtg4zLw", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCPHjpfnnGklkRBBTd0k6aHg", + name: "Avicii", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("12 years ago"), + view_count: Some(361000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "EPHmUD0QfmM", + name: "John Mamann - Love Life ft. Kika", + duration: Some(175), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/EPHmUD0QfmM/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCMTUCf1tgENEfqBYNaNFfYpEtpyQ", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/EPHmUD0QfmM/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDPr6WD2eyXjF7UMuQ9fn5IgnYufA", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/EPHmUD0QfmM/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCPouV_5OMd6efgMwD_gq_Fb-yLfw", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/EPHmUD0QfmM/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCwdECiNS-l85ZxifBBD8XevLkv-g", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UC5SfIg_4F6hl9krX3rebKzg", + name: "John Mamann", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("11 years ago"), + view_count: Some(31000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "jS8IZcx7tJY", + name: "Snow Patrol - Run (official video)", + duration: Some(283), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/jS8IZcx7tJY/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDEYK-5tJLmGVEJhNfaa-DJ7UZMyg", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/jS8IZcx7tJY/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAwMpf-VqumwE92X8Pue7PKtvl7Hg", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/jS8IZcx7tJY/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCovnREn7O4RU3FdqNTT0ldLD6ajg", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/jS8IZcx7tJY/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAxolzVpRXJMsyBeE59Dw7MQ69dig", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UC3VFfBJe2he4XU1p7bhDiAg", + name: "Universal Music Nederland", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("15 years ago"), + view_count: Some(13000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "ghb6eDopW8I", + name: "Of Monsters and Men - Little Talks", + duration: Some(255), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/ghb6eDopW8I/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCoNyV-ShyxkGZ4gUEsjzvYeYcrKg", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/ghb6eDopW8I/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBkcRNL1QY64i8CZ-hm3hW4pOk6jA", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/ghb6eDopW8I/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDTWN1V_VFA_HToKttZkM5XdyXJ4Q", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/ghb6eDopW8I/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDa3ukYowZBJjLw8wIVvAqedfJPxg", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UC-hZDis8Dbfk8FotKkOXyQQ", + name: "Of Monsters and Men", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("13 years ago"), + view_count: Some(385000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "Xmap94TcDNs", + name: "Wisin & Yandel, Jennifer Lopez - Follow The Leader (Official Video) ft. Jennifer Lopez", + duration: Some(299), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/Xmap94TcDNs/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBjhdqhoiAbK6tcdMB6Z-UVgyXVWA", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/Xmap94TcDNs/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLD0tivAuj9ecb7IXxmGiJcb9JjmIw", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/Xmap94TcDNs/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCn_rA_GRfxLOIQJS-eBtgD2RWCfQ", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/Xmap94TcDNs/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCs0dMH2i_MZ1i8SI8FnYFekAjMAA", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCwR_LqB7g3-_J7p1nscCbEA", + name: "Wisin & Yandel", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("12 years ago"), + view_count: Some(672000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "_gmtKSiJt2g", + name: "Juan Magán - Mal De Amores", + duration: Some(188), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/_gmtKSiJt2g/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAXK7Fov31GIRclBnJqwRoJ69o0Hw", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/_gmtKSiJt2g/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCcqW2viRHIbOYT6t03-mO5PoXrPg", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/_gmtKSiJt2g/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAEpVvuTBhKR24Zn5HAu-eQsZrZ5A", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/_gmtKSiJt2g/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCvyD0J84hXeJjirAsT9ahqoLpk8g", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCVpJ6eGdknSR4mlExF1bytA", + name: "JuanMagan", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("11 years ago"), + view_count: Some(127000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "88dLLDrVOwg", + name: "Nelly Furtado - Waiting For The Night", + duration: Some(271), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/88dLLDrVOwg/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLColV51m1JDZrHHxIO5fYuuk8X-cA", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/88dLLDrVOwg/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAQZimrA854o5Xrav550NWfmCybuQ", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/88dLLDrVOwg/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLA_9T2dFHpAPy37RqRpDkYYRW482w", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/88dLLDrVOwg/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDXQ05ExnEfhN1lMY2bcZU-pNEbbQ", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UC5Y-gAeGpzgzu0ObzKnhPFA", + name: "Nelly Furtado", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("12 years ago"), + view_count: Some(17000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "Z9L5ni0Spgk", + name: "Fedo, Camurri & Marchesini - Babylon (Promo Video)", + duration: Some(196), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/Z9L5ni0Spgk/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBKuaqxWwDzFueczUw-cXqjgfxMlw", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/Z9L5ni0Spgk/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDa8Tt8dbn3a_4KbDh1lK2swonb3w", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/Z9L5ni0Spgk/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDMZ2_QGC2n7rvUFR-U4HdYAeV05Q", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/Z9L5ni0Spgk/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCPb65_UkG90x3VmlUCJSU_-GImOw", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UC5eYHWDQqAsiKlnvLCz-ezg", + name: "Energy TV", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("14 years ago"), + view_count: Some(154000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "YgFyi74DVjc", + name: "Tinie Tempah - Written In The Stars ft. Eric Turner", + duration: Some(217), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/YgFyi74DVjc/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLByMtQpF7fANZ3zoMljVbG5nHhUPA", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/YgFyi74DVjc/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCVFfPXqM2RO7WVfOx_DYtVdRYYWw", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/YgFyi74DVjc/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCLSc5vaBLxnPxMM3oIzs6oecOpqw", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/YgFyi74DVjc/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCtBz7EpKUPdU1dHYlXiB9eRaafSg", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCDSX4RQN7fzIlZ1nSubwCcQ", + name: "Tinie", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("14 years ago"), + view_count: Some(328000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "yyDUC1LUXSU", + name: "Robin Thicke - Blurred Lines ft. T.I., Pharrell", + duration: Some(272), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/yyDUC1LUXSU/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLB9ZvzaOQXpNngJbvS_GxgHXSnb7g", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/yyDUC1LUXSU/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLASDSqilwfjPklCMYS2SwMJ7gnO3A", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/yyDUC1LUXSU/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBpCcrhl4afQxrGpWfRl-5h9M1TVA", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/yyDUC1LUXSU/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAgJQ_cJ44xgi8y834WOT28RodN4Q", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCFHZMfLTN8Zg2sUIrLJhRQQ", + name: "Robin Thicke", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("11 years ago"), + view_count: Some(931000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "bnVUHWCynig", + name: "Beyoncé - Halo", + duration: Some(225), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/bnVUHWCynig/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDdVYpBllucka8OdmI4rYaxdDbwZQ", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/bnVUHWCynig/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDifNY6_xFI36yPGwpSlQcRRdq5dw", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/bnVUHWCynig/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAfrtQWKbvfqAIT5nlEP6oHpGwQnA", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/bnVUHWCynig/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLC_mAwlLPdy-eK1GFCDG1I-Uu_qVw", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCuHzBCaKmtaLcRAOoazhCPA", + name: "Beyoncé", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("15 years ago"), + view_count: Some(1600000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "iRYvuS9OxdA", + name: "Amy Macdonald - This is the Life", + duration: Some(188), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/iRYvuS9OxdA/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAQ6tSfh29w-wLTG8eOYoR6ExueTQ", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/iRYvuS9OxdA/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLC_TGb7k7HHhnjgjKoucF2uxyY5eQ", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/iRYvuS9OxdA/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAU0YHCpj4Sl0p1nMnWJlQc9m0O7w", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/iRYvuS9OxdA/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBbZ3pXnK3rb_jAwDzhJUMxHBLCBA", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UC4bQSvfzqx4r3YmPw3Osx3g", + name: "Amy Macdonald", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("15 years ago"), + view_count: Some(177000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "RBumgq5yVrA", + name: "Passenger | Let Her Go (Official Video)", + duration: Some(255), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/RBumgq5yVrA/hqdefault.jpg?sqp=-oaymwE1CKgBEF5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-CYAC0AWKAgwIABABGH8gPCglMA8=&rs=AOn4CLClTEuXGgPmtiTNzrUWRE03Rb5Mdg", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/RBumgq5yVrA/hqdefault.jpg?sqp=-oaymwE1CMQBEG5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-CYAC0AWKAgwIABABGH8gPCglMA8=&rs=AOn4CLChUhmw9GMq6pTC4nK4yZWlrW_QQQ", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/RBumgq5yVrA/hqdefault.jpg?sqp=-oaymwE2CPYBEIoBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gmAAtAFigIMCAAQARh_IDwoJTAP&rs=AOn4CLCVpX4xhA7l6u_lSdxZLUPOfe9u6w", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/RBumgq5yVrA/hqdefault.jpg?sqp=-oaymwE2CNACELwBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gmAAtAFigIMCAAQARh_IDwoJTAP&rs=AOn4CLCANoXn9hFhlZWlwzSiR0re3Oi0XQ", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCFHtCB_FWXQ8GpjgfYcD8-g", + name: "Passenger", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("12 years ago"), + view_count: Some(3700000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "5NV6Rdv1a3I", + name: "Daft Punk - Get Lucky (Official Audio) ft. Pharrell Williams, Nile Rodgers", + duration: Some(249), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/5NV6Rdv1a3I/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLB8eQJ05B8xmUeTG2Qjv5ZTGV6GtQ", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/5NV6Rdv1a3I/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCYWE3tjuqA73Ghpo9Zx9YhQrPF8g", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/5NV6Rdv1a3I/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAYujREX1wWp6lqR-FxLTC3UoDBww", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/5NV6Rdv1a3I/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAec6mzXBkRvD7DZJQXZQAn-5DdYg", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UC_kRDKYrUlrbtrSiyu5Tflg", + name: "Daft Punk", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("11 years ago"), + view_count: Some(798000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "GbVxvITmwIc", + name: "Nadia Ali - Rapture (Avicii Remix) [Official Music Video]", + duration: Some(283), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/GbVxvITmwIc/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBYlbB7MP7mlFPrvaaa8NgyZhhFMw", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/GbVxvITmwIc/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBTwvP-ZJmMyMrYfKAVUyra_X-uTA", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/GbVxvITmwIc/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLD796ZUIzn9jANidIPu15gHgkOGJQ", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/GbVxvITmwIc/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCwlEEFb5u_e5qpa9tSJ8UeOPHSpQ", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCGZXYc32ri4D0gSLPf2pZXQ", + name: "Armada Music TV", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("14 years ago"), + view_count: Some(71000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "_ovdm2yX4MA", + name: "Avicii - Levels", + duration: Some(199), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/_ovdm2yX4MA/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBJhG8-CbY_gMCDa0Othohpjp2-Sw", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/_ovdm2yX4MA/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCHpPr_9X0IOy9gsmtWlQkFT9GV3g", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/_ovdm2yX4MA/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDn3vMoIYvWmWMNFsgN8aTyC876QA", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/_ovdm2yX4MA/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCictkFhj6f0NLuvA-jBl0uIx9r1A", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCPHjpfnnGklkRBBTd0k6aHg", + name: "Avicii", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("13 years ago"), + view_count: Some(739000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "5y_KJAg8bHI", + name: "Avicii - Wake Me Up (Official Lyric Video)", + duration: Some(252), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/5y_KJAg8bHI/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCbQHhfWQkRu61QB_9f8c0luSDo-A", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/5y_KJAg8bHI/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAjMdoRGoRT5ed3VrlZ_j84fXehBg", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/5y_KJAg8bHI/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDOnvnv-RD8R5gyfB7llV53-gKDBg", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/5y_KJAg8bHI/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBA82_EAo1CRpHUnA2HIQHJ8DAT8w", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCPHjpfnnGklkRBBTd0k6aHg", + name: "Avicii", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("11 years ago"), + view_count: Some(499000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "6Mj8KDpoZnQ", + name: "Del Amitri Driving with the Brakes on with lyrics", + duration: Some(275), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/6Mj8KDpoZnQ/hqdefault.jpg?sqp=-oaymwE1CKgBEF5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AG-AoAC8AGKAgwIABABGGkgaShpMA8=&rs=AOn4CLAai-jQB6NdIU65Ae_A2lVZyyrIhw", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/6Mj8KDpoZnQ/hqdefault.jpg?sqp=-oaymwE1CMQBEG5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AG-AoAC8AGKAgwIABABGGkgaShpMA8=&rs=AOn4CLAUPD_EFn7JC4PrPCJREsc2Hk_NFA", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/6Mj8KDpoZnQ/hqdefault.jpg?sqp=-oaymwE2CPYBEIoBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgBvgKAAvABigIMCAAQARhpIGkoaTAP&rs=AOn4CLB-UUKz-dpXAAlZmvF2c1tseoZ8cA", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/6Mj8KDpoZnQ/hqdefault.jpg?sqp=-oaymwE2CNACELwBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgBvgKAAvABigIMCAAQARhpIGkoaTAP&rs=AOn4CLDtvT3HtJnCrtf3AMvEeSmKwsPyhA", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCu4v_9NAtKYVd8_sPh99h6A", + name: "Ziggy", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("15 years ago"), + view_count: Some(291000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "rtOvBOTyX00", + name: "Christina Perri - A Thousand Years [Official Music Video]", + duration: Some(288), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/rtOvBOTyX00/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAiaq7QqeSdb9xU068ljYGiLtY1cA", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/rtOvBOTyX00/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCjTvxsN22M1eXwUuZR49bogXDbpA", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/rtOvBOTyX00/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDIWjGMXTDXcu3u_s0S8l0b9K-Tkg", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/rtOvBOTyX00/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCfknlSUb89kvv-vLPcKafCxp6gXA", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UC2gMECGMn5TVbRN5S5tKb8Q", + name: "Christina Perri", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("13 years ago"), + view_count: Some(2600000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "UggslfShToQ", + name: "INNA - J\'Adore | Lyrics Video", + duration: Some(196), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/UggslfShToQ/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAwL6RMQVmZwr5PwLtF5DvAEmpDAw", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/UggslfShToQ/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCNgWToeUKppaH5cbM63v0VblZrGA", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/UggslfShToQ/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAfsBFhkfeIi_9cTcew42dY2DBARw", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/UggslfShToQ/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAMtgf3RwJEymxxE9tEraM-Uh052Q", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCr8RbU-D7iSvpy0ZO-AasoQ", + name: "INNA", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("12 years ago"), + view_count: Some(36000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "MORF_XGAfj0", + name: "Alex Mica - Breathe", + duration: Some(222), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/MORF_XGAfj0/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLD4dJKhtTKudy14ZzzgTY9qzH4x8g", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/MORF_XGAfj0/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBSVafq7JdLyuoH10rl-wljo7NN_w", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/MORF_XGAfj0/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLB_aPn5MajbIR712uVfiXo8Fj-8qg", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/MORF_XGAfj0/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDE9J6brKvxld_oV3S9RzO83hA-IA", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCYM6H8mE3I8nTON-wMqg5Gg", + name: "1artistmusic", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("12 years ago"), + view_count: Some(8500000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "-0Bwmmiat-o", + name: "Vlegel - After Night in Ibiza (Official Video)", + duration: Some(228), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/-0Bwmmiat-o/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCGorDbo4abAT0S-MvD5hDsHJjXfA", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/-0Bwmmiat-o/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBa2y31Slz9APf2Dq25f1-01FxSUQ", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/-0Bwmmiat-o/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBEsFgAkX9q4DEsgHQkMc-2mcfTug", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/-0Bwmmiat-o/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAWxu7pswYn23AmmMQVXggP2z29Rw", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UCfS8AVoT4NgwXqPEau_Dx6A", + name: "Vlegel & Bluesolar", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("13 years ago"), + view_count: Some(27000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + VideoItem( + id: "mME-URRbak8", + name: "Carlos Baute - Quien te quiere como yo (Videoclip oficial)", + duration: Some(228), + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/mME-URRbak8/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCRsCb3kityamG2pLkdboBA7yUbUA", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/mME-URRbak8/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBQgg21dw9tKDOyOGeayYmM4ttyrg", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/mME-URRbak8/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCBVsxiVCXqgoHpTPBc28mtnmN7qw", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/mME-URRbak8/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAAdUUW53TO_rbaF8jm47Y8mk0U0g", + width: 336, + height: 188, + ), + ], + channel: Some(ChannelTag( + id: "UC2e1yIHI-WdrbGx1CZvRYMA", + name: "Carlos Baute", + avatar: [], + verification: none, + subscriber_count: None, + )), + publish_date: "[date]", + publish_date_txt: Some("14 years ago"), + view_count: Some(101000000), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + ], + ctoken: Some("4qmFsgKBARIkVkxQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3FpGjRDQUY2SGxCVU9rTklTV2xGUkVreVVtdEZOVTVFU1hsU2FrWkRVa1JKZWs1NldRJTNEJTNEmgIiUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaQ%3D%3D"), + endpoint: browse, + ), + video_count: 178, + thumbnail: [ + Thumbnail( + url: "https://i.ytimg.com/vi/dvgZkm1xWPE/hqdefault.jpg?sqp=-oaymwEWCKgBEF5IWvKriqkDCQgBFQAAiEIYAQ==&rs=AOn4CLBa5-Dz5la0fxHv3a4MwFR7DIYJoA", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/dvgZkm1xWPE/hqdefault.jpg?sqp=-oaymwEWCMQBEG5IWvKriqkDCQgBFQAAiEIYAQ==&rs=AOn4CLAxCkSRDuuvRO6BrdC3iHNiDbu3Jg", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/dvgZkm1xWPE/hqdefault.jpg?sqp=-oaymwEXCPYBEIoBSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLDraZ8FZUZsrqXXxwMErPyqS-dEqg", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/dvgZkm1xWPE/hqdefault.jpg?sqp=-oaymwEXCNACELwBSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLAHTfmPcI3oRi3eFeNejHBCi1KKrw", + width: 336, + height: 188, + ), + ], + description: None, + channel: Some(ChannelId( + id: "UCzMzwgvr4KncCyY-BsiH2fw", + name: "Sérgio Cabral", + )), + last_update: "[date]", + last_update_txt: Some("Last updated on Oct 11, 2024"), + visitor_data: None, +) diff --git a/src/client/snapshots/rustypipe__client__history__tests__map_history.snap b/src/client/snapshots/rustypipe__client__userdata__tests__map_history.snap similarity index 100% rename from src/client/snapshots/rustypipe__client__history__tests__map_history.snap rename to src/client/snapshots/rustypipe__client__userdata__tests__map_history.snap diff --git a/src/client/snapshots/rustypipe__client__history__tests__map_subscription_feed.snap b/src/client/snapshots/rustypipe__client__userdata__tests__map_subscription_feed.snap similarity index 100% rename from src/client/snapshots/rustypipe__client__history__tests__map_subscription_feed.snap rename to src/client/snapshots/rustypipe__client__userdata__tests__map_subscription_feed.snap diff --git a/src/client/history.rs b/src/client/userdata.rs similarity index 89% rename from src/client/history.rs rename to src/client/userdata.rs index 6852b60..89eb4b5 100644 --- a/src/client/history.rs +++ b/src/client/userdata.rs @@ -7,7 +7,7 @@ use crate::{ error::{Error, ExtractionError}, model::{ paginator::{ContinuationEndpoint, Paginator}, - ChannelItem, HistoryItem, PlaylistItem, VideoItem, + ChannelItem, HistoryItem, Playlist, PlaylistItem, VideoItem, }, serializer::MapResult, }; @@ -148,6 +148,28 @@ impl RustyPipeQuery { ) .await } + + /// Get all liked videos of the logged-in user + /// + /// Requires authentication cookies. + pub async fn liked_videos(&self) -> Result { + self.clone() + .authenticated() + .playlist("LL") + .await + .map_err(crate::util::map_internal_playlist_err) + } + + /// Get the "Watch later" playlist of the logged-in user + /// + /// Requires authentication cookies. + pub async fn watch_later(&self) -> Result { + self.clone() + .authenticated() + .playlist("WL") + .await + .map_err(crate::util::map_internal_playlist_err) + } } impl MapResponse>> for response::History { @@ -181,14 +203,13 @@ impl MapResponse>> for response::History { mapper.map_response(contents); mapper.conv_history_items( header.map(|h| h.item_section_header_renderer.title), + ctx.utc_offset, &mut map_res, ); } - response::YouTubeListItem::ContinuationItemRenderer { - continuation_endpoint, - } => { + response::YouTubeListItem::ContinuationItemRenderer(ep) => { if ctoken.is_none() { - ctoken = Some(continuation_endpoint.continuation_command.token); + ctoken = ep.continuation_endpoint.into_token(); } } _ => {} @@ -257,7 +278,7 @@ mod tests { #[test] fn map_history() { - let json_path = path!(*TESTFILES / "history" / "history.json"); + let json_path = path!(*TESTFILES / "userdata" / "history.json"); let json_file = File::open(json_path).unwrap(); let history: response::History = @@ -277,7 +298,7 @@ mod tests { #[test] fn map_subscription_feed() { - let json_path = path!(*TESTFILES / "history" / "subscription_feed.json"); + let json_path = path!(*TESTFILES / "userdata" / "subscription_feed.json"); let json_file = File::open(json_path).unwrap(); let history: response::History = diff --git a/src/client/video_details.rs b/src/client/video_details.rs index 9cc1ffc..d5529ef 100644 --- a/src/client/video_details.rs +++ b/src/client/video_details.rs @@ -180,7 +180,12 @@ impl MapResponse for response::VideoDetails { // so we ignore parse errors here for now like_text.and_then(|txt| util::parse_numeric(&txt).ok()), date_text.as_deref().and_then(|txt| { - timeago::parse_textual_date_or_warn(ctx.lang, txt, &mut warnings) + timeago::parse_textual_date_or_warn( + ctx.lang, + ctx.utc_offset, + txt, + &mut warnings, + ) }), date_text, view_count @@ -203,11 +208,10 @@ impl MapResponse for response::VideoDetails { ) }); - let comment_ctoken = comment_ctoken_section.map(|s| { + let comment_ctoken = comment_ctoken_section.and_then(|s| { s.continuation_item_renderer .continuation_endpoint - .continuation_command - .token + .into_token() }); let (owner, description, is_ccommons) = match secondary_info { @@ -328,7 +332,7 @@ impl MapResponse for response::VideoDetails { .sub_menu_items; items .try_swap_remove(1) - .map(|c| c.service_endpoint.continuation_command.token) + .and_then(|c| c.service_endpoint.into_token()) }); Ok(MapResult { @@ -448,7 +452,9 @@ impl MapResponse> for response::VideoComments { } } response::video_details::CommentListItem::ContinuationItemRenderer(cont) => { - ctoken = Some(cont.token()); + if ctoken.is_none() { + ctoken = cont.into_token(); + } } response::video_details::CommentListItem::CommentsHeaderRenderer { count_text } => { comment_count = count_text @@ -515,7 +521,9 @@ fn map_replies( )) } response::video_details::CommentListItem::ContinuationItemRenderer(cont) => { - reply_ctoken = Some(cont.token()); + if reply_ctoken.is_none() { + reply_ctoken = cont.into_token(); + } None } _ => None, diff --git a/src/deobfuscate.rs b/src/deobfuscate.rs index d0adc12..d08a6e1 100644 --- a/src/deobfuscate.rs +++ b/src/deobfuscate.rs @@ -3,7 +3,7 @@ use std::collections::HashMap; use once_cell::sync::Lazy; use regex::Regex; use reqwest::Client; -use ress::tokens::Token; +use ress::tokens::{Keyword, Punct, Token}; use rquickjs::{Context, Runtime}; use serde::{Deserialize, Serialize}; @@ -39,7 +39,7 @@ impl DeobfData { if let Err(e) = &res { if let Some(reporter) = reporter { let report = Report { - info: RustyPipeInfo::new(None), + info: RustyPipeInfo::new(None, None), level: Level::ERR, operation: "extract_deobf", error: Some(e.to_string()), @@ -106,7 +106,7 @@ impl Deobfuscator { .with(|ctx| call_fn(&ctx, DEOBF_NSIG_FUNC_NAME, nsig))?; tracing::trace!("deobf nsig: {nsig} -> {res}"); if res.starts_with("enhanced_except_") || res.ends_with(nsig) { - return Err(DeobfError::Other("nsig fn returned an exception")); + return Err(DeobfError::Other("nsig fn returned an exception".into())); } Ok(res) } @@ -134,55 +134,21 @@ fn caller_function(mapped_name: &str, fn_name: &str) -> String { } fn get_sig_fn(player_js: &str) -> Result { - let dfunc_name = get_sig_fn_name(player_js)?; + let name = get_sig_fn_name(player_js)?; + let code = extract_js_fn(player_js, &name)?; + let js_fn = format!("{}{}", code, caller_function(DEOBF_SIG_FUNC_NAME, &name)); - let function_pattern_str = format!( - r#"({}=function\([\w]+\)\{{.+?\}})"#, - dfunc_name.replace('$', "\\$") - ); - let function_pattern = Regex::new(&function_pattern_str) - .map_err(|_| DeobfError::Other("could not parse sig fn pattern regex"))?; - - let deobfuscate_function = format!( - "var {};", - &function_pattern - .captures(player_js) - .ok_or(DeobfError::Extraction("sig fn"))?[1] - ); - - let helper_object_name_pattern = Regex::new(r";([\w\$]{2,3})\...\(").unwrap(); - let helper_object_name = helper_object_name_pattern - .captures(&deobfuscate_function) - .ok_or(DeobfError::Extraction("sig fn helper object name"))? - .get(1) - .unwrap() - .as_str(); - - let helper_pattern_str = format!( - r#"(var {}=\{{.+?\}}\}};)"#, - helper_object_name.replace('$', "\\$") - ); - let helper_pattern = Regex::new(&helper_pattern_str) - .map_err(|_| DeobfError::Other("could not parse helper pattern regex"))?; - let player_js_nonl = player_js.replace('\n', ""); - let helper_object = &helper_pattern - .captures(&player_js_nonl) - .ok_or(DeobfError::Extraction("sig fn helper object"))?[1]; - - let js_fn = helper_object.to_owned() - + &deobfuscate_function - + &caller_function(DEOBF_SIG_FUNC_NAME, &dfunc_name); tracing::trace!("sig_fn: {js_fn}"); verify_fn(&js_fn, DEOBF_SIG_FUNC_NAME)?; - tracing::debug!("successfully extracted sig fn `{dfunc_name}`"); + tracing::debug!("successfully extracted sig fn `{name}`"); Ok(js_fn) } fn get_nsig_fn_names(player_js: &str) -> impl Iterator + '_ { static FUNCTION_NAME_REGEX: Lazy = Lazy::new(|| { - // x.get( .. y=functionName[array_num](z) .. x.set( - Regex::new(r#"(?:[\w$]\.get\(|index\.m3u8).+[a-zA-Z]=([\w$]{2,})(?:\[(\d+)\])?\([a-zA-Z0-9]\).+[a-zA-Z0-9]\.set\("#) + // ( ==="index.m3u8" OR "index.m3u8"=== ) .. delete .. y=functionName[array_num](z) + Regex::new(r#"(?:(?:===(?:[\w$]+\[\d+\]|"index\.m3u8"))|(?:(?:[\w$]+\[\d+\]|"index\.m3u8")===)).+\bdelete\b.+\b[a-zA-Z]=([\w$]{2,})(?:\[(\d+)\])?\([a-zA-Z0-9]\)"#) .unwrap() }); @@ -206,26 +172,71 @@ fn get_nsig_fn_names(player_js: &str) -> impl Iterator + '_ { }) } -fn extract_js_fn(js: &str, offset: usize, name: &str) -> Result { +fn extract_js_fn(js: &str, name: &str) -> Result { + let function_base_re = Regex::new(&format!(r#"{}\s*=\s*function\("#, regex::escape(name))) + .map_err(|e| DeobfError::Other(format!("parsing regex for {name}: {e}").into()))?; + let offset = function_base_re + .find(js) + .ok_or(DeobfError::Extraction("could not find function base"))? + .start(); + let scan = ress::Scanner::new(&js[offset..]); let mut state = 0; - let mut level = 0; - let mut start = 0; - let mut end = 0; + #[derive(Default, Clone, PartialEq, Eq)] + struct Level { + brace: isize, + paren: isize, + bracket: isize, + } + + let mut level = Level::default(); + let mut start = 0usize; + let mut end = 0usize; let mut period_before = false; - let mut last_ident = None; - let mut idents: HashMap = HashMap::new(); + let mut function_before = false; + let mut idents: HashMap = HashMap::new(); + // Set if the current statement is a variable/function param definition + // First value is the brace level, second is true if we are on the right hand side of an assignment + let mut var_def_stmt: Option<(Level, bool)> = None; let global_objects = [ - "NaN", "Infinity", "Object", "Function", "Boolean", "Symbol", "Error", "Number", "BigInt", - "Math", "Date", "String", "RegExp", "Array", "Map", "Set", + "globalThis", + "NaN", + "undefined", + "Infinity", + "Object", + "Function", + "Boolean", + "Symbol", + "Error", + "Number", + "BigInt", + "Math", + "Date", + "String", + "RegExp", + "Array", + "Map", + "Set", + "eval", + "isFinite", + "isNaN", + "parseFloat", + "parseInt", + "decodeURI", + "decodeURIComponent", + "encodeURI", + "encodeURIComponent", + "escape", + "unescape", ]; for item in scan { let it = item?; let token = it.token; + match state { // Looking for fn name 0 => { @@ -236,47 +247,113 @@ fn extract_js_fn(js: &str, offset: usize, name: &str) -> Result { - if token.matches_punct(ress::tokens::Punct::Equal) { + if token.matches_punct(Punct::Equal) { state = 2; } else { state = 0; } } 2 => { - // Looking for begin/end braces - if token.matches_punct(ress::tokens::Punct::OpenBrace) { - level += 1; - } else if token.matches_punct(ress::tokens::Punct::CloseBrace) { - level -= 1; + match &token { + Token::Punct(punct) => { + let var_def_this_lvl = || { + var_def_stmt + .as_ref() + .map(|(x, _)| x == &level) + .unwrap_or_default() + }; - if level == 0 { - end = it.span.end; - state = 3; - break; - } - } + match punct { + Punct::OpenBrace => { + level.brace += 1; + } + Punct::CloseBrace => { + if var_def_this_lvl() { + var_def_stmt = None; + } + level.brace -= 1; - // Looking for variable names - if let Token::Ident(id) = &token { - if !period_before { - let id_str = id.to_string(); - if !global_objects.contains(&id_str.as_str()) { - last_ident = Some(id.to_string()); + if level.brace == 0 { + end = it.span.end; + state = 3; + break; + } + } + Punct::OpenParen => { + level.paren += 1; + } + Punct::CloseParen => { + if var_def_this_lvl() { + var_def_stmt = None; + } + level.paren -= 1; + } + Punct::OpenBracket => { + level.bracket += 1; + } + Punct::CloseBracket => { + if var_def_this_lvl() { + var_def_stmt = None; + } + level.bracket -= 1; + } + Punct::SemiColon => { + if var_def_this_lvl() { + var_def_stmt = None; + } + } + Punct::Comma => { + if let Some((lvl, rhs)) = &mut var_def_stmt { + if lvl == &level { + *rhs = false; + } + } + } + Punct::Equal => { + if let Some((lvl, rhs)) = &mut var_def_stmt { + if lvl == &level { + *rhs = true; + } + } + } + _ => {} } } - } else if last_ident.is_some() - && !token.matches_punct(ress::tokens::Punct::OpenParen) - { - let n = idents.entry(last_ident.unwrap()).or_default(); - *n += 1; - last_ident = None; - } else { - last_ident = None; + Token::Keyword(kw) => match kw { + Keyword::Var(_) | Keyword::Let(_) | Keyword::Const(_) => { + var_def_stmt = Some((level.clone(), false)); + } + Keyword::Function(_) => { + let mut l = level.clone(); + l.paren += 1; + var_def_stmt = Some((l, false)); + } + _ => {} + }, + Token::Ident(id) => { + // Ignore object attributes + if !period_before && !global_objects.contains(&id.as_ref()) { + // If we are on the left hand side of a variable definition statement + // or after "function", mark the variable name as defined + if var_def_stmt + .as_ref() + .map(|(lvl, rhs)| lvl == &level && !rhs) + .unwrap_or_default() + || function_before + { + idents.insert(id.to_string(), true); + } else { + idents.entry(id.to_string()).or_default(); + } + } + } + _ => {} } } _ => break, }; - period_before = token.matches_punct(ress::tokens::Punct::Period); + period_before = token.matches_punct(Punct::Period); + function_before = matches!(&token, Token::Keyword(Keyword::Function(_))); } if state != 3 { @@ -287,9 +364,10 @@ fn extract_js_fn(js: &str, offset: usize, name: &str) -> Result Option<&str> { if let Token::Punct(p) = &token { match p { - ress::tokens::Punct::OpenBrace => braces.push(b'{'), - ress::tokens::Punct::OpenBracket => braces.push(b'['), - ress::tokens::Punct::OpenParen => braces.push(b'('), - ress::tokens::Punct::CloseBrace => close_brace(&mut braces, b'{')?, - ress::tokens::Punct::CloseBracket => close_brace(&mut braces, b'[')?, - ress::tokens::Punct::CloseParen => close_brace(&mut braces, b'(')?, - ress::tokens::Punct::Comma | ress::tokens::Punct::SemiColon => { + Punct::OpenBrace => braces.push(b'{'), + Punct::OpenBracket => braces.push(b'['), + Punct::OpenParen => braces.push(b'('), + Punct::CloseBrace => close_brace(&mut braces, b'{')?, + Punct::CloseBracket => close_brace(&mut braces, b'[')?, + Punct::CloseParen => close_brace(&mut braces, b'(')?, + Punct::Comma | Punct::SemiColon => { if braces.is_empty() { end = it.span.start; break; @@ -388,23 +466,19 @@ fn verify_fn(js_fn: &str, fn_name: &str) -> Result<(), DeobfError> { })?; if res.is_empty() { - return Err(DeobfError::Other("deobfuscation fn returned empty string")); + return Err(DeobfError::Other( + "deobfuscation fn returned empty string".into(), + )); } if res.starts_with("enhanced_except_") || res.ends_with(&testinp) { - return Err(DeobfError::Other("nsig fn returned an exception")); + return Err(DeobfError::Other("nsig fn returned an exception".into())); } Ok(()) } fn get_nsig_fn(player_js: &str) -> Result { let extract_fn = |name: &str| -> Result { - let function_base = format!("{name}=function"); - let offset = player_js - .find(&function_base) - .ok_or(DeobfError::Extraction("could not find function base"))?; - - let code = extract_js_fn(player_js, offset, name)?; - + let code = extract_js_fn(player_js, name)?; let js_fn = format!("{}{}", code, caller_function(DEOBF_NSIG_FUNC_NAME, name)); tracing::trace!("nsig_fn: {js_fn}"); verify_fn(&js_fn, DEOBF_NSIG_FUNC_NAME)?; @@ -472,7 +546,9 @@ mod tests { std::fs::read_to_string(js_path).unwrap() }); - const SIG_DEOBF_FUNC: &str = r#"var qB={w8:function(a){a.reverse()},EC:function(a,b){var c=a[0];a[0]=a[b%a.length];a[b%a.length]=c},Np:function(a,b){a.splice(0,b)}};var Rva=function(a){a=a.split("");qB.Np(a,3);qB.w8(a,41);qB.EC(a,55);qB.Np(a,3);qB.w8(a,33);qB.Np(a,3);qB.EC(a,48);qB.EC(a,17);qB.EC(a,43);return a.join("")};var deobf_sig=Rva;"#; + const SIG_DEOBF_FUNC: &str = r#"var qB={w8:function(a){a.reverse()}, +EC:function(a,b){var c=a[0];a[0]=a[b%a.length];a[b%a.length]=c}, +Np:function(a,b){a.splice(0,b)}}; var Rva=function(a){a=a.split("");qB.Np(a,3);qB.w8(a,41);qB.EC(a,55);qB.Np(a,3);qB.w8(a,33);qB.Np(a,3);qB.EC(a,48);qB.EC(a,17);qB.EC(a,43);return a.join("")};var deobf_sig=Rva;"#; const NSIG_DEOBF_FUNC: &str = r#"var Vo=function(a){var b=a.split(""),c=[function(d,e,f){var h=f.length;d.forEach(function(l,m,n){this.push(n[m]=f[(f.indexOf(l)-f.indexOf(this[m])+m+h--)%f.length])},e.split(""))}, 928409064,-595856984,1403221911,653089124,-168714481,-1883008765,158931990,1346921902,361518508,1403221911,-362174697,-233641452,function(){for(var d=64,e=[];++d-e.length-32;){switch(d){case 91:d=44;continue;case 123:d=65;break;case 65:d-=18;continue;case 58:d=96;continue;case 46:d=95}e.push(String.fromCharCode(d))}return e}, b,158931990,791141857,-907319795,-1776185924,1595027902,-829736173,function(d,e){e=(e%d.length+d.length)%d.length;d.splice(0,1,d.splice(e,1,d[0])[0])}, @@ -525,7 +601,7 @@ c[36](c[8],c[32]),c[20](c[25],c[10]),c[2](c[22],c[8]),c[32](c[20],c[16]),c[32](c #[test] fn t_extract_js_fn() { let base_js = "Wka = function(d){let x=10/2;return /,,[/,913,/](,)}/}let a = 42;"; - let res = extract_js_fn(base_js, 0, "Wka").unwrap(); + let res = extract_js_fn(base_js, "Wka").unwrap(); assert_eq!( res, "var Wka = function(d){let x=10/2;return /,,[/,913,/](,)}/};" @@ -536,7 +612,7 @@ c[36](c[8],c[32]),c[20](c[25],c[10]),c[2](c[22],c[8]),c[32](c[20],c[16]),c[32](c fn t_extract_js_fn_eviljs() { // Evil JavaScript code containing braces within strings and regular expressions let base_js = "Wka = function(d){var x = [/,,/,913,/(,)}/,\"abcdef}\\\"\",];var y = 10/2/1;return x[1][y];}//some={}random-padding+;"; - let res = extract_js_fn(base_js, 0, "Wka").unwrap(); + let res = extract_js_fn(base_js, "Wka").unwrap(); assert_eq!( res, "var Wka = function(d){var x = [/,,/,913,/(,)}/,\"abcdef}\\\"\",];var y = 10/2/1;return x[1][y];};" @@ -545,33 +621,43 @@ c[36](c[8],c[32]),c[20](c[25],c[10]),c[2](c[22],c[8]),c[32](c[20],c[16]),c[32](c #[test] fn t_extract_js_fn_outside_vars() { - let base_js = "let a = 42;foo();var b=11;bar();Wka = function(d){var x=1+2+a*b;return x;}"; - let res = extract_js_fn(base_js, 0, "Wka").unwrap(); + let base_js = "let a1 = 42;foo();var b1=11;var da=77;bar();Wka = function(da){var xy=1+2+a1*b1;return xy;}"; + let res = extract_js_fn(base_js, "Wka").unwrap(); // order of variables is non-reproducible assert!( - res == "var a = 42; var b=11; var Wka = function(d){var x=1+2+a*b;return x;};" - || res == "var b=11; var a = 42; var Wka = function(d){var x=1+2+a*b;return x;};", + res == "var a1 = 42; var b1=11; var Wka = function(da){var xy=1+2+a1*b1;return xy;};" + || res == "var b1=11; var a1 = 42; var Wka = function(da){var xy=1+2+a1*b1;return xy;};", "got {res}" ); } #[test] fn t_extract_js_fn_outside_vars2() { - let base_js = "{let a = {v1:1,v2:2}}foo();Wka = function(d){var x=1+2+a.v1;return x;}"; - let res = extract_js_fn(base_js, 0, "Wka").unwrap(); + let base_js = "{let a1 = {v1:1,v2:2}}foo();Wka = function(d){var x=1+2+a1.v1;return x;}"; + let res = extract_js_fn(base_js, "Wka").unwrap(); assert_eq!( res, - "var a = {v1:1,v2:2}; var Wka = function(d){var x=1+2+a.v1;return x;};" + "var a1 = {v1:1,v2:2}; var Wka = function(d){var x=1+2+a1.v1;return x;};" ); } #[test] fn t_extract_js_fn_outside_vars3() { - let base_js = "Wka = function(d){var x=1+2+a[0];return x;};let a=[1,2,3]"; - let res = extract_js_fn(base_js, 0, "Wka").unwrap(); + let base_js = "Wka = function(d){var x=1+2+a1[0];return x;};let a1=[1,2,3]"; + let res = extract_js_fn(base_js, "Wka").unwrap(); assert_eq!( res, - "var a=[1,2,3]; var Wka = function(d){var x=1+2+a[0];return x;};" + "var a1=[1,2,3]; var Wka = function(d){var x=1+2+a1[0];return x;};" + ); + } + + #[test] + fn t_extract_js_fn_outside_vars4() { + let base_js = "let a0=123456;let a1=function(a){return a};let Wka = function(d){var x=1+2+a1();return x;}"; + let res = extract_js_fn(base_js, "Wka").unwrap(); + assert_eq!( + res, + "var a1=function(a){return a}; var Wka = function(d){var x=1+2+a1();return x;};" ); } @@ -625,65 +711,88 @@ c[36](c[8],c[32]),c[20](c[25],c[10]),c[2](c[22],c[8]),c[32](c[20],c[16]),c[32](c } // Test cases from https://github.com/yt-dlp/yt-dlp/blob/master/test/test_youtube_signature.py - - #[rstest] - #[case("6ed0d907", "AOq0QJ8wRAIgXmPlOPSBkkUs1bYFYlJCfe29xx8j7v1pDL2QwbdV96sCIEzpWqMGkFR20CFOg51Tp-7vj_EMu-m37KtXJoOySqa0")] - #[case("3bb1f723", "MyOSJXtKI3m-uME_jv7-pT12gOFC02RFkGoqWpzE0Cs69VdbwQ0LDp1v7j8xx92efCJlYFYb1sUkkBSPOlPmXgIARw8JQ0qOAOAA")] - #[case("2f1832d2", "0QJ8wRAIgXmPlOPSBkkUs1bYFYlJCfe29xxAj7v1pDL0QwbdV96sCIEzpWqMGkFR20CFOg51Tp-7vj_EMu-m37KtXJ2OySqa0q")] #[tokio::test] #[traced_test] - async fn sig_tests(#[case] js_hash: &str, #[case] exp_sig: &str) { - let (js_url, js_path) = player_js_file(js_hash).await; - let player_js = std::fs::read_to_string(js_path).unwrap(); - let deobf_data = DeobfData::extract_fns(&js_url, &player_js).unwrap(); - let deobf = Deobfuscator::new(&deobf_data).unwrap(); + async fn sig_tests() { + let cases = [ + ("6ed0d907", "AOq0QJ8wRAIgXmPlOPSBkkUs1bYFYlJCfe29xx8j7v1pDL2QwbdV96sCIEzpWqMGkFR20CFOg51Tp-7vj_EMu-m37KtXJoOySqa0"), + ("3bb1f723", "MyOSJXtKI3m-uME_jv7-pT12gOFC02RFkGoqWpzE0Cs69VdbwQ0LDp1v7j8xx92efCJlYFYb1sUkkBSPOlPmXgIARw8JQ0qOAOAA"), + ("2f1832d2", "0QJ8wRAIgXmPlOPSBkkUs1bYFYlJCfe29xxAj7v1pDL0QwbdV96sCIEzpWqMGkFR20CFOg51Tp-7vj_EMu-m37KtXJ2OySqa0q"), + ("643afba4", "AAOAOq0QJ8wRAIgXmPlOPSBkkUs1bYFYlJCfe29xx8j7vgpDL0QwbdV06sCIEzpWqMGkFR20CFOS21Tp-7vj_EMu-m37KtXJoOy1"), + ("363db69b", "0aqSyOoJXtK73m-uME_jv7-pT15gOFC02RFkGMqWpz2ICs6EVdbwQ0LDp1v7j8xx92efCJlYFYb1sUkkBSPOlPmXgIARw8JQ0qOAOAA"), + ("6450230e", "qax0aqSyOoJXtK73m-uME_jv7-pT152OFC02RFkGMqWpzEICs69VdbwQ0LDp1v7j8gx92efCJlYFYb1sUkkBSPOlPmXgIARw8JQ0qOAOAA"), + ]; - let deobf_sig = deobf.deobfuscate_sig("2aq0aqSyOoJXtK73m-uME_jv7-pT15gOFC02RFkGMqWpzEICs69VdbwQ0LDp1v7j8xx92efCJlYFYb1sUkkBSPOlPmXgIARw8JQ0qOAOAA").unwrap(); - assert_eq!(deobf_sig, exp_sig, "js: {js_hash}"); + for (js_hash, exp_sig) in cases { + let span = tracing::span!(tracing::Level::ERROR, "sig_test", js_hash); + let _enter = span.enter(); + + let (js_url, js_path) = player_js_file(js_hash).await; + let player_js = std::fs::read_to_string(js_path).unwrap(); + let deobf_data = DeobfData::extract_fns(&js_url, &player_js).unwrap(); + let deobf = Deobfuscator::new(&deobf_data).unwrap(); + + let deobf_sig = deobf.deobfuscate_sig("2aq0aqSyOoJXtK73m-uME_jv7-pT15gOFC02RFkGMqWpzEICs69VdbwQ0LDp1v7j8xx92efCJlYFYb1sUkkBSPOlPmXgIARw8JQ0qOAOAA").unwrap(); + assert_eq!(deobf_sig, exp_sig, "[{js_hash}]"); + } } - #[rstest] - #[case("7862ca1f", "X_LCxVDjAavgE5t", "yxJ1dM6iz5ogUg")] - #[case("9216d1f7", "SLp9F5bwjAdhE9F-", "gWnb9IK2DJ8Q1w")] - #[case("f8cb7a3b", "oBo2h5euWy6osrUt", "ivXHpm7qJjJN")] - #[case("2dfe380c", "oBo2h5euWy6osrUt", "3DIBbn3qdQ")] - #[case("f1ca6900", "cu3wyu6LQn2hse", "jvxetvmlI9AN9Q")] - #[case("8040e515", "wvOFaY-yjgDuIEg5", "HkfBFDHmgw4rsw")] - #[case("e06dea74", "AiuodmaDDYw8d3y4bf", "ankd8eza2T6Qmw")] - #[case("5dd88d1d", "kSxKFLeqzv_ZyHSAt", "n8gS8oRlHOxPFA")] - #[case("324f67b9", "xdftNy7dh9QGnhW", "22qLGxrmX8F1rA")] - #[case("4c3f79c5", "TDCstCG66tEAO5pR9o", "dbxNtZ14c-yWyw")] - #[case("c81bbb4a", "gre3EcLurNY2vqp94", "Z9DfGxWP115WTg")] - #[case("1f7d5369", "batNX7sYqIJdkJ", "IhOkL_zxbkOZBw")] - #[case("009f1d77", "5dwFHw8aFWQUQtffRq", "audescmLUzI3jw")] - #[case("dc0c6770", "5EHDMgYLV6HPGk_Mu-kk", "n9lUJLHbxUI0GQ")] - #[case("113ca41c", "cgYl-tlYkhjT7A", "hI7BBr2zUgcmMg")] - #[case("c57c113c", "M92UUMHa8PdvPd3wyM", "3hPqLJsiNZx7yA")] - #[case("5a3b6271", "B2j7f_UPT4rfje85Lu_e", "m5DmNymaGQ5RdQ")] - #[case("7a062b77", "NRcE3y3mVtm_cV-W", "VbsCYUATvqlt5w")] - #[case("dac945fd", "o8BkRxXhuYsBCWi6RplPdP", "3Lx32v_hmzTm6A")] - #[case("6f20102c", "lE8DhoDmKqnmJJ", "pJTTX6XyJP2BYw")] - #[case("cfa9e7cb", "aCi3iElgd2kq0bxVbQ", "QX1y8jGb2IbZ0w")] - #[case("8c7583ff", "1wWCVpRR96eAmMI87L", "KSkWAVv1ZQxC3A")] - #[case("b7910ca8", "_hXMCwMt9qE310D", "LoZMgkkofRMCZQ")] - #[case("590f65a6", "1tm7-g_A9zsI8_Lay_", "xI4Vem4Put_rOg")] - #[case("b22ef6e7", "b6HcntHGkvBLk_FRf", "kNPW6A7FyP2l8A")] - #[case("3400486c", "lL46g3XifCKUZn1Xfw", "z767lhet6V2Skl")] - #[case("20dfca59", "-fLCxedkAk4LUTK2", "O8kfRq1y1eyHGw")] - #[case("b12cc44b", "keLa5R2U00sR9SQK", "N1OGyujjEwMnLw")] - #[case("3bb1f723", "gK15nzVyaXE9RsMP3z", "ZFFWFLPWx9DEgQ")] - #[case("2f1832d2", "YWt1qdbe8SAfkoPHW5d", "RrRjWQOJmBiP")] - #[case("19d2ae9d", "YWt1qdbe8SAfkoPHW5d", "CS6dVTYzpZrAZ5TD")] #[tokio::test] #[traced_test] - async fn nsig_tests(#[case] js_hash: &str, #[case] nsig_in: &str, #[case] expect: &str) { - let (js_url, js_path) = player_js_file(js_hash).await; - let player_js = std::fs::read_to_string(js_path).unwrap(); - let deobf_data = DeobfData::extract_fns(&js_url, &player_js).unwrap(); - let deobf = Deobfuscator::new(&deobf_data).unwrap(); + async fn nsig_tests() { + let cases = [ + ("7862ca1f", "X_LCxVDjAavgE5t", "yxJ1dM6iz5ogUg"), + ("9216d1f7", "SLp9F5bwjAdhE9F-", "gWnb9IK2DJ8Q1w"), + ("f8cb7a3b", "oBo2h5euWy6osrUt", "ivXHpm7qJjJN"), + ("2dfe380c", "oBo2h5euWy6osrUt", "3DIBbn3qdQ"), + ("f1ca6900", "cu3wyu6LQn2hse", "jvxetvmlI9AN9Q"), + ("8040e515", "wvOFaY-yjgDuIEg5", "HkfBFDHmgw4rsw"), + ("e06dea74", "AiuodmaDDYw8d3y4bf", "ankd8eza2T6Qmw"), + ("5dd88d1d", "kSxKFLeqzv_ZyHSAt", "n8gS8oRlHOxPFA"), + ("324f67b9", "xdftNy7dh9QGnhW", "22qLGxrmX8F1rA"), + ("4c3f79c5", "TDCstCG66tEAO5pR9o", "dbxNtZ14c-yWyw"), + ("c81bbb4a", "gre3EcLurNY2vqp94", "Z9DfGxWP115WTg"), + ("1f7d5369", "batNX7sYqIJdkJ", "IhOkL_zxbkOZBw"), + ("009f1d77", "5dwFHw8aFWQUQtffRq", "audescmLUzI3jw"), + ("dc0c6770", "5EHDMgYLV6HPGk_Mu-kk", "n9lUJLHbxUI0GQ"), + ("113ca41c", "cgYl-tlYkhjT7A", "hI7BBr2zUgcmMg"), + ("c57c113c", "M92UUMHa8PdvPd3wyM", "3hPqLJsiNZx7yA"), + ("5a3b6271", "B2j7f_UPT4rfje85Lu_e", "m5DmNymaGQ5RdQ"), + ("7a062b77", "NRcE3y3mVtm_cV-W", "VbsCYUATvqlt5w"), + ("dac945fd", "o8BkRxXhuYsBCWi6RplPdP", "3Lx32v_hmzTm6A"), + ("6f20102c", "lE8DhoDmKqnmJJ", "pJTTX6XyJP2BYw"), + ("cfa9e7cb", "aCi3iElgd2kq0bxVbQ", "QX1y8jGb2IbZ0w"), + ("8c7583ff", "1wWCVpRR96eAmMI87L", "KSkWAVv1ZQxC3A"), + ("b7910ca8", "_hXMCwMt9qE310D", "LoZMgkkofRMCZQ"), + ("590f65a6", "1tm7-g_A9zsI8_Lay_", "xI4Vem4Put_rOg"), + ("b22ef6e7", "b6HcntHGkvBLk_FRf", "kNPW6A7FyP2l8A"), + ("3400486c", "lL46g3XifCKUZn1Xfw", "z767lhet6V2Skl"), + ("20dfca59", "-fLCxedkAk4LUTK2", "O8kfRq1y1eyHGw"), + ("b12cc44b", "keLa5R2U00sR9SQK", "N1OGyujjEwMnLw"), + ("3bb1f723", "gK15nzVyaXE9RsMP3z", "ZFFWFLPWx9DEgQ"), + ("2f1832d2", "YWt1qdbe8SAfkoPHW5d", "RrRjWQOJmBiP"), + ("19d2ae9d", "YWt1qdbe8SAfkoPHW5d", "CS6dVTYzpZrAZ5TD"), + ("e7567ecf", "Sy4aDGc0VpYRR9ew_", "5UPOT1VhoZxNLQ"), + ("d50f54ef", "Ha7507LzRmH3Utygtj", "XFTb2HoeOE5MHg"), + ("074a8365", "Ha7507LzRmH3Utygtj", "ufTsrE0IVYrkl8v"), + ("643afba4", "N5uAlLqm0eg1GyHO", "dCBQOejdq5s-ww"), + ("69f581a5", "-qIP447rVlTTwaZjY", "KNcGOksBAvwqQg"), + ("363db69b", "eWYu5d5YeY_4LyEDc", "XJQqf-N7Xra3gg"), + ("6450230e", "eWYu5d5YeY_4LyEDc", "VfULHmlBUoDPVMN"), + ]; - let deobf_nsig = deobf.deobfuscate_nsig(nsig_in).unwrap(); - assert_eq!(deobf_nsig, expect, "js: {js_hash}"); + for (js_hash, nsig_in, exp_nsig) in cases { + let span = tracing::span!(tracing::Level::ERROR, "nsig_test", js_hash); + let _enter = span.enter(); + + let (js_url, js_path) = player_js_file(js_hash).await; + let player_js = std::fs::read_to_string(js_path).unwrap(); + let deobf_data = DeobfData::extract_fns(&js_url, &player_js).expect(js_hash); + let deobf = Deobfuscator::new(&deobf_data).expect(js_hash); + + let deobf_nsig = deobf.deobfuscate_nsig(nsig_in).expect(js_hash); + assert_eq!(deobf_nsig, exp_nsig, "[{js_hash}]"); + } } #[tokio::test] diff --git a/src/error.rs b/src/error.rs index b211904..81cd7fa 100644 --- a/src/error.rs +++ b/src/error.rs @@ -105,6 +105,13 @@ pub enum UnavailabilityReason { OfflineLivestream, /// YouTube banned your IP address from accessing the platform without an account IpBan, + /// YouTube bans IP addresses from certain VPN providers from accessing certain geo-restricted + /// videos. + /// + /// If this happens to you, you can try another server / VPN provider or disable your VPN. + VpnBan, + /// YouTube requires the user to solve a ReCaptcha + Captcha, /// Video temporarily unavailable (rate limit) TryAgain, /// Video cant be played for other reasons @@ -125,6 +132,8 @@ impl Display for UnavailabilityReason { UnavailabilityReason::MembersOnly => f.write_str("members-only"), UnavailabilityReason::OfflineLivestream => f.write_str("offline stream"), UnavailabilityReason::IpBan => f.write_str("ip-ban"), + UnavailabilityReason::VpnBan => f.write_str("vpn-ban"), + UnavailabilityReason::Captcha => f.write_str("captcha"), UnavailabilityReason::TryAgain => f.write_str("try again"), UnavailabilityReason::Unplayable => f.write_str("unplayable"), } @@ -151,6 +160,8 @@ pub enum AuthError { } pub(crate) mod internal { + use std::borrow::Cow; + use super::{Error, ExtractionError}; /// Error that occurred during the initialization @@ -168,7 +179,7 @@ pub(crate) mod internal { Extraction(&'static str), /// Unspecified error #[error("error: {0}")] - Other(&'static str), + Other(Cow<'static, str>), } impl From for Error { diff --git a/src/model/mod.rs b/src/model/mod.rs index 0912f74..9ceb38f 100644 --- a/src/model/mod.rs +++ b/src/model/mod.rs @@ -38,7 +38,7 @@ pub struct Thumbnail { pub enum UrlTarget { /// YouTube video /// - /// Example: + /// Example: Video { /// Unique YouTube video ID id: String, @@ -1049,6 +1049,8 @@ pub struct TrackItem { pub track_nr: Option, /// Is the track by 'Various artists'? pub by_va: bool, + /// Is the track unavailable on YouTube Music? + pub unavailable: bool, } /// YouTube Music artist list item @@ -1234,6 +1236,8 @@ pub struct MusicAlbum { pub year: Option, /// Is the album by 'Various artists'? pub by_va: bool, + /// Number of album tracks + pub track_count: u16, /// Album tracks pub tracks: Vec, /// Album variants diff --git a/src/report.rs b/src/report.rs index 85477fa..3ff5d4d 100644 --- a/src/report.rs +++ b/src/report.rs @@ -70,6 +70,8 @@ pub struct RustyPipeInfo<'a> { /// YouTube content language #[serde(skip_serializing_if = "Option::is_none")] pub language: Option, + /// RustyPipe Botguard version (`rustypipe-botguard 0.1.1`) + pub botguard_version: Option<&'a str>, } /// Reported HTTP request data @@ -104,13 +106,14 @@ pub enum Level { ERR, } -impl RustyPipeInfo<'_> { - pub(crate) fn new(language: Option) -> Self { +impl<'a> RustyPipeInfo<'a> { + pub(crate) fn new(language: Option, botguard_version: Option<&'a str>) -> Self { Self { package: env!("CARGO_PKG_NAME"), version: crate::VERSION, date: util::now_sec(), language, + botguard_version, } } } diff --git a/src/util/date.rs b/src/util/date.rs index dde5d88..b21fed3 100644 --- a/src/util/date.rs +++ b/src/util/date.rs @@ -25,7 +25,8 @@ pub fn shift_years(date: Date, years: i32) -> Date { shift_months(date, years * 12) } -pub fn shift_weeks_mo(date: Date, weeks: i32) -> Date { +/// Shift a date to the monday of its week, plus/minus the given amount of weeks +pub fn shift_weeks_monday(date: Date, weeks: i32) -> Date { let d = date + Duration::weeks(weeks.into()); Date::from_iso_week_date(d.year(), d.iso_week(), time::Weekday::Monday).unwrap() } @@ -40,3 +41,18 @@ pub fn now_sec() -> OffsetDateTime { .replace_nanosecond(0) .unwrap() } + +#[cfg(test)] +mod tests { + use rstest::rstest; + use time::{macros::date, Date}; + + #[rstest] + #[case::this_week(date!(2025-01-17), 0, date!(2025-01-13))] + #[case::last_week(date!(2025-01-17), -1, date!(2025-01-06))] + #[case::last_month(date!(2025-01-17), -4, date!(2024-12-16))] + fn shift_weeks_monday(#[case] date: Date, #[case] weeks: i32, #[case] expect: Date) { + let res = super::shift_weeks_monday(date, weeks); + assert_eq!(res, expect); + } +} diff --git a/src/util/dictionary.rs b/src/util/dictionary.rs index 6ada000..c69e888 100644 --- a/src/util/dictionary.rs +++ b/src/util/dictionary.rs @@ -53,6 +53,8 @@ pub(crate) struct Entry { pub chan_prefix: &'static str, /// Channel name suffix on playlist pages pub chan_suffix: &'static str, + /// "Other versions" title on album pages + pub album_versions_title: &'static str, } #[rustfmt::skip] @@ -183,6 +185,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "deur", chan_suffix: "", + album_versions_title: "Ander weergawes", }, Language::Am => Entry { timeago_tokens: ::phf::Map { @@ -310,6 +313,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "በ", chan_suffix: "", + album_versions_title: "ሌሎች ስሪቶች", }, Language::Ar => Entry { timeago_tokens: ::phf::Map { @@ -445,6 +449,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "بواسطة", chan_suffix: "", + album_versions_title: "إصدارات أخرى", }, Language::As => Entry { timeago_tokens: ::phf::Map { @@ -567,6 +572,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "", chan_suffix: "ৰ দ\u{9cd}ব\u{9be}ৰ\u{9be}", + album_versions_title: "অন\u{9cd}য সংস\u{9cd}কৰণ", }, Language::Az => Entry { timeago_tokens: ::phf::Map { @@ -682,6 +688,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "by", chan_suffix: "", + album_versions_title: "Digər versiyalar", }, Language::Be => Entry { timeago_tokens: ::phf::Map { @@ -829,6 +836,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "ад", chan_suffix: "", + album_versions_title: "Іншыя версіі", }, Language::Bg => Entry { timeago_tokens: ::phf::Map { @@ -945,6 +953,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "от", chan_suffix: "", + album_versions_title: "Други версии", }, Language::Bn => Entry { timeago_tokens: ::phf::Map { @@ -1062,6 +1071,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: ",", chan_suffix: "দ\u{9cd}ব\u{9be}র\u{9be}", + album_versions_title: "অন\u{9cd}য সংস\u{9cd}করণগ\u{9c1}লি", }, Language::Bs => Entry { timeago_tokens: ::phf::Map { @@ -1201,6 +1211,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "od", chan_suffix: "", + album_versions_title: "Druge verzije", }, Language::Ca => Entry { timeago_tokens: ::phf::Map { @@ -1325,6 +1336,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "de:", chan_suffix: "", + album_versions_title: "Altres versions", }, Language::Cs => Entry { timeago_tokens: ::phf::Map { @@ -1455,6 +1467,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "autor:", chan_suffix: "", + album_versions_title: "Jiné verze", }, Language::Da => Entry { timeago_tokens: ::phf::Map { @@ -1579,6 +1592,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "af", chan_suffix: "", + album_versions_title: "Andre versioner", }, Language::De => Entry { timeago_tokens: ::phf::Map { @@ -1700,6 +1714,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "von", chan_suffix: "", + album_versions_title: "Weitere Versionen", }, Language::El => Entry { timeago_tokens: ::phf::Map { @@ -1830,6 +1845,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "από το χρήστη", chan_suffix: "", + album_versions_title: "Άλλες εκτελέσεις", }, Language::En | Language::EnGb | Language::EnIn => Entry { timeago_tokens: ::phf::Map { @@ -1971,6 +1987,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "by", chan_suffix: "", + album_versions_title: "Other versions", }, Language::Es => Entry { timeago_tokens: ::phf::Map { @@ -2098,6 +2115,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "de", chan_suffix: "", + album_versions_title: "Otras versiones", }, Language::EsUs | Language::Es419 => Entry { timeago_tokens: ::phf::Map { @@ -2226,6 +2244,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "de", chan_suffix: "", + album_versions_title: "Otras versiones", }, Language::Et => Entry { timeago_tokens: ::phf::Map { @@ -2351,6 +2370,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "kanalilt", chan_suffix: "", + album_versions_title: "Teised versioonid", }, Language::Eu => Entry { timeago_tokens: ::phf::Map { @@ -2467,6 +2487,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "egilea:", chan_suffix: "", + album_versions_title: "Beste bertsio batzuk", }, Language::Fa => Entry { timeago_tokens: ::phf::Map { @@ -2574,6 +2595,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "توسط", chan_suffix: "", + album_versions_title: "نسخه\u{200c}های دیگر", }, Language::Fi => Entry { timeago_tokens: ::phf::Map { @@ -2693,6 +2715,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "tekijä:", chan_suffix: "", + album_versions_title: "Muut versiot", }, Language::Fil => Entry { timeago_tokens: ::phf::Map { @@ -2810,6 +2833,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "ni/ng", chan_suffix: "", + album_versions_title: "Iba pang bersyon", }, Language::Fr | Language::FrCa => Entry { timeago_tokens: ::phf::Map { @@ -2941,6 +2965,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "de", chan_suffix: "", + album_versions_title: "Autres versions", }, Language::Gl => Entry { timeago_tokens: ::phf::Map { @@ -3065,6 +3090,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "de", chan_suffix: "", + album_versions_title: "Outras versións", }, Language::Gu => Entry { timeago_tokens: ::phf::Map { @@ -3170,6 +3196,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "", chan_suffix: "દ\u{acd}વારા", + album_versions_title: "અન\u{acd}ય વર\u{acd}ઝન", }, Language::Hi => Entry { timeago_tokens: ::phf::Map { @@ -3286,6 +3313,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "", chan_suffix: "क\u{947} ज\u{93c}रिए", + album_versions_title: "अन\u{94d}य वर\u{94d}शन", }, Language::Hr => Entry { timeago_tokens: ::phf::Map { @@ -3425,6 +3453,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "omogućio kanal", chan_suffix: "", + album_versions_title: "Druge verzije", }, Language::Hu => Entry { timeago_tokens: ::phf::Map { @@ -3554,6 +3583,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "", chan_suffix: "csatornától", + album_versions_title: "Más verziók", }, Language::Hy => Entry { timeago_tokens: ::phf::Map { @@ -3676,6 +3706,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "հեղինակ՝", chan_suffix: "", + album_versions_title: "Այլ տարբերակներ", }, Language::Id => Entry { timeago_tokens: ::phf::Map { @@ -3794,6 +3825,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "oleh", chan_suffix: "", + album_versions_title: "Versi lainnya", }, Language::Is => Entry { timeago_tokens: ::phf::Map { @@ -3928,6 +3960,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "eftir", chan_suffix: "", + album_versions_title: "Aðrar útgáfur", }, Language::It => Entry { timeago_tokens: ::phf::Map { @@ -4060,6 +4093,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "di", chan_suffix: "", + album_versions_title: "Altre versioni", }, Language::Iw => Entry { timeago_tokens: ::phf::Map { @@ -4198,6 +4232,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "מאת", chan_suffix: "", + album_versions_title: "גרסאות אחרות", }, Language::Ja => Entry { timeago_tokens: ::phf::Map { @@ -4278,6 +4313,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "作成者:", chan_suffix: "", + album_versions_title: "他のバージョン", }, Language::Ka => Entry { timeago_tokens: ::phf::Map { @@ -4400,6 +4436,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "", chan_suffix: "-ის მიერ", + album_versions_title: "სხვა ვერსიები", }, Language::Kk => Entry { timeago_tokens: ::phf::Map { @@ -4523,6 +4560,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "қосқан", chan_suffix: "", + album_versions_title: "Басқа нұсқалары", }, Language::Km => Entry { timeago_tokens: ::phf::Map { @@ -4623,6 +4661,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "ដោយ", chan_suffix: "", + album_versions_title: "ប\u{17d2}រភេទផ\u{17d2}សេងៗ", }, Language::Kn => Entry { timeago_tokens: ::phf::Map { @@ -4749,6 +4788,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "", chan_suffix: "ಚಾನಲ\u{ccd}\u{200c}ನ\u{cbf}ಂದ", + album_versions_title: "ಇತರ ಆವೃತ\u{ccd}ತ\u{cbf}ಗಳು", }, Language::Ko => Entry { timeago_tokens: ::phf::Map { @@ -4832,6 +4872,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "게시자:", chan_suffix: "", + album_versions_title: "다른 버전", }, Language::Ky => Entry { timeago_tokens: ::phf::Map { @@ -4950,6 +4991,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "", chan_suffix: "каналы аркылуу", + album_versions_title: "Башка версиялар", }, Language::Lo => Entry { timeago_tokens: ::phf::Map { @@ -5076,6 +5118,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "ໂດຍ", chan_suffix: "", + album_versions_title: "ເວ\u{eb5}ຊ\u{eb1}ນອ\u{eb7}\u{ec8}ນໆ", }, Language::Lt => Entry { timeago_tokens: ::phf::Map { @@ -5210,6 +5253,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "pridėjo", chan_suffix: "", + album_versions_title: "Kitos versijos", }, Language::Lv => Entry { timeago_tokens: ::phf::Map { @@ -5344,6 +5388,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "autors:", chan_suffix: "", + album_versions_title: "Citas versijas", }, Language::Mk => Entry { timeago_tokens: ::phf::Map { @@ -5471,6 +5516,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "од", chan_suffix: "", + album_versions_title: "Други верзии", }, Language::Ml => Entry { timeago_tokens: ::phf::Map { @@ -5585,6 +5631,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "", chan_suffix: "മ\u{d41}ഖേന", + album_versions_title: "മറ\u{d4d}റ\u{d4d} പതിപ\u{d4d}പ\u{d41}കൾ", }, Language::Mn => Entry { timeago_tokens: ::phf::Map { @@ -5689,6 +5736,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "сувгийн нэр:", chan_suffix: "", + album_versions_title: "Бусад хувилбар", }, Language::Mr => Entry { timeago_tokens: ::phf::Map { @@ -5813,6 +5861,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "", chan_suffix: "द\u{94d}वार\u{947}", + album_versions_title: "इतर आव\u{943}त\u{94d}त\u{94d}या", }, Language::Ms => Entry { timeago_tokens: ::phf::Map { @@ -5926,6 +5975,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "oleh", chan_suffix: "", + album_versions_title: "Versi lain", }, Language::My => Entry { timeago_tokens: ::phf::Map { @@ -6046,6 +6096,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "", chan_suffix: "မ\u{103e}", + album_versions_title: "အခြား ဗားရ\u{103e}င\u{103a}းများ", }, Language::Ne => Entry { timeago_tokens: ::phf::Map { @@ -6149,6 +6200,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "", chan_suffix: "द\u{94d}वारा", + album_versions_title: "अन\u{94d}य स\u{902}स\u{94d}करणहर\u{942}", }, Language::Nl => Entry { timeago_tokens: ::phf::Map { @@ -6271,6 +6323,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "door", chan_suffix: "", + album_versions_title: "Andere versies", }, Language::No => Entry { timeago_tokens: ::phf::Map { @@ -6399,6 +6452,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "av", chan_suffix: "", + album_versions_title: "Andre versjoner", }, Language::Or => Entry { timeago_tokens: ::phf::Map { @@ -6514,6 +6568,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "", chan_suffix: "ଦ\u{b4d}ଵ\u{b3e}ର\u{b3e}", + album_versions_title: "ଅନ\u{b4d}ୟ ସଂସ\u{b4d}କରଣଗ\u{b41}ଡ\u{b3c}\u{b3f}କ", }, Language::Pa => Entry { timeago_tokens: ::phf::Map { @@ -6629,6 +6684,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "", chan_suffix: "ਵ\u{a71}ਲ\u{a4b}\u{a02}", + album_versions_title: "ਹ\u{a4b}ਰ ਵਰਜਨ", }, Language::Pl => Entry { timeago_tokens: ::phf::Map { @@ -6774,6 +6830,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "autor:", chan_suffix: "", + album_versions_title: "Inne wersje", }, Language::Pt => Entry { timeago_tokens: ::phf::Map { @@ -6903,6 +6960,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "por", chan_suffix: "", + album_versions_title: "Outras versões", }, Language::PtPt => Entry { timeago_tokens: ::phf::Map { @@ -7015,6 +7073,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "de", chan_suffix: "", + album_versions_title: "Outras versões", }, Language::Ro => Entry { timeago_tokens: ::phf::Map { @@ -7143,6 +7202,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "de", chan_suffix: "", + album_versions_title: "Alte versiuni", }, Language::Ru => Entry { timeago_tokens: ::phf::Map { @@ -7286,6 +7346,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "", chan_suffix: "", + album_versions_title: "Другие версии", }, Language::Si => Entry { timeago_tokens: ::phf::Map { @@ -7397,6 +7458,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "", chan_suffix: "ව\u{dd2}ස\u{dd2}න\u{dca}", + album_versions_title: "අනෙක\u{dd4}ත\u{dca} අන\u{dd4}ව\u{dcf}දයන\u{dca}", }, Language::Sk => Entry { timeago_tokens: ::phf::Map { @@ -7527,6 +7589,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "Autori:", chan_suffix: "", + album_versions_title: "Ďalšie verzie", }, Language::Sl => Entry { timeago_tokens: ::phf::Map { @@ -7676,6 +7739,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "kanal", chan_suffix: "", + album_versions_title: "Druge različice", }, Language::Sq => Entry { timeago_tokens: ::phf::Map { @@ -7796,6 +7860,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "nga", chan_suffix: "", + album_versions_title: "Versione të tjera", }, Language::Sr => Entry { timeago_tokens: ::phf::Map { @@ -7926,6 +7991,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "са канала", chan_suffix: "", + album_versions_title: "Друге верзије", }, Language::SrLatn => Entry { timeago_tokens: ::phf::Map { @@ -8056,6 +8122,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "sa kanala", chan_suffix: "", + album_versions_title: "Druge verzije", }, Language::Sv => Entry { timeago_tokens: ::phf::Map { @@ -8178,6 +8245,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "från", chan_suffix: "", + album_versions_title: "Andra versioner", }, Language::Sw => Entry { timeago_tokens: ::phf::Map { @@ -8291,6 +8359,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "kutoka", chan_suffix: "", + album_versions_title: "Matoleo mengine", }, Language::Ta => Entry { timeago_tokens: ::phf::Map { @@ -8421,6 +8490,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "வழங\u{bcd}கியவர\u{bcd}:", chan_suffix: "", + album_versions_title: "பிற பதிப\u{bcd}புகள\u{bcd}", }, Language::Te => Entry { timeago_tokens: ::phf::Map { @@ -8547,6 +8617,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "", chan_suffix: "ఛ\u{c3e}న\u{c46}ల\u{c4d} ద\u{c4d}వ\u{c3e}ర\u{c3e}", + album_versions_title: "ఇతర వ\u{c46}ర\u{c4d}షన\u{c4d}\u{200c}లు", }, Language::Th => Entry { timeago_tokens: ::phf::Map { @@ -8677,6 +8748,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "โดย", chan_suffix: "", + album_versions_title: "เวอร\u{e4c}ช\u{e31}นอ\u{e37}\u{e48}นๆ", }, Language::Tr => Entry { timeago_tokens: ::phf::Map { @@ -8797,6 +8869,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "", chan_suffix: "tarafından", + album_versions_title: "Diğer versiyonlar", }, Language::Uk => Entry { timeago_tokens: ::phf::Map { @@ -8945,6 +9018,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "власник:", chan_suffix: "", + album_versions_title: "Інші версії", }, Language::Ur => Entry { timeago_tokens: ::phf::Map { @@ -9070,6 +9144,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "منجانب", chan_suffix: "", + album_versions_title: "دیگر ورژنز", }, Language::Uz => Entry { timeago_tokens: ::phf::Map { @@ -9184,6 +9259,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "muallif:", chan_suffix: "", + album_versions_title: "Boshqa versiyalari", }, Language::Vi => Entry { timeago_tokens: ::phf::Map { @@ -9265,6 +9341,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "của", chan_suffix: "", + album_versions_title: "Các phiên bản khác", }, Language::ZhCn => Entry { timeago_tokens: ::phf::Map { @@ -9362,6 +9439,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "创建者:", chan_suffix: "", + album_versions_title: "其他版本", }, Language::ZhHk => Entry { timeago_tokens: ::phf::Map { @@ -9443,6 +9521,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "來自", chan_suffix: "", + album_versions_title: "其他版本", }, Language::ZhTw => Entry { timeago_tokens: ::phf::Map { @@ -9523,6 +9602,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "由", chan_suffix: "建立", + album_versions_title: "其他版本", }, Language::Zu => Entry { timeago_tokens: ::phf::Map { @@ -9658,6 +9738,7 @@ pub(crate) fn entry(lang: Language) -> Entry { }, chan_prefix: "ka-", chan_suffix: "", + album_versions_title: "Ezinye izinguqulo", }, } } diff --git a/src/util/mod.rs b/src/util/mod.rs index 9a49571..368d114 100644 --- a/src/util/mod.rs +++ b/src/util/mod.rs @@ -5,7 +5,7 @@ mod visitor_data; pub mod dictionary; pub mod timeago; -pub use date::{now_sec, shift_months, shift_weeks_mo, shift_years}; +pub use date::{now_sec, shift_months, shift_weeks_monday, shift_years}; pub use protobuf::{string_from_pb, ProtoBuilder}; pub use visitor_data::VisitorDataCache; @@ -21,7 +21,7 @@ use regex::Regex; use url::Url; use crate::{ - error::{AuthError, Error, ExtractionError}, + error::Error, param::{Country, Language, COUNTRIES}, serializer::text::TextComponent, }; @@ -75,10 +75,10 @@ pub fn get_cg_from_fancy_regexes(regexes: &[&str], text: &str, cg_name: &str) -> /// Generate a random string with given length and byte charset. fn random_string(charset: &[u8], length: usize) -> String { let mut result = String::with_capacity(length); - let mut rng = rand::thread_rng(); + let mut rng = rand::rng(); for _ in 0..length { - result.push(char::from(charset[rng.gen_range(0..charset.len())])); + result.push(char::from(charset[rng.random_range(0..charset.len())])); } result @@ -90,14 +90,14 @@ pub fn generate_content_playback_nonce() -> String { } pub fn random_uuid() -> String { - let mut rng = rand::thread_rng(); + let mut rng = rand::rng(); format!( "{:08x}-{:04x}-{:04x}-{:04x}-{:012x}", - rng.gen::(), - rng.gen::(), - rng.gen::(), - rng.gen::(), - rng.gen::() & 0xffff_ffff_ffff, + rng.random::(), + rng.random::(), + rng.random::(), + rng.random::(), + rng.random::() & 0xffff_ffff_ffff, ) } @@ -229,7 +229,7 @@ pub fn retry_delay( backoff_base: u32, ) -> u32 { let unjittered_delay = backoff_base.checked_pow(n_past_retries).unwrap_or(u32::MAX); - let jitter_factor = rand::thread_rng().gen_range(800..1500); + let jitter_factor = rand::rng().random_range(800..1500); let jittered_delay = unjittered_delay .checked_mul(jitter_factor) .unwrap_or(u32::MAX); @@ -581,9 +581,10 @@ where /// /// If no user is logged in, YouTube returns a "NotFound" error. This has to be corrected /// into a NoLogin error. +#[cfg(feature = "userdata")] pub fn map_internal_playlist_err(e: Error) -> Error { - if let Error::Extraction(ExtractionError::NotFound { .. }) = e { - Error::Auth(AuthError::NoLogin) + if let Error::Extraction(crate::error::ExtractionError::NotFound { .. }) = e { + Error::Auth(crate::error::AuthError::NoLogin) } else { e } diff --git a/src/util/timeago.rs b/src/util/timeago.rs index 274c653..8452415 100644 --- a/src/util/timeago.rs +++ b/src/util/timeago.rs @@ -13,7 +13,7 @@ use std::ops::Mul; use serde::{Deserialize, Serialize}; -use time::{Date, Duration, Month, OffsetDateTime}; +use time::{Date, Duration, Month, OffsetDateTime, UtcOffset}; use crate::{ param::Language, @@ -97,6 +97,26 @@ impl TimeAgo { fn secs(self) -> u32 { u32::from(self.n) * self.unit.secs() } + + fn into_datetime(self, utc_offset: UtcOffset) -> OffsetDateTime { + let ts = util::now_sec().to_offset(utc_offset); + match self.unit { + TimeUnit::Month => ts.replace_date(util::shift_months(ts.date(), -i32::from(self.n))), + TimeUnit::Year => ts.replace_date(util::shift_years(ts.date(), -i32::from(self.n))), + TimeUnit::LastWeek => { + ts.replace_date(util::shift_weeks_monday(ts.date(), -i32::from(self.n))) + } + TimeUnit::LastWeekday => ts.replace_date( + Date::from_iso_week_date( + ts.year(), + ts.iso_week(), + time::Weekday::Monday.nth_next(self.n), + ) + .unwrap(), + ), + _ => ts - Duration::from(self), + } + } } impl Mul for TimeAgo { @@ -116,33 +136,11 @@ impl From for Duration { } } -impl From for OffsetDateTime { - fn from(ta: TimeAgo) -> Self { - let ts = util::now_sec(); - match ta.unit { - TimeUnit::Month => ts.replace_date(util::shift_months(ts.date(), -i32::from(ta.n))), - TimeUnit::Year => ts.replace_date(util::shift_years(ts.date(), -i32::from(ta.n))), - TimeUnit::LastWeek => { - ts.replace_date(util::shift_weeks_mo(ts.date(), -i32::from(ta.n))) - } - TimeUnit::LastWeekday => ts.replace_date( - Date::from_iso_week_date( - ts.year(), - ts.iso_week(), - time::Weekday::Monday.nth_next(ta.n), - ) - .unwrap(), - ), - _ => ts - Duration::from(ta), - } - } -} - -impl From for OffsetDateTime { - fn from(date: ParsedDate) -> Self { - match date { - ParsedDate::Absolute(date) => date.with_hms(0, 0, 0).unwrap().assume_utc(), - ParsedDate::Relative(timeago) => timeago.into(), +impl ParsedDate { + fn into_datetime(self, utc_offset: UtcOffset) -> OffsetDateTime { + match self { + ParsedDate::Absolute(date) => date.with_hms(0, 0, 0).unwrap().assume_offset(utc_offset), + ParsedDate::Relative(timeago) => timeago.into_datetime(utc_offset), } } } @@ -247,7 +245,7 @@ pub fn parse_timeago(lang: Language, textual_date: &str) -> Option { /// /// Returns [`None`] if the date could not be parsed. pub fn parse_timeago_dt(lang: Language, textual_date: &str) -> Option { - parse_timeago(lang, textual_date).map(OffsetDateTime::from) + parse_timeago(lang, textual_date).map(|t| t.into_datetime(UtcOffset::UTC)) } pub fn parse_timeago_dt_or_warn( @@ -265,7 +263,11 @@ pub fn parse_timeago_dt_or_warn( /// Parse a textual date (e.g. "29 minutes ago" or "Jul 2, 2014") into a ParsedDate object. /// /// Returns [`None`] if the date could not be parsed. -pub fn parse_textual_date(lang: Language, textual_date: &str) -> Option { +pub fn parse_textual_date( + lang: Language, + utc_offset: UtcOffset, + textual_date: &str, +) -> Option { let entry = dictionary::entry(lang); let by_char = util::lang_by_char(lang); let filtered_str = filter_datestr(textual_date); @@ -317,8 +319,9 @@ pub fn parse_textual_date(lang: Language, textual_date: &str) -> Option Option Option { - parse_textual_date(lang, textual_date).map(OffsetDateTime::from) +pub fn parse_textual_date_to_dt( + lang: Language, + utc_offset: UtcOffset, + textual_date: &str, +) -> Option { + parse_textual_date(lang, utc_offset, textual_date).map(|t| t.into_datetime(utc_offset)) } /// Parse a textual date (e.g. "29 minutes ago" "Jul 2, 2014") into a Date object. /// /// Returns None if the date could not be parsed. +#[cfg(feature = "userdata")] pub fn parse_textual_date_to_d( lang: Language, + utc_offset: UtcOffset, textual_date: &str, warnings: &mut Vec, ) -> Option { - parse_textual_date_or_warn(lang, textual_date, warnings).map(OffsetDateTime::date) + parse_textual_date_or_warn(lang, utc_offset, textual_date, warnings) + .map(|d| d.to_offset(utc_offset).date()) } pub fn parse_textual_date_or_warn( lang: Language, + utc_offset: UtcOffset, textual_date: &str, warnings: &mut Vec, ) -> Option { - let res = parse_textual_date_to_dt(lang, textual_date); + let res = parse_textual_date_to_dt(lang, utc_offset, textual_date); if res.is_none() { warnings.push(format!("could not parse textual date `{textual_date}`")); } @@ -864,7 +875,7 @@ mod tests { for (t, entry) in entries { entry.cases.iter().for_each(|(txt, n)| { let timeago = parse_timeago(*lang, txt); - let textual_date = parse_textual_date(*lang, txt); + let textual_date = parse_textual_date(*lang, UtcOffset::UTC, txt); assert_eq!( timeago, Some(TimeAgo { n: *n, unit: *t }), @@ -906,7 +917,7 @@ mod tests { #[case] textual_date: &str, #[case] expect: Option, ) { - let parsed_date = parse_textual_date(lang, textual_date); + let parsed_date = parse_textual_date(lang, UtcOffset::UTC, textual_date); assert_eq!(parsed_date, expect); } @@ -917,7 +928,7 @@ mod tests { #[case] textual_date: &str, #[case] expect: Date, ) { - let parsed_date = parse_textual_date(lang, textual_date); + let parsed_date = parse_textual_date(lang, UtcOffset::UTC, textual_date); let expected_date = expect .replace_year(OffsetDateTime::now_utc().year()) .unwrap(); @@ -933,7 +944,7 @@ mod tests { for (lang, samples) in &date_samples { assert_eq!( - parse_textual_date(*lang, samples.get("Today").unwrap()), + parse_textual_date(*lang, UtcOffset::UTC, samples.get("Today").unwrap()), Some(ParsedDate::Relative(TimeAgo { n: 0, unit: TimeUnit::Day @@ -941,7 +952,7 @@ mod tests { "lang: {lang}" ); assert_eq!( - parse_textual_date(*lang, samples.get("Yesterday").unwrap()), + parse_textual_date(*lang, UtcOffset::UTC, samples.get("Yesterday").unwrap()), Some(ParsedDate::Relative(TimeAgo { n: 1, unit: TimeUnit::Day @@ -949,7 +960,7 @@ mod tests { "lang: {lang}" ); assert_eq!( - parse_textual_date(*lang, samples.get("Ago").unwrap()), + parse_textual_date(*lang, UtcOffset::UTC, samples.get("Ago").unwrap()), Some(ParsedDate::Relative(TimeAgo { n: 5, unit: TimeUnit::Day @@ -957,62 +968,62 @@ mod tests { "lang: {lang}" ); assert_eq!( - parse_textual_date(*lang, samples.get("Jan").unwrap()), + parse_textual_date(*lang, UtcOffset::UTC, samples.get("Jan").unwrap()), Some(ParsedDate::Absolute(date!(2020 - 1 - 3))), "lang: {lang}" ); assert_eq!( - parse_textual_date(*lang, samples.get("Feb").unwrap()), + parse_textual_date(*lang, UtcOffset::UTC, samples.get("Feb").unwrap()), Some(ParsedDate::Absolute(date!(2016 - 2 - 7))), "lang: {lang}" ); assert_eq!( - parse_textual_date(*lang, samples.get("Mar").unwrap()), + parse_textual_date(*lang, UtcOffset::UTC, samples.get("Mar").unwrap()), Some(ParsedDate::Absolute(date!(2015 - 3 - 9))), "lang: {lang}" ); assert_eq!( - parse_textual_date(*lang, samples.get("Apr").unwrap()), + parse_textual_date(*lang, UtcOffset::UTC, samples.get("Apr").unwrap()), Some(ParsedDate::Absolute(date!(2017 - 4 - 2))), "lang: {lang}" ); assert_eq!( - parse_textual_date(*lang, samples.get("May").unwrap()), + parse_textual_date(*lang, UtcOffset::UTC, samples.get("May").unwrap()), Some(ParsedDate::Absolute(date!(2014 - 5 - 22))), "lang: {lang}" ); assert_eq!( - parse_textual_date(*lang, samples.get("Jun").unwrap()), + parse_textual_date(*lang, UtcOffset::UTC, samples.get("Jun").unwrap()), Some(ParsedDate::Absolute(date!(2014 - 6 - 28))), "lang: {lang}" ); assert_eq!( - parse_textual_date(*lang, samples.get("Jul").unwrap()), + parse_textual_date(*lang, UtcOffset::UTC, samples.get("Jul").unwrap()), Some(ParsedDate::Absolute(date!(2014 - 7 - 2))), "lang: {lang}" ); assert_eq!( - parse_textual_date(*lang, samples.get("Aug").unwrap()), + parse_textual_date(*lang, UtcOffset::UTC, samples.get("Aug").unwrap()), Some(ParsedDate::Absolute(date!(2015 - 8 - 23))), "lang: {lang}" ); assert_eq!( - parse_textual_date(*lang, samples.get("Sep").unwrap()), + parse_textual_date(*lang, UtcOffset::UTC, samples.get("Sep").unwrap()), Some(ParsedDate::Absolute(date!(2018 - 9 - 16))), "lang: {lang}" ); assert_eq!( - parse_textual_date(*lang, samples.get("Oct").unwrap()), + parse_textual_date(*lang, UtcOffset::UTC, samples.get("Oct").unwrap()), Some(ParsedDate::Absolute(date!(2014 - 10 - 31))), "lang: {lang}" ); assert_eq!( - parse_textual_date(*lang, samples.get("Nov").unwrap()), + parse_textual_date(*lang, UtcOffset::UTC, samples.get("Nov").unwrap()), Some(ParsedDate::Absolute(date!(2016 - 11 - 3))), "lang: {lang}" ); assert_eq!( - parse_textual_date(*lang, samples.get("Dec").unwrap()), + parse_textual_date(*lang, UtcOffset::UTC, samples.get("Dec").unwrap()), Some(ParsedDate::Absolute(date!(2021 - 12 - 24))), "lang: {lang}" ); @@ -1058,7 +1069,7 @@ mod tests { } }; assert_eq!( - parse_textual_date(lang, &v), + parse_textual_date(lang, UtcOffset::UTC, &v), Some(expected), "lang={lang}; {k}" ); @@ -1101,11 +1112,13 @@ mod tests { #[test] fn t_to_datetime() { // Absolute date - let date = parse_textual_date_to_dt(Language::En, "Last updated on Jan 3, 2020").unwrap(); + let date = + parse_textual_date_to_dt(Language::En, UtcOffset::UTC, "Last updated on Jan 3, 2020") + .unwrap(); assert_eq!(date, datetime!(2020-1-3 0:00 +0)); // Relative date - let date = parse_textual_date_to_dt(Language::En, "1 year ago").unwrap(); + let date = parse_textual_date_to_dt(Language::En, UtcOffset::UTC, "1 year ago").unwrap(); let now = OffsetDateTime::now_utc(); assert_eq!(date.year(), now.year() - 1); } diff --git a/src/util/visitor_data.rs b/src/util/visitor_data.rs index b9a3d7b..2de2cfe 100644 --- a/src/util/visitor_data.rs +++ b/src/util/visitor_data.rs @@ -110,7 +110,7 @@ impl VisitorDataCache { /// Fetch a new visitor data ID and store it in the cache pub async fn new_visitor_data(&self) -> Result { - let vd = self.fetch_visitor_data().await.unwrap(); + let vd = self.fetch_visitor_data().await?; self.inner .req_counter @@ -148,8 +148,8 @@ impl VisitorDataCache { { let vds = self.inner.visitor_data.read().unwrap(); if !vds.is_empty() { - let mut rng = rand::thread_rng(); - let vd = vds[rng.gen_range(0..vds.len())].to_owned(); + let mut rng = rand::rng(); + let vd = vds[rng.random_range(0..vds.len())].to_owned(); tracing::debug!("visitor data {vd} picked from cache"); return Ok(vd); } @@ -181,7 +181,7 @@ impl VisitorDataCache { pub fn get_pot(&self, visitor_data: &str) -> Option { let pots = self.inner.session_potoken.read().unwrap(); if let Some(entry) = pots.get(visitor_data) { - if entry.valid_until > OffsetDateTime::now_utc() { + if entry.valid_until > OffsetDateTime::now_utc() + time::Duration::minutes(10) { return Some(entry.clone()); } } @@ -245,12 +245,21 @@ mod tests { for _ in 0..4 { cache.get().await.unwrap(); } - tokio::time::sleep(Duration::from_millis(1000)).await; + for _ in 0..3 { + tokio::time::sleep(Duration::from_millis(1000)).await; + { + let vd = cache.inner.visitor_data.read().unwrap(); + if !vd.contains(&v1) { + break; + } + } + } { let vd = cache.inner.visitor_data.read().unwrap(); assert!(!vd.contains(&v1), "first token still present"); } + assert_eq!(cache.get_pot(&v1), None); } } diff --git a/testfiles/deobf/dummy_player.js b/testfiles/deobf/dummy_player.js index 6fa8f7e..9ff4b0f 100644 --- a/testfiles/deobf/dummy_player.js +++ b/testfiles/deobf/dummy_player.js @@ -152,7 +152,7 @@ function f(){ return 0; } with(0); // n_deobf function -{p.X&&(b=a.get("n"))&&(b=aF[0](c),a.set("n",b),vZ.length||Vo(""))}; +Ab=function(){ODa(b.D.toString());Object.assign(a.j,d);a.j.file==="index.m3u8"&&(delete a.j.file,a.path+="/file/index.m3u8");a.B="";a.url="";a.D&&(b="nn"[+a.D],JL(a),c=a.j[b]||null)&&(c=aF[0](c),a.set(b,c),aF.length||Pma(""))}; switch(0){} switch(0){case 0:} switch(0){case 0:case 0:} switch(0){default:} switch(0){case 0:default:case 0:} diff --git a/testfiles/dict/dictionary.json b/testfiles/dict/dictionary.json index 8076997..2c45d58 100644 --- a/testfiles/dict/dictionary.json +++ b/testfiles/dict/dictionary.json @@ -2,6 +2,7 @@ "af": { "equivalent": [], "by_char": false, + "month_before_day": true, "timeago_tokens": { "s": "s", "sekonde": "s", @@ -80,11 +81,12 @@ }, "chan_prefix": "deur", "chan_suffix": "", - "month_before_day": true + "album_versions_title": "Ander weergawes" }, "am": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "ሰከ": "s", "ሰከንድ": "s", @@ -164,11 +166,12 @@ }, "chan_prefix": "በ", "chan_suffix": "", - "month_before_day": false + "album_versions_title": "ሌሎች ስሪቶች" }, "ar": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "ث": "s", "ثانية": "s", @@ -255,11 +258,12 @@ }, "chan_prefix": "بواسطة", "chan_suffix": "", - "month_before_day": false + "album_versions_title": "إصدارات أخرى" }, "as": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "ছেকেণ্ড": "s", "মিনিট": "m", @@ -335,11 +339,12 @@ }, "chan_prefix": "", "chan_suffix": "ৰ দ্বাৰা", - "month_before_day": false + "album_versions_title": "অন্য সংস্কৰণ" }, "az": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "san": "s", "saniyə": "s", @@ -409,11 +414,12 @@ }, "chan_prefix": "by", "chan_suffix": "", - "month_before_day": false + "album_versions_title": "Digər versiyalar" }, "be": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "с": "s", "секунд": "s", @@ -510,11 +516,12 @@ }, "chan_prefix": "ад", "chan_suffix": "", - "month_before_day": false + "album_versions_title": "Іншыя версіі" }, "bg": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "сек": "s", "секунда": "s", @@ -585,11 +592,12 @@ }, "chan_prefix": "от", "chan_suffix": "", - "month_before_day": false + "album_versions_title": "Други версии" }, "bn": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "সেকেন্ড": "s", "মিনিট": "m", @@ -660,11 +668,12 @@ }, "chan_prefix": ",", "chan_suffix": "দ্বারা", - "month_before_day": false + "album_versions_title": "অন্য সংস্করণগুলি" }, "bs": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "sek": "s", "sekunda": "s", @@ -754,11 +763,12 @@ }, "chan_prefix": "od", "chan_suffix": "", - "month_before_day": false + "album_versions_title": "Druge verzije" }, "ca": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "s": "s", "segon": "s", @@ -835,11 +845,12 @@ }, "chan_prefix": "de:", "chan_suffix": "", - "month_before_day": false + "album_versions_title": "Altres versions" }, "cs": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "s": "s", "sekund": "s", @@ -921,11 +932,12 @@ }, "chan_prefix": "autor:", "chan_suffix": "", - "month_before_day": false + "album_versions_title": "Jiné verze" }, "da": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "sek": "s", "sekund": "s", @@ -1002,11 +1014,12 @@ }, "chan_prefix": "af", "chan_suffix": "", - "month_before_day": false + "album_versions_title": "Andre versioner" }, "de": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "sek": "s", "sekunde": "s", @@ -1081,11 +1094,12 @@ }, "chan_prefix": "von", "chan_suffix": "", - "month_before_day": false + "album_versions_title": "Weitere Versionen" }, "el": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "δευτ": "s", "δευτερόλεπτα": "s", @@ -1168,11 +1182,15 @@ }, "chan_prefix": "από το χρήστη", "chan_suffix": "", - "month_before_day": false + "album_versions_title": "Άλλες εκτελέσεις" }, "en": { - "equivalent": ["en-GB", "en-IN"], + "equivalent": [ + "en-GB", + "en-IN" + ], "by_char": false, + "month_before_day": true, "timeago_tokens": { "s": "s", "sec": "s", @@ -1264,11 +1282,12 @@ }, "chan_prefix": "by", "chan_suffix": "", - "month_before_day": true + "album_versions_title": "Other versions" }, "es": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "s": "s", "segundo": "s", @@ -1348,11 +1367,14 @@ }, "chan_prefix": "de", "chan_suffix": "", - "month_before_day": false + "album_versions_title": "Otras versiones" }, "es-US": { - "equivalent": ["es-419"], + "equivalent": [ + "es-419" + ], "by_char": false, + "month_before_day": false, "timeago_tokens": { "s": "s", "segundo": "s", @@ -1433,11 +1455,12 @@ }, "chan_prefix": "de", "chan_suffix": "", - "month_before_day": false + "album_versions_title": "Otras versiones" }, "et": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "sek": "s", "sekund": "s", @@ -1516,11 +1539,12 @@ }, "chan_prefix": "kanalilt", "chan_suffix": "", - "month_before_day": false + "album_versions_title": "Teised versioonid" }, "eu": { "equivalent": [], "by_char": false, + "month_before_day": true, "timeago_tokens": { "s": "s", "segundo": "s", @@ -1591,11 +1615,12 @@ }, "chan_prefix": "egilea:", "chan_suffix": "", - "month_before_day": true + "album_versions_title": "Beste bertsio batzuk" }, "fa": { "equivalent": [], "by_char": false, + "month_before_day": true, "timeago_tokens": { "ثانیه": "s", "دقیقه": "m", @@ -1658,11 +1683,12 @@ }, "chan_prefix": "توسط", "chan_suffix": "", - "month_before_day": true + "album_versions_title": "نسخه‌های دیگر" }, "fi": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "s": "s", "sekunti": "s", @@ -1735,11 +1761,12 @@ }, "chan_prefix": "tekijä:", "chan_suffix": "", - "month_before_day": false + "album_versions_title": "Muut versiot" }, "fil": { "equivalent": [], "by_char": false, + "month_before_day": true, "timeago_tokens": { "seg": "s", "segundo": "s", @@ -1811,11 +1838,14 @@ }, "chan_prefix": "ni/ng", "chan_suffix": "", - "month_before_day": true + "album_versions_title": "Iba pang bersyon" }, "fr": { - "equivalent": ["fr-CA"], + "equivalent": [ + "fr-CA" + ], "by_char": false, + "month_before_day": false, "timeago_tokens": { "s": "s", "seconde": "s", @@ -1899,11 +1929,12 @@ }, "chan_prefix": "de", "chan_suffix": "", - "month_before_day": false + "album_versions_title": "Autres versions" }, "gl": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "s": "s", "segundo": "s", @@ -1980,11 +2011,12 @@ }, "chan_prefix": "de", "chan_suffix": "", - "month_before_day": false + "album_versions_title": "Outras versións" }, "gu": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "સેકંડ": "s", "મિનિટ": "m", @@ -2046,11 +2078,12 @@ }, "chan_prefix": "", "chan_suffix": "દ્વારા", - "month_before_day": false + "album_versions_title": "અન્ય વર્ઝન" }, "hi": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "से॰": "s", "सेकंड": "s", @@ -2121,11 +2154,12 @@ }, "chan_prefix": "", "chan_suffix": "के ज़रिए", - "month_before_day": false + "album_versions_title": "अन्य वर्शन" }, "hr": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "s": "s", "sekunda": "s", @@ -2215,11 +2249,12 @@ }, "chan_prefix": "omogućio kanal", "chan_suffix": "", - "month_before_day": false + "album_versions_title": "Druge verzije" }, "hu": { "equivalent": [], "by_char": false, + "month_before_day": true, "timeago_tokens": { "másodperc": "s", "másodperccel": "s", @@ -2301,11 +2336,12 @@ }, "chan_prefix": "", "chan_suffix": "csatornától", - "month_before_day": true + "album_versions_title": "Más verziók" }, "hy": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "վայրկյան": "s", "վրկ": "s", @@ -2381,11 +2417,12 @@ }, "chan_prefix": "հեղինակ՝", "chan_suffix": "", - "month_before_day": false + "album_versions_title": "Այլ տարբերակներ" }, "id": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "detik": "s", "dtk": "s", @@ -2458,11 +2495,12 @@ }, "chan_prefix": "oleh", "chan_suffix": "", - "month_before_day": false + "album_versions_title": "Versi lainnya" }, "is": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "sek": "s", "sekúnda": "s", @@ -2548,11 +2586,12 @@ }, "chan_prefix": "eftir", "chan_suffix": "", - "month_before_day": false + "album_versions_title": "Aðrar útgáfur" }, "it": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "s": "s", "sec": "s", @@ -2636,11 +2675,12 @@ }, "chan_prefix": "di", "chan_suffix": "", - "month_before_day": false + "album_versions_title": "Altre versioni" }, "iw": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "שנ׳": "s", "שניה": "s", @@ -2729,11 +2769,12 @@ }, "chan_prefix": "מאת", "chan_suffix": "", - "month_before_day": false + "album_versions_title": "גרסאות אחרות" }, "ja": { "equivalent": [], "by_char": true, + "month_before_day": true, "timeago_tokens": { "秒": "s", "分": "m", @@ -2773,11 +2814,12 @@ }, "chan_prefix": "作成者:", "chan_suffix": "", - "month_before_day": true + "album_versions_title": "他のバージョン" }, "ka": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "წამი": "s", "წამის": "s", @@ -2853,11 +2895,12 @@ }, "chan_prefix": "", "chan_suffix": "-ის მიერ", - "month_before_day": false + "album_versions_title": "სხვა ვერსიები" }, "kk": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "с": "s", "сек": "s", @@ -2934,11 +2977,12 @@ }, "chan_prefix": "қосқан", "chan_suffix": "", - "month_before_day": false + "album_versions_title": "Басқа нұсқалары" }, "km": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "វិនាទី": "s", "វិនាទីមុន": "s", @@ -2996,11 +3040,12 @@ }, "chan_prefix": "ដោយ", "chan_suffix": "", - "month_before_day": false + "album_versions_title": "ប្រភេទផ្សេងៗ" }, "kn": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "ಸೆಕೆಂ": "s", "ಸೆಕೆಂಡುಗಳ": "s", @@ -3079,11 +3124,12 @@ }, "chan_prefix": "", "chan_suffix": "ಚಾನಲ್‌ನಿಂದ", - "month_before_day": false + "album_versions_title": "ಇತರ ಆವೃತ್ತಿಗಳು" }, "ko": { "equivalent": [], "by_char": false, + "month_before_day": true, "timeago_tokens": { "초": "s", "분": "m", @@ -3126,11 +3172,12 @@ }, "chan_prefix": "게시자:", "chan_suffix": "", - "month_before_day": true + "album_versions_title": "다른 버전" }, "ky": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "сек": "s", "секунд": "s", @@ -3203,11 +3250,12 @@ }, "chan_prefix": "", "chan_suffix": "каналы аркылуу", - "month_before_day": false + "album_versions_title": "Башка версиялар" }, "lo": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "ວິ": "s", "ວິນາທີ": "s", @@ -3287,11 +3335,12 @@ }, "chan_prefix": "ໂດຍ", "chan_suffix": "", - "month_before_day": false + "album_versions_title": "ເວີຊັນອື່ນໆ" }, "lt": { "equivalent": [], "by_char": false, + "month_before_day": true, "timeago_tokens": { "sek": "s", "sekundė": "s", @@ -3377,11 +3426,12 @@ }, "chan_prefix": "pridėjo", "chan_suffix": "", - "month_before_day": true + "album_versions_title": "Kitos versijos" }, "lv": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "sek": "s", "sekunde": "s", @@ -3467,11 +3517,12 @@ }, "chan_prefix": "autors:", "chan_suffix": "", - "month_before_day": false + "album_versions_title": "Citas versijas" }, "mk": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "сек": "s", "секунда": "s", @@ -3551,11 +3602,12 @@ }, "chan_prefix": "од", "chan_suffix": "", - "month_before_day": false + "album_versions_title": "Други верзии" }, "ml": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "സെ": "s", "സെക്കൻഡ്": "s", @@ -3624,11 +3676,12 @@ }, "chan_prefix": "", "chan_suffix": "മുഖേന", - "month_before_day": false + "album_versions_title": "മറ്റ് പതിപ്പുകൾ" }, "mn": { "equivalent": [], "by_char": false, + "month_before_day": true, "timeago_tokens": { "сек": "s", "секунд": "s", @@ -3689,11 +3742,12 @@ }, "chan_prefix": "сувгийн нэр:", "chan_suffix": "", - "month_before_day": true + "album_versions_title": "Бусад хувилбар" }, "mr": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "से": "s", "सेकंद": "s", @@ -3772,11 +3826,12 @@ }, "chan_prefix": "", "chan_suffix": "द्वारे", - "month_before_day": false + "album_versions_title": "इतर आवृत्त्या" }, "ms": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "saat": "s", "min": "m", @@ -3844,11 +3899,12 @@ }, "chan_prefix": "oleh", "chan_suffix": "", - "month_before_day": false + "album_versions_title": "Versi lain" }, "my": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "sec": "s", "စက္ကန့်": "s", @@ -3922,11 +3978,12 @@ }, "chan_prefix": "", "chan_suffix": "မှ", - "month_before_day": false + "album_versions_title": "အခြား ဗားရှင်းများ" }, "ne": { "equivalent": [], "by_char": false, + "month_before_day": true, "timeago_tokens": { "सेकेन्ड": "s", "मिनेट": "m", @@ -3986,11 +4043,12 @@ }, "chan_prefix": "", "chan_suffix": "द्वारा", - "month_before_day": true + "album_versions_title": "अन्य संस्करणहरू" }, "nl": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "sec": "s", "seconde": "s", @@ -4066,11 +4124,12 @@ }, "chan_prefix": "door", "chan_suffix": "", - "month_before_day": false + "album_versions_title": "Andere versies" }, "no": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "sek": "s", "sekund": "s", @@ -4151,11 +4210,12 @@ }, "chan_prefix": "av", "chan_suffix": "", - "month_before_day": false + "album_versions_title": "Andre versjoner" }, "or": { "equivalent": [], "by_char": false, + "month_before_day": true, "timeago_tokens": { "ସେ": "s", "ସେକେଣ୍ଡ": "s", @@ -4225,11 +4285,12 @@ }, "chan_prefix": "", "chan_suffix": "ଦ୍ଵାରା", - "month_before_day": true + "album_versions_title": "ଅନ୍ୟ ସଂସ୍କରଣଗୁଡ଼ିକ" }, "pa": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "ਸਕਿੰਟ": "s", "ਮਿੰਟ": "m", @@ -4299,11 +4360,12 @@ }, "chan_prefix": "", "chan_suffix": "ਵੱਲੋਂ", - "month_before_day": false + "album_versions_title": "ਹੋਰ ਵਰਜਨ" }, "pl": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "sek": "s", "sekund": "s", @@ -4398,11 +4460,12 @@ }, "chan_prefix": "autor:", "chan_suffix": "", - "month_before_day": false + "album_versions_title": "Inne wersje" }, "pt": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "s": "s", "seg": "s", @@ -4484,11 +4547,12 @@ }, "chan_prefix": "por", "chan_suffix": "", - "month_before_day": false + "album_versions_title": "Outras versões" }, "pt-PT": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "s": "s", "segundo": "s", @@ -4555,11 +4619,12 @@ }, "chan_prefix": "de", "chan_suffix": "", - "month_before_day": false + "album_versions_title": "Outras versões" }, "ro": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "s": "s", "sec": "s", @@ -4640,11 +4705,12 @@ }, "chan_prefix": "de", "chan_suffix": "", - "month_before_day": false + "album_versions_title": "Alte versiuni" }, "ru": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "с": "s", "сек": "s", @@ -4737,11 +4803,12 @@ }, "chan_prefix": "", "chan_suffix": "", - "month_before_day": false + "album_versions_title": "Другие версии" }, "si": { "equivalent": [], "by_char": false, + "month_before_day": true, "timeago_tokens": { "තත්": "s", "තත්පර": "s", @@ -4808,11 +4875,12 @@ }, "chan_prefix": "", "chan_suffix": "විසින්", - "month_before_day": true + "album_versions_title": "අනෙකුත් අනුවාදයන්" }, "sk": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "s": "s", "sekúnd": "s", @@ -4894,11 +4962,12 @@ }, "chan_prefix": "Autori:", "chan_suffix": "", - "month_before_day": false + "album_versions_title": "Ďalšie verzie" }, "sl": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "s": "s", "sek": "s", @@ -4996,11 +5065,12 @@ }, "chan_prefix": "kanal", "chan_suffix": "", - "month_before_day": false + "album_versions_title": "Druge različice" }, "sq": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "sek": "s", "sekonda": "s", @@ -5074,11 +5144,12 @@ }, "chan_prefix": "nga", "chan_suffix": "", - "month_before_day": false + "album_versions_title": "Versione të tjera" }, "sr": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "сек": "s", "секунда": "s", @@ -5160,11 +5231,12 @@ }, "chan_prefix": "са канала", "chan_suffix": "", - "month_before_day": false + "album_versions_title": "Друге верзије" }, "sr-Latn": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "sek": "s", "sekunda": "s", @@ -5246,11 +5318,12 @@ }, "chan_prefix": "sa kanala", "chan_suffix": "", - "month_before_day": false + "album_versions_title": "Druge verzije" }, "sv": { "equivalent": [], "by_char": false, + "month_before_day": true, "timeago_tokens": { "s": "s", "sekund": "s", @@ -5326,11 +5399,12 @@ }, "chan_prefix": "från", "chan_suffix": "", - "month_before_day": true + "album_versions_title": "Andra versioner" }, "sw": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "sekunde": "s", "dakika": "m", @@ -5399,11 +5473,12 @@ }, "chan_prefix": "kutoka", "chan_suffix": "", - "month_before_day": false + "album_versions_title": "Matoleo mengine" }, "ta": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "விநா": "s", "விநாடி": "s", @@ -5485,11 +5560,12 @@ }, "chan_prefix": "வழங்கியவர்:", "chan_suffix": "", - "month_before_day": false + "album_versions_title": "பிற பதிப்புகள்" }, "te": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "సెక": "s", "సెకను": "s", @@ -5569,11 +5645,12 @@ }, "chan_prefix": "", "chan_suffix": "ఛానెల్ ద్వారా", - "month_before_day": false + "album_versions_title": "ఇతర వెర్షన్‌లు" }, "th": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "วิ": "s", "วินาที": "s", @@ -5656,11 +5733,12 @@ }, "chan_prefix": "โดย", "chan_suffix": "", - "month_before_day": false + "album_versions_title": "เวอร์ชันอื่นๆ" }, "tr": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "saniye": "s", "sn": "s", @@ -5734,11 +5812,12 @@ }, "chan_prefix": "", "chan_suffix": "tarafından", - "month_before_day": false + "album_versions_title": "Diğer versiyonlar" }, "uk": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "с": "s", "секунд": "s", @@ -5836,11 +5915,12 @@ }, "chan_prefix": "власник:", "chan_suffix": "", - "month_before_day": false + "album_versions_title": "Інші версії" }, "ur": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "سیکنڈ": "s", "سیکنڈز": "s", @@ -5919,11 +5999,12 @@ }, "chan_prefix": "منجانب", "chan_suffix": "", - "month_before_day": false + "album_versions_title": "دیگر ورژنز" }, "uz": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "son": "s", "soniya": "s", @@ -5992,11 +6073,12 @@ }, "chan_prefix": "muallif:", "chan_suffix": "", - "month_before_day": false + "album_versions_title": "Boshqa versiyalari" }, "vi": { "equivalent": [], "by_char": false, + "month_before_day": false, "timeago_tokens": { "giây": "s", "phút": "m", @@ -6037,11 +6119,12 @@ }, "chan_prefix": "của", "chan_suffix": "", - "month_before_day": false + "album_versions_title": "Các phiên bản khác" }, "zh-CN": { "equivalent": [], "by_char": true, + "month_before_day": true, "timeago_tokens": { "秒": "s", "分": "m", @@ -6096,11 +6179,12 @@ }, "chan_prefix": "创建者:", "chan_suffix": "", - "month_before_day": true + "album_versions_title": "其他版本" }, "zh-HK": { "equivalent": [], "by_char": true, + "month_before_day": true, "timeago_tokens": { "秒": "s", "分": "m", @@ -6141,11 +6225,12 @@ }, "chan_prefix": "來自", "chan_suffix": "", - "month_before_day": true + "album_versions_title": "其他版本" }, "zh-TW": { "equivalent": [], "by_char": true, + "month_before_day": true, "timeago_tokens": { "秒": "s", "分": "m", @@ -6185,11 +6270,12 @@ }, "chan_prefix": "由", "chan_suffix": "建立", - "month_before_day": true + "album_versions_title": "其他版本" }, "zu": { "equivalent": [], "by_char": false, + "month_before_day": true, "timeago_tokens": { "amasekhondi": "s", "isekhondi": "s", @@ -6276,6 +6362,6 @@ }, "chan_prefix": "ka-", "chan_suffix": "", - "month_before_day": true + "album_versions_title": "Ezinye izinguqulo" } } diff --git a/testfiles/dict/other_versions_titles.json b/testfiles/dict/other_versions_titles.json new file mode 100644 index 0000000..0b8cb7a --- /dev/null +++ b/testfiles/dict/other_versions_titles.json @@ -0,0 +1,85 @@ +{ + "af": "Ander weergawes", + "am": "ሌሎች ስሪቶች", + "ar": "إصدارات أخرى", + "as": "অন্য সংস্কৰণ", + "az": "Digər versiyalar", + "be": "Іншыя версіі", + "bg": "Други версии", + "bn": "অন্য সংস্করণগুলি", + "bs": "Druge verzije", + "ca": "Altres versions", + "cs": "Jiné verze", + "da": "Andre versioner", + "de": "Weitere Versionen", + "el": "Άλλες εκτελέσεις", + "en": "Other versions", + "en-GB": "Other versions", + "en-IN": "Other versions", + "es": "Otras versiones", + "es-419": "Otras versiones", + "es-US": "Otras versiones", + "et": "Teised versioonid", + "eu": "Beste bertsio batzuk", + "fa": "نسخه‌های دیگر", + "fi": "Muut versiot", + "fil": "Iba pang bersyon", + "fr": "Autres versions", + "fr-CA": "Autres versions", + "gl": "Outras versións", + "gu": "અન્ય વર્ઝન", + "hi": "अन्य वर्शन", + "hr": "Druge verzije", + "hu": "Más verziók", + "hy": "Այլ տարբերակներ", + "id": "Versi lainnya", + "is": "Aðrar útgáfur", + "it": "Altre versioni", + "iw": "גרסאות אחרות", + "ja": "他のバージョン", + "ka": "სხვა ვერსიები", + "kk": "Басқа нұсқалары", + "km": "ប្រភេទផ្សេងៗ", + "kn": "ಇತರ ಆವೃತ್ತಿಗಳು", + "ko": "다른 버전", + "ky": "Башка версиялар", + "lo": "ເວີຊັນອື່ນໆ", + "lt": "Kitos versijos", + "lv": "Citas versijas", + "mk": "Други верзии", + "ml": "മറ്റ് പതിപ്പുകൾ", + "mn": "Бусад хувилбар", + "mr": "इतर आवृत्त्या", + "ms": "Versi lain", + "my": "အခြား ဗားရှင်းများ", + "ne": "अन्य संस्करणहरू", + "nl": "Andere versies", + "no": "Andre versjoner", + "or": "ଅନ୍ୟ ସଂସ୍କରଣଗୁଡ଼ିକ", + "pa": "ਹੋਰ ਵਰਜਨ", + "pl": "Inne wersje", + "pt": "Outras versões", + "pt-PT": "Outras versões", + "ro": "Alte versiuni", + "ru": "Другие версии", + "si": "අනෙකුත් අනුවාදයන්", + "sk": "Ďalšie verzie", + "sl": "Druge različice", + "sq": "Versione të tjera", + "sr": "Друге верзије", + "sr-Latn": "Druge verzije", + "sv": "Andra versioner", + "sw": "Matoleo mengine", + "ta": "பிற பதிப்புகள்", + "te": "ఇతర వెర్షన్‌లు", + "th": "เวอร์ชันอื่นๆ", + "tr": "Diğer versiyonlar", + "uk": "Інші версії", + "ur": "دیگر ورژنز", + "uz": "Boshqa versiyalari", + "vi": "Các phiên bản khác", + "zh-CN": "其他版本", + "zh-HK": "其他版本", + "zh-TW": "其他版本", + "zu": "Ezinye izinguqulo" +} diff --git a/testfiles/music_playlist/album_20250225_recommends.json b/testfiles/music_playlist/album_20250225_recommends.json new file mode 100644 index 0000000..2c4aa3e --- /dev/null +++ b/testfiles/music_playlist/album_20250225_recommends.json @@ -0,0 +1,7989 @@ +{ + "responseContext": { + "serviceTrackingParams": [ + { + "service": "GFEEDBACK", + "params": [ + { + "key": "has_unlimited_entitlement", + "value": "False" + }, + { + "key": "browse_id", + "value": "MPREb_u1I69lSAe5v" + }, + { + "key": "browse_id_prefix", + "value": "" + }, + { + "key": "logged_in", + "value": "0" + }, + { + "key": "e", + "value": "23804281,24004644,24077241,24181174,24241378,24290153,24439361,24566687,51010235,51020570,51025415,51037342,51037351,51063643,51065188,51089007,51098299,51115184,51124104,51152050,51176511,51178314,51178327,51178344,51178351,51183910,51204329,51217504,51222973,51225393,51227037,51228850,51232229,51237842,51242448,51249749,51256074,51256084,51274583,51285717,51298020,51304728,51306543,51310742,51311031,51311034,51313109,51313767,51316846,51320245,51326932,51330475,51331481,51331500,51331522,51331533,51331538,51331549,51331552,51331561,51333541,51335365,51335644,51340662,51341226,51341975,51342753,51342857,51348081,51349880,51349914,51351446,51353393,51354114,51354567,51355199,51355264,51355273,51355291,51355303,51355312,51355333,51355342,51359177,51360108,51360117,51360136,51361828,51362073,51362643,51362857,51363727,51363732,51363745,51363750,51363763,51363774,51364291,51365459,51365462,51366423,51366864,51367487,51370011,51370997,51371008,51371521,51372971,51373467,51375168,51375205,51375519,51375719,51379054,51379274,51380314,51380376,51380385,51380396,51380761,51380766,51380785,51380794,51380801,51380810,51380829,51380894,51381276,51383376,51384305,51384837,51385023,51386141,51386159,51386361,51386500,51386540,51386566,51389629,51389867,51391268,51391338,51393164,51394774,51394779,51395650,51397282,51398027,51398173,51398682,51399059,51399886,51401441,51401648,51401658,51402072,51403027,51403121,51404808,51404810,51405776,51405958,51406710,51407100,51407509,51407629,51408108,51409009,51410170,51411030,51411582,51412099,51412629,51413046,51413051,51413058,51413069,51413074,51413079,51413086,51413541,51414152,51414983,51416286,51417460,51417471,51417486,51417489,51417512,51417519" + } + ] + }, + { + "service": "CSI", + "params": [ + { + "key": "c", + "value": "WEB_REMIX" + }, + { + "key": "cver", + "value": "1.20250219.01.00" + }, + { + "key": "yt_li", + "value": "0" + }, + { + "key": "GetBrowseAlbumDetailPage_rid", + "value": "0x8d29dc85f9773d1d" + } + ] + }, + { + "service": "ECATCHER", + "params": [ + { + "key": "client.version", + "value": "1.20000101" + }, + { + "key": "client.name", + "value": "WEB_REMIX" + } + ] + } + ] + }, + "contents": { + "twoColumnBrowseResultsRenderer": { + "secondaryContents": { + "sectionListRenderer": { + "contents": [ + { + "musicShelfRenderer": { + "contents": [ + { + "musicResponsiveListItemRenderer": { + "trackingParams": "CPgBEMn0AhgAIhMIoLiH797fiwMVJx8GAB0XoCBI", + "overlay": { + "musicItemThumbnailOverlayRenderer": { + "background": { + "verticalGradient": { + "gradientLayerColors": [ + "0", + "0" + ] + } + }, + "content": { + "musicPlayButtonRenderer": { + "playNavigationEndpoint": { + "clickTrackingParams": "CIcCEMjeAiITCKC4h-_e34sDFScfBgAdF6AgSA==", + "watchEndpoint": { + "videoId": "aGd3VKSOTxY", + "playlistId": "OLAK5uy_lGP_zv0vJDUlecQDzugUJmjcF7pvyVNyY", + "index": 0, + "playerParams": "ygYQNzFDMjBDOUI2MDBCMjVDNA%3D%3D", + "playlistSetVideoId": "71C20C9B600B25C4", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GilPTEFLNXV5X2xHUF96djB2SkRVbGVjUUR6dWdVSm1qY0Y3cHZ5Vk55WQ%3D%3D" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CIcCEMjeAiITCKC4h-_e34sDFScfBgAdF6AgSA==", + "playIcon": { + "iconType": "PLAY_ARROW" + }, + "pauseIcon": { + "iconType": "PAUSE" + }, + "iconColor": 4294967295, + "backgroundColor": 0, + "activeBackgroundColor": 0, + "loadingIndicatorColor": 14745645, + "playingIcon": { + "iconType": "VOLUME_UP" + }, + "iconLoadingColor": 0, + "activeScaleFactor": 1, + "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_SMALL", + "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF", + "accessibilityPlayData": { + "accessibilityData": { + "label": "Play Ich wache auf - Madeline Juno" + } + }, + "accessibilityPauseData": { + "accessibilityData": { + "label": "Pause Ich wache auf - Madeline Juno" + } + } + } + }, + "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_CENTERED", + "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_PERSISTENT" + } + }, + "flexColumns": [ + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "Ich wache auf", + "navigationEndpoint": { + "clickTrackingParams": "CPgBEMn0AhgAIhMIoLiH797fiwMVJx8GAB0XoCBI", + "watchEndpoint": { + "videoId": "aGd3VKSOTxY", + "playlistId": "OLAK5uy_lGP_zv0vJDUlecQDzugUJmjcF7pvyVNyY", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GilPTEFLNXV5X2xHUF96djB2SkRVbGVjUUR6dWdVSm1qY0Y3cHZ5Vk55WQ%3D%3D" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": {}, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "208K plays" + } + ], + "accessibility": { + "accessibilityData": { + "label": "208K plays" + } + } + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + } + ], + "fixedColumns": [ + { + "musicResponsiveListItemFixedColumnRenderer": { + "text": { + "runs": [ + { + "text": "3:42" + } + ], + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 42 seconds" + } + } + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH", + "size": "MUSIC_RESPONSIVE_LIST_ITEM_FIXED_COLUMN_SIZE_SMALL" + } + } + ], + "menu": { + "menuRenderer": { + "items": [ + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Start radio" + } + ] + }, + "icon": { + "iconType": "MIX" + }, + "navigationEndpoint": { + "clickTrackingParams": "CIYCEJvzBRgAIhMIoLiH797fiwMVJx8GAB0XoCBI", + "watchEndpoint": { + "videoId": "aGd3VKSOTxY", + "playlistId": "RDAMVMaGd3VKSOTxY", + "params": "wAEB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GhFSREFNVk1hR2QzVktTT1R4WQ%3D%3D" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CIYCEJvzBRgAIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Play next" + } + ] + }, + "icon": { + "iconType": "QUEUE_PLAY_NEXT" + }, + "serviceEndpoint": { + "clickTrackingParams": "CIQCEL7uBRgBIhMIoLiH797fiwMVJx8GAB0XoCBI", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "aGd3VKSOTxY", + "onEmptyQueue": { + "clickTrackingParams": "CIQCEL7uBRgBIhMIoLiH797fiwMVJx8GAB0XoCBI", + "watchEndpoint": { + "videoId": "aGd3VKSOTxY" + } + } + }, + "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO", + "commands": [ + { + "clickTrackingParams": "CIQCEL7uBRgBIhMIoLiH797fiwMVJx8GAB0XoCBI", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song will play next" + } + ] + }, + "trackingParams": "CIUCEMrHAyITCKC4h-_e34sDFScfBgAdF6AgSA==" + } + } + } + } + ] + } + }, + "trackingParams": "CIQCEL7uBRgBIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_REMOTE_QUEUE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CIICEPvvBRgCIhMIoLiH797fiwMVJx8GAB0XoCBI", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "aGd3VKSOTxY", + "onEmptyQueue": { + "clickTrackingParams": "CIICEPvvBRgCIhMIoLiH797fiwMVJx8GAB0XoCBI", + "watchEndpoint": { + "videoId": "aGd3VKSOTxY" + } + } + }, + "queueInsertPosition": "INSERT_AT_END", + "commands": [ + { + "clickTrackingParams": "CIICEPvvBRgCIhMIoLiH797fiwMVJx8GAB0XoCBI", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song added to queue" + } + ] + }, + "trackingParams": "CIMCEMrHAyITCKC4h-_e34sDFScfBgAdF6AgSA==" + } + } + } + } + ] + } + }, + "trackingParams": "CIICEPvvBRgCIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Save to playlist" + } + ] + }, + "icon": { + "iconType": "ADD_TO_PLAYLIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CIACEMOUBhgDIhMIoLiH797fiwMVJx8GAB0XoCBI", + "modalEndpoint": { + "modal": { + "modalWithTitleAndButtonRenderer": { + "title": { + "runs": [ + { + "text": "Save this for later" + } + ] + }, + "content": { + "runs": [ + { + "text": "Make playlists and share them after signing in" + } + ] + }, + "button": { + "buttonRenderer": { + "style": "STYLE_BLUE_TEXT", + "isDisabled": false, + "text": { + "runs": [ + { + "text": "Sign in" + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CIECEPBbIhMIoLiH797fiwMVJx8GAB0XoCBI", + "signInEndpoint": { + "hack": true + } + }, + "trackingParams": "CIECEPBbIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + } + } + } + } + }, + "trackingParams": "CIACEMOUBhgDIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to artist" + } + ] + }, + "icon": { + "iconType": "ARTIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CP8BEJD7BRgEIhMIoLiH797fiwMVJx8GAB0XoCBI", + "browseEndpoint": { + "browseId": "UCpJyCbFbdTrx0M90HCNBHFQ", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + }, + "trackingParams": "CP8BEJD7BRgEIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CP4BEJH7BRgFIhMIoLiH797fiwMVJx8GAB0XoCBI", + "shareEntityEndpoint": { + "serializedShareEntity": "CgthR2QzVktTT1R4WQ%3D%3D", + "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL" + } + }, + "trackingParams": "CP4BEJH7BRgFIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + } + ], + "trackingParams": "CPoBEKc7IhMIoLiH797fiwMVJx8GAB0XoCBI", + "topLevelButtons": [ + { + "likeButtonRenderer": { + "target": { + "videoId": "aGd3VKSOTxY" + }, + "likeStatus": "INDIFFERENT", + "trackingParams": "CPsBEKVBGAYiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "likesAllowed": true, + "dislikeNavigationEndpoint": { + "clickTrackingParams": "CPsBEKVBGAYiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "modalEndpoint": { + "modal": { + "modalWithTitleAndButtonRenderer": { + "title": { + "runs": [ + { + "text": "Not a fan?" + } + ] + }, + "content": { + "runs": [ + { + "text": "Improve your recommendations after signing in" + } + ] + }, + "button": { + "buttonRenderer": { + "style": "STYLE_BLUE_TEXT", + "isDisabled": false, + "text": { + "runs": [ + { + "text": "Sign in" + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CP0BEPBbIhMIoLiH797fiwMVJx8GAB0XoCBI", + "signInEndpoint": { + "hack": true + } + }, + "trackingParams": "CP0BEPBbIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + } + } + } + } + }, + "likeCommand": { + "clickTrackingParams": "CPsBEKVBGAYiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "modalEndpoint": { + "modal": { + "modalWithTitleAndButtonRenderer": { + "title": { + "runs": [ + { + "text": "Like this song" + } + ] + }, + "content": { + "runs": [ + { + "text": "Improve recommendations and save music after signing in" + } + ] + }, + "button": { + "buttonRenderer": { + "style": "STYLE_BLUE_TEXT", + "isDisabled": false, + "text": { + "runs": [ + { + "text": "Sign in" + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CPwBEPBbIhMIoLiH797fiwMVJx8GAB0XoCBI", + "signInEndpoint": { + "hack": true + } + }, + "trackingParams": "CPwBEPBbIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + } + } + } + } + } + } + } + ], + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "playlistItemData": { + "playlistSetVideoId": "71C20C9B600B25C4", + "videoId": "aGd3VKSOTxY" + }, + "itemHeight": "MUSIC_RESPONSIVE_LIST_ITEM_HEIGHT_MEDIUM", + "index": { + "runs": [ + { + "text": "1" + } + ] + }, + "multiSelectCheckbox": { + "checkboxRenderer": { + "onSelectionChangeCommand": { + "clickTrackingParams": "CPkBEL6-CSITCKC4h-_e34sDFScfBgAdF6AgSA==", + "updateMultiSelectStateCommand": { + "multiSelectParams": "CAMSKU9MQUs1dXlfbEdQX3p2MHZKRFVsZWNRRHp1Z1VKbWpjRjdwdnlWTnlZ", + "multiSelectItem": "Ch8KC2FHZDNWS1NPVHhZEhA3MUMyMEM5QjYwMEIyNUM0" + } + }, + "checkedState": "CHECKBOX_CHECKED_STATE_UNCHECKED", + "trackingParams": "CPkBEL6-CSITCKC4h-_e34sDFScfBgAdF6AgSA==" + } + } + } + }, + { + "musicResponsiveListItemRenderer": { + "trackingParams": "COgBEMn0AhgBIhMIoLiH797fiwMVJx8GAB0XoCBI", + "overlay": { + "musicItemThumbnailOverlayRenderer": { + "background": { + "verticalGradient": { + "gradientLayerColors": [ + "0", + "0" + ] + } + }, + "content": { + "musicPlayButtonRenderer": { + "playNavigationEndpoint": { + "clickTrackingParams": "CPcBEMjeAiITCKC4h-_e34sDFScfBgAdF6AgSA==", + "watchEndpoint": { + "videoId": "lhPOMUjV4rE", + "playlistId": "OLAK5uy_lGP_zv0vJDUlecQDzugUJmjcF7pvyVNyY", + "index": 1, + "playerParams": "ygYQM0VGRTUxOTQxNjVEM0IxMw%3D%3D", + "playlistSetVideoId": "3EFE5194165D3B13", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GilPTEFLNXV5X2xHUF96djB2SkRVbGVjUUR6dWdVSm1qY0Y3cHZ5Vk55WQ%3D%3D" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_OMV" + } + } + } + }, + "trackingParams": "CPcBEMjeAiITCKC4h-_e34sDFScfBgAdF6AgSA==", + "playIcon": { + "iconType": "PLAY_ARROW" + }, + "pauseIcon": { + "iconType": "PAUSE" + }, + "iconColor": 4294967295, + "backgroundColor": 0, + "activeBackgroundColor": 0, + "loadingIndicatorColor": 14745645, + "playingIcon": { + "iconType": "VOLUME_UP" + }, + "iconLoadingColor": 0, + "activeScaleFactor": 1, + "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_SMALL", + "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF", + "accessibilityPlayData": { + "accessibilityData": { + "label": "Play Waldbrand - Madeline Juno" + } + }, + "accessibilityPauseData": { + "accessibilityData": { + "label": "Pause Waldbrand - Madeline Juno" + } + } + } + }, + "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_CENTERED", + "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_PERSISTENT" + } + }, + "flexColumns": [ + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "Waldbrand", + "navigationEndpoint": { + "clickTrackingParams": "COgBEMn0AhgBIhMIoLiH797fiwMVJx8GAB0XoCBI", + "watchEndpoint": { + "videoId": "lhPOMUjV4rE", + "playlistId": "OLAK5uy_lGP_zv0vJDUlecQDzugUJmjcF7pvyVNyY", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GilPTEFLNXV5X2xHUF96djB2SkRVbGVjUUR6dWdVSm1qY0Y3cHZ5Vk55WQ%3D%3D" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_OMV" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": {}, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "6M plays" + } + ], + "accessibility": { + "accessibilityData": { + "label": "6 million plays" + } + } + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + } + ], + "fixedColumns": [ + { + "musicResponsiveListItemFixedColumnRenderer": { + "text": { + "runs": [ + { + "text": "3:29" + } + ], + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 29 seconds" + } + } + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH", + "size": "MUSIC_RESPONSIVE_LIST_ITEM_FIXED_COLUMN_SIZE_SMALL" + } + } + ], + "menu": { + "menuRenderer": { + "items": [ + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Start radio" + } + ] + }, + "icon": { + "iconType": "MIX" + }, + "navigationEndpoint": { + "clickTrackingParams": "CPYBEJvzBRgAIhMIoLiH797fiwMVJx8GAB0XoCBI", + "watchEndpoint": { + "videoId": "lhPOMUjV4rE", + "playlistId": "RDAMVMlhPOMUjV4rE", + "params": "wAEB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GhFSREFNVk1saFBPTVVqVjRyRQ%3D%3D" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_OMV" + } + } + } + }, + "trackingParams": "CPYBEJvzBRgAIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Play next" + } + ] + }, + "icon": { + "iconType": "QUEUE_PLAY_NEXT" + }, + "serviceEndpoint": { + "clickTrackingParams": "CPQBEL7uBRgBIhMIoLiH797fiwMVJx8GAB0XoCBI", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "lhPOMUjV4rE", + "onEmptyQueue": { + "clickTrackingParams": "CPQBEL7uBRgBIhMIoLiH797fiwMVJx8GAB0XoCBI", + "watchEndpoint": { + "videoId": "lhPOMUjV4rE" + } + } + }, + "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO", + "commands": [ + { + "clickTrackingParams": "CPQBEL7uBRgBIhMIoLiH797fiwMVJx8GAB0XoCBI", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song will play next" + } + ] + }, + "trackingParams": "CPUBEMrHAyITCKC4h-_e34sDFScfBgAdF6AgSA==" + } + } + } + } + ] + } + }, + "trackingParams": "CPQBEL7uBRgBIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_REMOTE_QUEUE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CPIBEPvvBRgCIhMIoLiH797fiwMVJx8GAB0XoCBI", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "lhPOMUjV4rE", + "onEmptyQueue": { + "clickTrackingParams": "CPIBEPvvBRgCIhMIoLiH797fiwMVJx8GAB0XoCBI", + "watchEndpoint": { + "videoId": "lhPOMUjV4rE" + } + } + }, + "queueInsertPosition": "INSERT_AT_END", + "commands": [ + { + "clickTrackingParams": "CPIBEPvvBRgCIhMIoLiH797fiwMVJx8GAB0XoCBI", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song added to queue" + } + ] + }, + "trackingParams": "CPMBEMrHAyITCKC4h-_e34sDFScfBgAdF6AgSA==" + } + } + } + } + ] + } + }, + "trackingParams": "CPIBEPvvBRgCIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Save to playlist" + } + ] + }, + "icon": { + "iconType": "ADD_TO_PLAYLIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CPABEMOUBhgDIhMIoLiH797fiwMVJx8GAB0XoCBI", + "modalEndpoint": { + "modal": { + "modalWithTitleAndButtonRenderer": { + "title": { + "runs": [ + { + "text": "Save this for later" + } + ] + }, + "content": { + "runs": [ + { + "text": "Make playlists and share them after signing in" + } + ] + }, + "button": { + "buttonRenderer": { + "style": "STYLE_BLUE_TEXT", + "isDisabled": false, + "text": { + "runs": [ + { + "text": "Sign in" + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CPEBEPBbIhMIoLiH797fiwMVJx8GAB0XoCBI", + "signInEndpoint": { + "hack": true + } + }, + "trackingParams": "CPEBEPBbIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + } + } + } + } + }, + "trackingParams": "CPABEMOUBhgDIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to artist" + } + ] + }, + "icon": { + "iconType": "ARTIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CO8BEJD7BRgEIhMIoLiH797fiwMVJx8GAB0XoCBI", + "browseEndpoint": { + "browseId": "UCpJyCbFbdTrx0M90HCNBHFQ", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + }, + "trackingParams": "CO8BEJD7BRgEIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CO4BEJH7BRgFIhMIoLiH797fiwMVJx8GAB0XoCBI", + "shareEntityEndpoint": { + "serializedShareEntity": "CgtsaFBPTVVqVjRyRQ%3D%3D", + "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL" + } + }, + "trackingParams": "CO4BEJH7BRgFIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + } + ], + "trackingParams": "COoBEKc7IhMIoLiH797fiwMVJx8GAB0XoCBI", + "topLevelButtons": [ + { + "likeButtonRenderer": { + "target": { + "videoId": "lhPOMUjV4rE" + }, + "likeStatus": "INDIFFERENT", + "trackingParams": "COsBEKVBGAYiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "likesAllowed": true, + "dislikeNavigationEndpoint": { + "clickTrackingParams": "COsBEKVBGAYiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "modalEndpoint": { + "modal": { + "modalWithTitleAndButtonRenderer": { + "title": { + "runs": [ + { + "text": "Not a fan?" + } + ] + }, + "content": { + "runs": [ + { + "text": "Improve your recommendations after signing in" + } + ] + }, + "button": { + "buttonRenderer": { + "style": "STYLE_BLUE_TEXT", + "isDisabled": false, + "text": { + "runs": [ + { + "text": "Sign in" + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CO0BEPBbIhMIoLiH797fiwMVJx8GAB0XoCBI", + "signInEndpoint": { + "hack": true + } + }, + "trackingParams": "CO0BEPBbIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + } + } + } + } + }, + "likeCommand": { + "clickTrackingParams": "COsBEKVBGAYiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "modalEndpoint": { + "modal": { + "modalWithTitleAndButtonRenderer": { + "title": { + "runs": [ + { + "text": "Like this song" + } + ] + }, + "content": { + "runs": [ + { + "text": "Improve recommendations and save music after signing in" + } + ] + }, + "button": { + "buttonRenderer": { + "style": "STYLE_BLUE_TEXT", + "isDisabled": false, + "text": { + "runs": [ + { + "text": "Sign in" + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "COwBEPBbIhMIoLiH797fiwMVJx8GAB0XoCBI", + "signInEndpoint": { + "hack": true + } + }, + "trackingParams": "COwBEPBbIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + } + } + } + } + } + } + } + ], + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "playlistItemData": { + "playlistSetVideoId": "3EFE5194165D3B13", + "videoId": "lhPOMUjV4rE" + }, + "itemHeight": "MUSIC_RESPONSIVE_LIST_ITEM_HEIGHT_MEDIUM", + "index": { + "runs": [ + { + "text": "2" + } + ] + }, + "multiSelectCheckbox": { + "checkboxRenderer": { + "onSelectionChangeCommand": { + "clickTrackingParams": "COkBEL6-CSITCKC4h-_e34sDFScfBgAdF6AgSA==", + "updateMultiSelectStateCommand": { + "multiSelectParams": "CAMSKU9MQUs1dXlfbEdQX3p2MHZKRFVsZWNRRHp1Z1VKbWpjRjdwdnlWTnlZ", + "multiSelectItem": "Ch8KC2xoUE9NVWpWNHJFEhAzRUZFNTE5NDE2NUQzQjEz" + } + }, + "checkedState": "CHECKBOX_CHECKED_STATE_UNCHECKED", + "trackingParams": "COkBEL6-CSITCKC4h-_e34sDFScfBgAdF6AgSA==" + } + } + } + }, + { + "musicResponsiveListItemRenderer": { + "trackingParams": "CNgBEMn0AhgCIhMIoLiH797fiwMVJx8GAB0XoCBI", + "overlay": { + "musicItemThumbnailOverlayRenderer": { + "background": { + "verticalGradient": { + "gradientLayerColors": [ + "0", + "0" + ] + } + }, + "content": { + "musicPlayButtonRenderer": { + "playNavigationEndpoint": { + "clickTrackingParams": "COcBEMjeAiITCKC4h-_e34sDFScfBgAdF6AgSA==", + "watchEndpoint": { + "videoId": "Bu26uFtpt58", + "playlistId": "OLAK5uy_lGP_zv0vJDUlecQDzugUJmjcF7pvyVNyY", + "index": 2, + "playerParams": "ygYQRTk4NDA0RTNCRDhDQzcxOA%3D%3D", + "playlistSetVideoId": "E98404E3BD8CC718", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GilPTEFLNXV5X2xHUF96djB2SkRVbGVjUUR6dWdVSm1qY0Y3cHZ5Vk55WQ%3D%3D" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "COcBEMjeAiITCKC4h-_e34sDFScfBgAdF6AgSA==", + "playIcon": { + "iconType": "PLAY_ARROW" + }, + "pauseIcon": { + "iconType": "PAUSE" + }, + "iconColor": 4294967295, + "backgroundColor": 0, + "activeBackgroundColor": 0, + "loadingIndicatorColor": 14745645, + "playingIcon": { + "iconType": "VOLUME_UP" + }, + "iconLoadingColor": 0, + "activeScaleFactor": 1, + "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_SMALL", + "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF", + "accessibilityPlayData": { + "accessibilityData": { + "label": "Play Verlernt - Madeline Juno" + } + }, + "accessibilityPauseData": { + "accessibilityData": { + "label": "Pause Verlernt - Madeline Juno" + } + } + } + }, + "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_CENTERED", + "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_PERSISTENT" + } + }, + "flexColumns": [ + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "Verlernt", + "navigationEndpoint": { + "clickTrackingParams": "CNgBEMn0AhgCIhMIoLiH797fiwMVJx8GAB0XoCBI", + "watchEndpoint": { + "videoId": "Bu26uFtpt58", + "playlistId": "OLAK5uy_lGP_zv0vJDUlecQDzugUJmjcF7pvyVNyY", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GilPTEFLNXV5X2xHUF96djB2SkRVbGVjUUR6dWdVSm1qY0Y3cHZ5Vk55WQ%3D%3D" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": {}, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "418K plays" + } + ], + "accessibility": { + "accessibilityData": { + "label": "418K plays" + } + } + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + } + ], + "fixedColumns": [ + { + "musicResponsiveListItemFixedColumnRenderer": { + "text": { + "runs": [ + { + "text": "3:44" + } + ], + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 44 seconds" + } + } + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH", + "size": "MUSIC_RESPONSIVE_LIST_ITEM_FIXED_COLUMN_SIZE_SMALL" + } + } + ], + "menu": { + "menuRenderer": { + "items": [ + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Start radio" + } + ] + }, + "icon": { + "iconType": "MIX" + }, + "navigationEndpoint": { + "clickTrackingParams": "COYBEJvzBRgAIhMIoLiH797fiwMVJx8GAB0XoCBI", + "watchEndpoint": { + "videoId": "Bu26uFtpt58", + "playlistId": "RDAMVMBu26uFtpt58", + "params": "wAEB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GhFSREFNVk1CdTI2dUZ0cHQ1OA%3D%3D" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "COYBEJvzBRgAIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Play next" + } + ] + }, + "icon": { + "iconType": "QUEUE_PLAY_NEXT" + }, + "serviceEndpoint": { + "clickTrackingParams": "COQBEL7uBRgBIhMIoLiH797fiwMVJx8GAB0XoCBI", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "Bu26uFtpt58", + "onEmptyQueue": { + "clickTrackingParams": "COQBEL7uBRgBIhMIoLiH797fiwMVJx8GAB0XoCBI", + "watchEndpoint": { + "videoId": "Bu26uFtpt58" + } + } + }, + "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO", + "commands": [ + { + "clickTrackingParams": "COQBEL7uBRgBIhMIoLiH797fiwMVJx8GAB0XoCBI", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song will play next" + } + ] + }, + "trackingParams": "COUBEMrHAyITCKC4h-_e34sDFScfBgAdF6AgSA==" + } + } + } + } + ] + } + }, + "trackingParams": "COQBEL7uBRgBIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_REMOTE_QUEUE" + }, + "serviceEndpoint": { + "clickTrackingParams": "COIBEPvvBRgCIhMIoLiH797fiwMVJx8GAB0XoCBI", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "Bu26uFtpt58", + "onEmptyQueue": { + "clickTrackingParams": "COIBEPvvBRgCIhMIoLiH797fiwMVJx8GAB0XoCBI", + "watchEndpoint": { + "videoId": "Bu26uFtpt58" + } + } + }, + "queueInsertPosition": "INSERT_AT_END", + "commands": [ + { + "clickTrackingParams": "COIBEPvvBRgCIhMIoLiH797fiwMVJx8GAB0XoCBI", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song added to queue" + } + ] + }, + "trackingParams": "COMBEMrHAyITCKC4h-_e34sDFScfBgAdF6AgSA==" + } + } + } + } + ] + } + }, + "trackingParams": "COIBEPvvBRgCIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Save to playlist" + } + ] + }, + "icon": { + "iconType": "ADD_TO_PLAYLIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "COABEMOUBhgDIhMIoLiH797fiwMVJx8GAB0XoCBI", + "modalEndpoint": { + "modal": { + "modalWithTitleAndButtonRenderer": { + "title": { + "runs": [ + { + "text": "Save this for later" + } + ] + }, + "content": { + "runs": [ + { + "text": "Make playlists and share them after signing in" + } + ] + }, + "button": { + "buttonRenderer": { + "style": "STYLE_BLUE_TEXT", + "isDisabled": false, + "text": { + "runs": [ + { + "text": "Sign in" + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "COEBEPBbIhMIoLiH797fiwMVJx8GAB0XoCBI", + "signInEndpoint": { + "hack": true + } + }, + "trackingParams": "COEBEPBbIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + } + } + } + } + }, + "trackingParams": "COABEMOUBhgDIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to artist" + } + ] + }, + "icon": { + "iconType": "ARTIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CN8BEJD7BRgEIhMIoLiH797fiwMVJx8GAB0XoCBI", + "browseEndpoint": { + "browseId": "UCpJyCbFbdTrx0M90HCNBHFQ", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + }, + "trackingParams": "CN8BEJD7BRgEIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CN4BEJH7BRgFIhMIoLiH797fiwMVJx8GAB0XoCBI", + "shareEntityEndpoint": { + "serializedShareEntity": "CgtCdTI2dUZ0cHQ1OA%3D%3D", + "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL" + } + }, + "trackingParams": "CN4BEJH7BRgFIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + } + ], + "trackingParams": "CNoBEKc7IhMIoLiH797fiwMVJx8GAB0XoCBI", + "topLevelButtons": [ + { + "likeButtonRenderer": { + "target": { + "videoId": "Bu26uFtpt58" + }, + "likeStatus": "INDIFFERENT", + "trackingParams": "CNsBEKVBGAYiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "likesAllowed": true, + "dislikeNavigationEndpoint": { + "clickTrackingParams": "CNsBEKVBGAYiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "modalEndpoint": { + "modal": { + "modalWithTitleAndButtonRenderer": { + "title": { + "runs": [ + { + "text": "Not a fan?" + } + ] + }, + "content": { + "runs": [ + { + "text": "Improve your recommendations after signing in" + } + ] + }, + "button": { + "buttonRenderer": { + "style": "STYLE_BLUE_TEXT", + "isDisabled": false, + "text": { + "runs": [ + { + "text": "Sign in" + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CN0BEPBbIhMIoLiH797fiwMVJx8GAB0XoCBI", + "signInEndpoint": { + "hack": true + } + }, + "trackingParams": "CN0BEPBbIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + } + } + } + } + }, + "likeCommand": { + "clickTrackingParams": "CNsBEKVBGAYiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "modalEndpoint": { + "modal": { + "modalWithTitleAndButtonRenderer": { + "title": { + "runs": [ + { + "text": "Like this song" + } + ] + }, + "content": { + "runs": [ + { + "text": "Improve recommendations and save music after signing in" + } + ] + }, + "button": { + "buttonRenderer": { + "style": "STYLE_BLUE_TEXT", + "isDisabled": false, + "text": { + "runs": [ + { + "text": "Sign in" + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CNwBEPBbIhMIoLiH797fiwMVJx8GAB0XoCBI", + "signInEndpoint": { + "hack": true + } + }, + "trackingParams": "CNwBEPBbIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + } + } + } + } + } + } + } + ], + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "playlistItemData": { + "playlistSetVideoId": "E98404E3BD8CC718", + "videoId": "Bu26uFtpt58" + }, + "itemHeight": "MUSIC_RESPONSIVE_LIST_ITEM_HEIGHT_MEDIUM", + "index": { + "runs": [ + { + "text": "3" + } + ] + }, + "multiSelectCheckbox": { + "checkboxRenderer": { + "onSelectionChangeCommand": { + "clickTrackingParams": "CNkBEL6-CSITCKC4h-_e34sDFScfBgAdF6AgSA==", + "updateMultiSelectStateCommand": { + "multiSelectParams": "CAMSKU9MQUs1dXlfbEdQX3p2MHZKRFVsZWNRRHp1Z1VKbWpjRjdwdnlWTnlZ", + "multiSelectItem": "Ch8KC0J1MjZ1RnRwdDU4EhBFOTg0MDRFM0JEOENDNzE4" + } + }, + "checkedState": "CHECKBOX_CHECKED_STATE_UNCHECKED", + "trackingParams": "CNkBEL6-CSITCKC4h-_e34sDFScfBgAdF6AgSA==" + } + } + } + }, + { + "musicResponsiveListItemRenderer": { + "trackingParams": "CMgBEMn0AhgDIhMIoLiH797fiwMVJx8GAB0XoCBI", + "overlay": { + "musicItemThumbnailOverlayRenderer": { + "background": { + "verticalGradient": { + "gradientLayerColors": [ + "0", + "0" + ] + } + }, + "content": { + "musicPlayButtonRenderer": { + "playNavigationEndpoint": { + "clickTrackingParams": "CNcBEMjeAiITCKC4h-_e34sDFScfBgAdF6AgSA==", + "watchEndpoint": { + "videoId": "RgwNqqiVqdY", + "playlistId": "OLAK5uy_lGP_zv0vJDUlecQDzugUJmjcF7pvyVNyY", + "index": 3, + "playerParams": "ygYQRTVGQkY2MjNBMzU5MDc4NQ%3D%3D", + "playlistSetVideoId": "E5FBF623A3590785", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GilPTEFLNXV5X2xHUF96djB2SkRVbGVjUUR6dWdVSm1qY0Y3cHZ5Vk55WQ%3D%3D" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CNcBEMjeAiITCKC4h-_e34sDFScfBgAdF6AgSA==", + "playIcon": { + "iconType": "PLAY_ARROW" + }, + "pauseIcon": { + "iconType": "PAUSE" + }, + "iconColor": 4294967295, + "backgroundColor": 0, + "activeBackgroundColor": 0, + "loadingIndicatorColor": 14745645, + "playingIcon": { + "iconType": "VOLUME_UP" + }, + "iconLoadingColor": 0, + "activeScaleFactor": 1, + "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_SMALL", + "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF", + "accessibilityPlayData": { + "accessibilityData": { + "label": "Play In Farbe - Madeline Juno" + } + }, + "accessibilityPauseData": { + "accessibilityData": { + "label": "Pause In Farbe - Madeline Juno" + } + } + } + }, + "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_CENTERED", + "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_PERSISTENT" + } + }, + "flexColumns": [ + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "In Farbe", + "navigationEndpoint": { + "clickTrackingParams": "CMgBEMn0AhgDIhMIoLiH797fiwMVJx8GAB0XoCBI", + "watchEndpoint": { + "videoId": "RgwNqqiVqdY", + "playlistId": "OLAK5uy_lGP_zv0vJDUlecQDzugUJmjcF7pvyVNyY", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GilPTEFLNXV5X2xHUF96djB2SkRVbGVjUUR6dWdVSm1qY0Y3cHZ5Vk55WQ%3D%3D" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": {}, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "127K plays" + } + ], + "accessibility": { + "accessibilityData": { + "label": "127K plays" + } + } + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + } + ], + "fixedColumns": [ + { + "musicResponsiveListItemFixedColumnRenderer": { + "text": { + "runs": [ + { + "text": "3:42" + } + ], + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 42 seconds" + } + } + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH", + "size": "MUSIC_RESPONSIVE_LIST_ITEM_FIXED_COLUMN_SIZE_SMALL" + } + } + ], + "menu": { + "menuRenderer": { + "items": [ + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Start radio" + } + ] + }, + "icon": { + "iconType": "MIX" + }, + "navigationEndpoint": { + "clickTrackingParams": "CNYBEJvzBRgAIhMIoLiH797fiwMVJx8GAB0XoCBI", + "watchEndpoint": { + "videoId": "RgwNqqiVqdY", + "playlistId": "RDAMVMRgwNqqiVqdY", + "params": "wAEB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GhFSREFNVk1SZ3dOcXFpVnFkWQ%3D%3D" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CNYBEJvzBRgAIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Play next" + } + ] + }, + "icon": { + "iconType": "QUEUE_PLAY_NEXT" + }, + "serviceEndpoint": { + "clickTrackingParams": "CNQBEL7uBRgBIhMIoLiH797fiwMVJx8GAB0XoCBI", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "RgwNqqiVqdY", + "onEmptyQueue": { + "clickTrackingParams": "CNQBEL7uBRgBIhMIoLiH797fiwMVJx8GAB0XoCBI", + "watchEndpoint": { + "videoId": "RgwNqqiVqdY" + } + } + }, + "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO", + "commands": [ + { + "clickTrackingParams": "CNQBEL7uBRgBIhMIoLiH797fiwMVJx8GAB0XoCBI", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song will play next" + } + ] + }, + "trackingParams": "CNUBEMrHAyITCKC4h-_e34sDFScfBgAdF6AgSA==" + } + } + } + } + ] + } + }, + "trackingParams": "CNQBEL7uBRgBIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_REMOTE_QUEUE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CNIBEPvvBRgCIhMIoLiH797fiwMVJx8GAB0XoCBI", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "RgwNqqiVqdY", + "onEmptyQueue": { + "clickTrackingParams": "CNIBEPvvBRgCIhMIoLiH797fiwMVJx8GAB0XoCBI", + "watchEndpoint": { + "videoId": "RgwNqqiVqdY" + } + } + }, + "queueInsertPosition": "INSERT_AT_END", + "commands": [ + { + "clickTrackingParams": "CNIBEPvvBRgCIhMIoLiH797fiwMVJx8GAB0XoCBI", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song added to queue" + } + ] + }, + "trackingParams": "CNMBEMrHAyITCKC4h-_e34sDFScfBgAdF6AgSA==" + } + } + } + } + ] + } + }, + "trackingParams": "CNIBEPvvBRgCIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Save to playlist" + } + ] + }, + "icon": { + "iconType": "ADD_TO_PLAYLIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CNABEMOUBhgDIhMIoLiH797fiwMVJx8GAB0XoCBI", + "modalEndpoint": { + "modal": { + "modalWithTitleAndButtonRenderer": { + "title": { + "runs": [ + { + "text": "Save this for later" + } + ] + }, + "content": { + "runs": [ + { + "text": "Make playlists and share them after signing in" + } + ] + }, + "button": { + "buttonRenderer": { + "style": "STYLE_BLUE_TEXT", + "isDisabled": false, + "text": { + "runs": [ + { + "text": "Sign in" + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CNEBEPBbIhMIoLiH797fiwMVJx8GAB0XoCBI", + "signInEndpoint": { + "hack": true + } + }, + "trackingParams": "CNEBEPBbIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + } + } + } + } + }, + "trackingParams": "CNABEMOUBhgDIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to artist" + } + ] + }, + "icon": { + "iconType": "ARTIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CM8BEJD7BRgEIhMIoLiH797fiwMVJx8GAB0XoCBI", + "browseEndpoint": { + "browseId": "UCpJyCbFbdTrx0M90HCNBHFQ", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + }, + "trackingParams": "CM8BEJD7BRgEIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CM4BEJH7BRgFIhMIoLiH797fiwMVJx8GAB0XoCBI", + "shareEntityEndpoint": { + "serializedShareEntity": "CgtSZ3dOcXFpVnFkWQ%3D%3D", + "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL" + } + }, + "trackingParams": "CM4BEJH7BRgFIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + } + ], + "trackingParams": "CMoBEKc7IhMIoLiH797fiwMVJx8GAB0XoCBI", + "topLevelButtons": [ + { + "likeButtonRenderer": { + "target": { + "videoId": "RgwNqqiVqdY" + }, + "likeStatus": "INDIFFERENT", + "trackingParams": "CMsBEKVBGAYiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "likesAllowed": true, + "dislikeNavigationEndpoint": { + "clickTrackingParams": "CMsBEKVBGAYiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "modalEndpoint": { + "modal": { + "modalWithTitleAndButtonRenderer": { + "title": { + "runs": [ + { + "text": "Not a fan?" + } + ] + }, + "content": { + "runs": [ + { + "text": "Improve your recommendations after signing in" + } + ] + }, + "button": { + "buttonRenderer": { + "style": "STYLE_BLUE_TEXT", + "isDisabled": false, + "text": { + "runs": [ + { + "text": "Sign in" + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CM0BEPBbIhMIoLiH797fiwMVJx8GAB0XoCBI", + "signInEndpoint": { + "hack": true + } + }, + "trackingParams": "CM0BEPBbIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + } + } + } + } + }, + "likeCommand": { + "clickTrackingParams": "CMsBEKVBGAYiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "modalEndpoint": { + "modal": { + "modalWithTitleAndButtonRenderer": { + "title": { + "runs": [ + { + "text": "Like this song" + } + ] + }, + "content": { + "runs": [ + { + "text": "Improve recommendations and save music after signing in" + } + ] + }, + "button": { + "buttonRenderer": { + "style": "STYLE_BLUE_TEXT", + "isDisabled": false, + "text": { + "runs": [ + { + "text": "Sign in" + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CMwBEPBbIhMIoLiH797fiwMVJx8GAB0XoCBI", + "signInEndpoint": { + "hack": true + } + }, + "trackingParams": "CMwBEPBbIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + } + } + } + } + } + } + } + ], + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "playlistItemData": { + "playlistSetVideoId": "E5FBF623A3590785", + "videoId": "RgwNqqiVqdY" + }, + "itemHeight": "MUSIC_RESPONSIVE_LIST_ITEM_HEIGHT_MEDIUM", + "index": { + "runs": [ + { + "text": "4" + } + ] + }, + "multiSelectCheckbox": { + "checkboxRenderer": { + "onSelectionChangeCommand": { + "clickTrackingParams": "CMkBEL6-CSITCKC4h-_e34sDFScfBgAdF6AgSA==", + "updateMultiSelectStateCommand": { + "multiSelectParams": "CAMSKU9MQUs1dXlfbEdQX3p2MHZKRFVsZWNRRHp1Z1VKbWpjRjdwdnlWTnlZ", + "multiSelectItem": "Ch8KC1Jnd05xcWlWcWRZEhBFNUZCRjYyM0EzNTkwNzg1" + } + }, + "checkedState": "CHECKBOX_CHECKED_STATE_UNCHECKED", + "trackingParams": "CMkBEL6-CSITCKC4h-_e34sDFScfBgAdF6AgSA==" + } + } + } + }, + { + "musicResponsiveListItemRenderer": { + "trackingParams": "CLgBEMn0AhgEIhMIoLiH797fiwMVJx8GAB0XoCBI", + "overlay": { + "musicItemThumbnailOverlayRenderer": { + "background": { + "verticalGradient": { + "gradientLayerColors": [ + "0", + "0" + ] + } + }, + "content": { + "musicPlayButtonRenderer": { + "playNavigationEndpoint": { + "clickTrackingParams": "CMcBEMjeAiITCKC4h-_e34sDFScfBgAdF6AgSA==", + "watchEndpoint": { + "videoId": "2TuOh30XbCI", + "playlistId": "OLAK5uy_lGP_zv0vJDUlecQDzugUJmjcF7pvyVNyY", + "index": 4, + "playerParams": "ygYQNEI1M0VCRUNERDg3QkVCMQ%3D%3D", + "playlistSetVideoId": "4B53EBECDD87BEB1", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GilPTEFLNXV5X2xHUF96djB2SkRVbGVjUUR6dWdVSm1qY0Y3cHZ5Vk55WQ%3D%3D" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CMcBEMjeAiITCKC4h-_e34sDFScfBgAdF6AgSA==", + "playIcon": { + "iconType": "PLAY_ARROW" + }, + "pauseIcon": { + "iconType": "PAUSE" + }, + "iconColor": 4294967295, + "backgroundColor": 0, + "activeBackgroundColor": 0, + "loadingIndicatorColor": 14745645, + "playingIcon": { + "iconType": "VOLUME_UP" + }, + "iconLoadingColor": 0, + "activeScaleFactor": 1, + "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_SMALL", + "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF", + "accessibilityPlayData": { + "accessibilityData": { + "label": "Play Stadt im Hinterland - Madeline Juno" + } + }, + "accessibilityPauseData": { + "accessibilityData": { + "label": "Pause Stadt im Hinterland - Madeline Juno" + } + } + } + }, + "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_CENTERED", + "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_PERSISTENT" + } + }, + "flexColumns": [ + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "Stadt im Hinterland", + "navigationEndpoint": { + "clickTrackingParams": "CLgBEMn0AhgEIhMIoLiH797fiwMVJx8GAB0XoCBI", + "watchEndpoint": { + "videoId": "2TuOh30XbCI", + "playlistId": "OLAK5uy_lGP_zv0vJDUlecQDzugUJmjcF7pvyVNyY", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GilPTEFLNXV5X2xHUF96djB2SkRVbGVjUUR6dWdVSm1qY0Y3cHZ5Vk55WQ%3D%3D" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": {}, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "79K plays" + } + ], + "accessibility": { + "accessibilityData": { + "label": "79K plays" + } + } + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + } + ], + "fixedColumns": [ + { + "musicResponsiveListItemFixedColumnRenderer": { + "text": { + "runs": [ + { + "text": "3:18" + } + ], + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 18 seconds" + } + } + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH", + "size": "MUSIC_RESPONSIVE_LIST_ITEM_FIXED_COLUMN_SIZE_SMALL" + } + } + ], + "menu": { + "menuRenderer": { + "items": [ + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Start radio" + } + ] + }, + "icon": { + "iconType": "MIX" + }, + "navigationEndpoint": { + "clickTrackingParams": "CMYBEJvzBRgAIhMIoLiH797fiwMVJx8GAB0XoCBI", + "watchEndpoint": { + "videoId": "2TuOh30XbCI", + "playlistId": "RDAMVM2TuOh30XbCI", + "params": "wAEB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GhFSREFNVk0yVHVPaDMwWGJDSQ%3D%3D" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CMYBEJvzBRgAIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Play next" + } + ] + }, + "icon": { + "iconType": "QUEUE_PLAY_NEXT" + }, + "serviceEndpoint": { + "clickTrackingParams": "CMQBEL7uBRgBIhMIoLiH797fiwMVJx8GAB0XoCBI", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "2TuOh30XbCI", + "onEmptyQueue": { + "clickTrackingParams": "CMQBEL7uBRgBIhMIoLiH797fiwMVJx8GAB0XoCBI", + "watchEndpoint": { + "videoId": "2TuOh30XbCI" + } + } + }, + "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO", + "commands": [ + { + "clickTrackingParams": "CMQBEL7uBRgBIhMIoLiH797fiwMVJx8GAB0XoCBI", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song will play next" + } + ] + }, + "trackingParams": "CMUBEMrHAyITCKC4h-_e34sDFScfBgAdF6AgSA==" + } + } + } + } + ] + } + }, + "trackingParams": "CMQBEL7uBRgBIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_REMOTE_QUEUE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CMIBEPvvBRgCIhMIoLiH797fiwMVJx8GAB0XoCBI", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "2TuOh30XbCI", + "onEmptyQueue": { + "clickTrackingParams": "CMIBEPvvBRgCIhMIoLiH797fiwMVJx8GAB0XoCBI", + "watchEndpoint": { + "videoId": "2TuOh30XbCI" + } + } + }, + "queueInsertPosition": "INSERT_AT_END", + "commands": [ + { + "clickTrackingParams": "CMIBEPvvBRgCIhMIoLiH797fiwMVJx8GAB0XoCBI", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song added to queue" + } + ] + }, + "trackingParams": "CMMBEMrHAyITCKC4h-_e34sDFScfBgAdF6AgSA==" + } + } + } + } + ] + } + }, + "trackingParams": "CMIBEPvvBRgCIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Save to playlist" + } + ] + }, + "icon": { + "iconType": "ADD_TO_PLAYLIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CMABEMOUBhgDIhMIoLiH797fiwMVJx8GAB0XoCBI", + "modalEndpoint": { + "modal": { + "modalWithTitleAndButtonRenderer": { + "title": { + "runs": [ + { + "text": "Save this for later" + } + ] + }, + "content": { + "runs": [ + { + "text": "Make playlists and share them after signing in" + } + ] + }, + "button": { + "buttonRenderer": { + "style": "STYLE_BLUE_TEXT", + "isDisabled": false, + "text": { + "runs": [ + { + "text": "Sign in" + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CMEBEPBbIhMIoLiH797fiwMVJx8GAB0XoCBI", + "signInEndpoint": { + "hack": true + } + }, + "trackingParams": "CMEBEPBbIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + } + } + } + } + }, + "trackingParams": "CMABEMOUBhgDIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to artist" + } + ] + }, + "icon": { + "iconType": "ARTIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CL8BEJD7BRgEIhMIoLiH797fiwMVJx8GAB0XoCBI", + "browseEndpoint": { + "browseId": "UCpJyCbFbdTrx0M90HCNBHFQ", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + }, + "trackingParams": "CL8BEJD7BRgEIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CL4BEJH7BRgFIhMIoLiH797fiwMVJx8GAB0XoCBI", + "shareEntityEndpoint": { + "serializedShareEntity": "CgsyVHVPaDMwWGJDSQ%3D%3D", + "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL" + } + }, + "trackingParams": "CL4BEJH7BRgFIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + } + ], + "trackingParams": "CLoBEKc7IhMIoLiH797fiwMVJx8GAB0XoCBI", + "topLevelButtons": [ + { + "likeButtonRenderer": { + "target": { + "videoId": "2TuOh30XbCI" + }, + "likeStatus": "INDIFFERENT", + "trackingParams": "CLsBEKVBGAYiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "likesAllowed": true, + "dislikeNavigationEndpoint": { + "clickTrackingParams": "CLsBEKVBGAYiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "modalEndpoint": { + "modal": { + "modalWithTitleAndButtonRenderer": { + "title": { + "runs": [ + { + "text": "Not a fan?" + } + ] + }, + "content": { + "runs": [ + { + "text": "Improve your recommendations after signing in" + } + ] + }, + "button": { + "buttonRenderer": { + "style": "STYLE_BLUE_TEXT", + "isDisabled": false, + "text": { + "runs": [ + { + "text": "Sign in" + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CL0BEPBbIhMIoLiH797fiwMVJx8GAB0XoCBI", + "signInEndpoint": { + "hack": true + } + }, + "trackingParams": "CL0BEPBbIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + } + } + } + } + }, + "likeCommand": { + "clickTrackingParams": "CLsBEKVBGAYiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "modalEndpoint": { + "modal": { + "modalWithTitleAndButtonRenderer": { + "title": { + "runs": [ + { + "text": "Like this song" + } + ] + }, + "content": { + "runs": [ + { + "text": "Improve recommendations and save music after signing in" + } + ] + }, + "button": { + "buttonRenderer": { + "style": "STYLE_BLUE_TEXT", + "isDisabled": false, + "text": { + "runs": [ + { + "text": "Sign in" + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CLwBEPBbIhMIoLiH797fiwMVJx8GAB0XoCBI", + "signInEndpoint": { + "hack": true + } + }, + "trackingParams": "CLwBEPBbIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + } + } + } + } + } + } + } + ], + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "playlistItemData": { + "playlistSetVideoId": "4B53EBECDD87BEB1", + "videoId": "2TuOh30XbCI" + }, + "itemHeight": "MUSIC_RESPONSIVE_LIST_ITEM_HEIGHT_MEDIUM", + "index": { + "runs": [ + { + "text": "5" + } + ] + }, + "multiSelectCheckbox": { + "checkboxRenderer": { + "onSelectionChangeCommand": { + "clickTrackingParams": "CLkBEL6-CSITCKC4h-_e34sDFScfBgAdF6AgSA==", + "updateMultiSelectStateCommand": { + "multiSelectParams": "CAMSKU9MQUs1dXlfbEdQX3p2MHZKRFVsZWNRRHp1Z1VKbWpjRjdwdnlWTnlZ", + "multiSelectItem": "Ch8KCzJUdU9oMzBYYkNJEhA0QjUzRUJFQ0REODdCRUIx" + } + }, + "checkedState": "CHECKBOX_CHECKED_STATE_UNCHECKED", + "trackingParams": "CLkBEL6-CSITCKC4h-_e34sDFScfBgAdF6AgSA==" + } + } + } + } + ], + "trackingParams": "CLcBEPleGAAiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "shelfDivider": { + "musicShelfDividerRenderer": { + "hidden": true + } + }, + "contentsMultiSelectable": true + } + }, + { + "musicCarouselShelfRenderer": { + "header": { + "musicCarouselShelfBasicHeaderRenderer": { + "title": { + "runs": [ + { + "text": "More from Madeline Juno" + } + ] + }, + "accessibilityData": { + "accessibilityData": { + "label": "More from Madeline Juno" + } + }, + "headerStyle": "MUSIC_CAROUSEL_SHELF_BASIC_HEADER_STYLE_DEFAULT", + "trackingParams": "CLYBEIi8BCITCKC4h-_e34sDFScfBgAdF6AgSA==" + } + }, + "contents": [ + { + "musicTwoRowItemRenderer": { + "thumbnailRenderer": { + "musicThumbnailRenderer": { + "thumbnail": { + "thumbnails": [ + { + "url": "https://lh3.googleusercontent.com/g89-Zt2uybugyl9c57nn_0eZ7lP5LDKGVxRW7bRhPxNqW2V2ApdXt_i-jVm5L8gXGLS8K9HGYaCQ40A_=w226-h226-l90-rj", + "width": 226, + "height": 226 + }, + { + "url": "https://lh3.googleusercontent.com/g89-Zt2uybugyl9c57nn_0eZ7lP5LDKGVxRW7bRhPxNqW2V2ApdXt_i-jVm5L8gXGLS8K9HGYaCQ40A_=w544-h544-l90-rj", + "width": 544, + "height": 544 + } + ] + }, + "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_UNSPECIFIED", + "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_ASPECT_FILL", + "trackingParams": "CLUBEIS_AiITCKC4h-_e34sDFScfBgAdF6AgSA==" + } + }, + "aspectRatio": "MUSIC_TWO_ROW_ITEM_THUMBNAIL_ASPECT_RATIO_SQUARE", + "title": { + "runs": [ + { + "text": "The Unknown", + "navigationEndpoint": { + "clickTrackingParams": "CKYBEKCzAhgAIhMIoLiH797fiwMVJx8GAB0XoCBI", + "browseEndpoint": { + "browseId": "MPREb_AcHxkad6Caz", + "params": "ggMrGilPTEFLNXV5X2tkZEt2dDRDcXBJOFRlekg1TmVOOEZDZ19hNTFrSXFScw%3D%3D", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + } + } + ] + }, + "subtitle": { + "runs": [ + { + "text": "Album" + }, + { + "text": " • " + }, + { + "text": "Madeline Juno", + "navigationEndpoint": { + "clickTrackingParams": "CKYBEKCzAhgAIhMIoLiH797fiwMVJx8GAB0XoCBI", + "browseEndpoint": { + "browseId": "UCpJyCbFbdTrx0M90HCNBHFQ", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + } + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CKYBEKCzAhgAIhMIoLiH797fiwMVJx8GAB0XoCBI", + "browseEndpoint": { + "browseId": "MPREb_AcHxkad6Caz", + "params": "ggMrGilPTEFLNXV5X2tkZEt2dDRDcXBJOFRlekg1TmVOOEZDZ19hNTFrSXFScw%3D%3D", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + }, + "trackingParams": "CKYBEKCzAhgAIhMIoLiH797fiwMVJx8GAB0XoCBI", + "menu": { + "menuRenderer": { + "items": [ + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Shuffle play" + } + ] + }, + "icon": { + "iconType": "MUSIC_SHUFFLE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CLQBEJrzBRgAIhMIoLiH797fiwMVJx8GAB0XoCBI", + "watchPlaylistEndpoint": { + "playlistId": "OLAK5uy_kddKvt4CqpI8TezH5NeN8FCg_a51kIqRs", + "params": "wAEB8gECKAE%3D" + } + }, + "trackingParams": "CLQBEJrzBRgAIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Start radio" + } + ] + }, + "icon": { + "iconType": "MIX" + }, + "navigationEndpoint": { + "clickTrackingParams": "CLMBEJvzBRgBIhMIoLiH797fiwMVJx8GAB0XoCBI", + "watchPlaylistEndpoint": { + "playlistId": "RDAMPLOLAK5uy_kddKvt4CqpI8TezH5NeN8FCg_a51kIqRs", + "params": "wAEB" + } + }, + "trackingParams": "CLMBEJvzBRgBIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Play next" + } + ] + }, + "icon": { + "iconType": "QUEUE_PLAY_NEXT" + }, + "serviceEndpoint": { + "clickTrackingParams": "CLEBEL7uBRgCIhMIoLiH797fiwMVJx8GAB0XoCBI", + "queueAddEndpoint": { + "queueTarget": { + "playlistId": "OLAK5uy_kddKvt4CqpI8TezH5NeN8FCg_a51kIqRs", + "onEmptyQueue": { + "clickTrackingParams": "CLEBEL7uBRgCIhMIoLiH797fiwMVJx8GAB0XoCBI", + "watchEndpoint": { + "playlistId": "OLAK5uy_kddKvt4CqpI8TezH5NeN8FCg_a51kIqRs" + } + } + }, + "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO", + "commands": [ + { + "clickTrackingParams": "CLEBEL7uBRgCIhMIoLiH797fiwMVJx8GAB0XoCBI", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Album will play next" + } + ] + }, + "trackingParams": "CLIBEMrHAyITCKC4h-_e34sDFScfBgAdF6AgSA==" + } + } + } + } + ] + } + }, + "trackingParams": "CLEBEL7uBRgCIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_REMOTE_QUEUE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CK8BEPvvBRgDIhMIoLiH797fiwMVJx8GAB0XoCBI", + "queueAddEndpoint": { + "queueTarget": { + "playlistId": "OLAK5uy_kddKvt4CqpI8TezH5NeN8FCg_a51kIqRs", + "onEmptyQueue": { + "clickTrackingParams": "CK8BEPvvBRgDIhMIoLiH797fiwMVJx8GAB0XoCBI", + "watchEndpoint": { + "playlistId": "OLAK5uy_kddKvt4CqpI8TezH5NeN8FCg_a51kIqRs" + } + } + }, + "queueInsertPosition": "INSERT_AT_END", + "commands": [ + { + "clickTrackingParams": "CK8BEPvvBRgDIhMIoLiH797fiwMVJx8GAB0XoCBI", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Album added to queue" + } + ] + }, + "trackingParams": "CLABEMrHAyITCKC4h-_e34sDFScfBgAdF6AgSA==" + } + } + } + } + ] + } + }, + "trackingParams": "CK8BEPvvBRgDIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + { + "toggleMenuServiceItemRenderer": { + "defaultText": { + "runs": [ + { + "text": "Save album to library" + } + ] + }, + "defaultIcon": { + "iconType": "LIBRARY_ADD" + }, + "defaultServiceEndpoint": { + "clickTrackingParams": "CK0BEIT_BRgEIhMIoLiH797fiwMVJx8GAB0XoCBI", + "modalEndpoint": { + "modal": { + "modalWithTitleAndButtonRenderer": { + "title": { + "runs": [ + { + "text": "Save this for later" + } + ] + }, + "content": { + "runs": [ + { + "text": "Save favorites to your library after signing in" + } + ] + }, + "button": { + "buttonRenderer": { + "style": "STYLE_BLUE_TEXT", + "isDisabled": false, + "text": { + "runs": [ + { + "text": "Sign in" + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CK4BEPBbIhMIoLiH797fiwMVJx8GAB0XoCBI", + "signInEndpoint": { + "hack": true + } + }, + "trackingParams": "CK4BEPBbIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + } + } + } + } + }, + "toggledText": { + "runs": [ + { + "text": "Remove album from library" + } + ] + }, + "toggledIcon": { + "iconType": "LIBRARY_SAVED" + }, + "toggledServiceEndpoint": { + "clickTrackingParams": "CK0BEIT_BRgEIhMIoLiH797fiwMVJx8GAB0XoCBI", + "likeEndpoint": { + "status": "INDIFFERENT", + "target": { + "playlistId": "OLAK5uy_kddKvt4CqpI8TezH5NeN8FCg_a51kIqRs" + } + } + }, + "trackingParams": "CK0BEIT_BRgEIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Save to playlist" + } + ] + }, + "icon": { + "iconType": "ADD_TO_PLAYLIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CKsBEMOUBhgFIhMIoLiH797fiwMVJx8GAB0XoCBI", + "modalEndpoint": { + "modal": { + "modalWithTitleAndButtonRenderer": { + "title": { + "runs": [ + { + "text": "Save this for later" + } + ] + }, + "content": { + "runs": [ + { + "text": "Make playlists and share them after signing in" + } + ] + }, + "button": { + "buttonRenderer": { + "style": "STYLE_BLUE_TEXT", + "isDisabled": false, + "text": { + "runs": [ + { + "text": "Sign in" + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CKwBEPBbIhMIoLiH797fiwMVJx8GAB0XoCBI", + "signInEndpoint": { + "hack": true + } + }, + "trackingParams": "CKwBEPBbIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + } + } + } + } + }, + "trackingParams": "CKsBEMOUBhgFIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to artist" + } + ] + }, + "icon": { + "iconType": "ARTIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CKoBEJD7BRgGIhMIoLiH797fiwMVJx8GAB0XoCBI", + "browseEndpoint": { + "browseId": "UCpJyCbFbdTrx0M90HCNBHFQ", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + }, + "trackingParams": "CKoBEJD7BRgGIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CKkBEJH7BRgHIhMIoLiH797fiwMVJx8GAB0XoCBI", + "shareEntityEndpoint": { + "serializedShareEntity": "EilPTEFLNXV5X2tkZEt2dDRDcXBJOFRlekg1TmVOOEZDZ19hNTFrSXFScw%3D%3D", + "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL" + } + }, + "trackingParams": "CKkBEJH7BRgHIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + } + ], + "trackingParams": "CKgBEKc7IhMIoLiH797fiwMVJx8GAB0XoCBI", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlay": { + "musicItemThumbnailOverlayRenderer": { + "background": { + "verticalGradient": { + "gradientLayerColors": [ + "2147483648", + "0", + "0" + ] + } + }, + "content": { + "musicPlayButtonRenderer": { + "playNavigationEndpoint": { + "clickTrackingParams": "CKcBEMjeAiITCKC4h-_e34sDFScfBgAdF6AgSA==", + "watchPlaylistEndpoint": { + "playlistId": "OLAK5uy_kddKvt4CqpI8TezH5NeN8FCg_a51kIqRs" + } + }, + "trackingParams": "CKcBEMjeAiITCKC4h-_e34sDFScfBgAdF6AgSA==", + "playIcon": { + "iconType": "PLAY_ARROW" + }, + "pauseIcon": { + "iconType": "PAUSE" + }, + "iconColor": 4294967295, + "backgroundColor": 2566914048, + "activeBackgroundColor": 4278190080, + "loadingIndicatorColor": 14745645, + "playingIcon": { + "iconType": "VOLUME_UP" + }, + "iconLoadingColor": 1308622847, + "activeScaleFactor": 1.2, + "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_MEDIUM", + "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF", + "accessibilityPlayData": { + "accessibilityData": { + "label": "Play The Unknown" + } + }, + "accessibilityPauseData": { + "accessibilityData": { + "label": "Pause The Unknown" + } + } + } + }, + "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_BOTTOM_RIGHT", + "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_HOVER" + } + } + } + }, + { + "musicTwoRowItemRenderer": { + "thumbnailRenderer": { + "musicThumbnailRenderer": { + "thumbnail": { + "thumbnails": [ + { + "url": "https://lh3.googleusercontent.com/2Z-ZCut-kyKGIgZIekr_N8Q7ZW_JTsD0uvv4jp3Jq0M4DpjX1EVUH5wWHGpb3w0fMBsf-Fjz6lWYuuiF5A=w226-h226-l90-rj", + "width": 226, + "height": 226 + }, + { + "url": "https://lh3.googleusercontent.com/2Z-ZCut-kyKGIgZIekr_N8Q7ZW_JTsD0uvv4jp3Jq0M4DpjX1EVUH5wWHGpb3w0fMBsf-Fjz6lWYuuiF5A=w544-h544-l90-rj", + "width": 544, + "height": 544 + } + ] + }, + "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_UNSPECIFIED", + "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_ASPECT_FILL", + "trackingParams": "CKUBEIS_AiITCKC4h-_e34sDFScfBgAdF6AgSA==" + } + }, + "aspectRatio": "MUSIC_TWO_ROW_ITEM_THUMBNAIL_ASPECT_RATIO_SQUARE", + "title": { + "runs": [ + { + "text": "DNA", + "navigationEndpoint": { + "clickTrackingParams": "CJYBEKCzAhgBIhMIoLiH797fiwMVJx8GAB0XoCBI", + "browseEndpoint": { + "browseId": "MPREb_w5lKTKIAWpH", + "params": "ggMrGilPTEFLNXV5X2xoeHdSc1NrWkxQbDB1Rm82Yll4VTFfdWpVNld1RTVybw%3D%3D", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + } + } + ] + }, + "subtitle": { + "runs": [ + { + "text": "Album" + }, + { + "text": " • " + }, + { + "text": "Madeline Juno", + "navigationEndpoint": { + "clickTrackingParams": "CJYBEKCzAhgBIhMIoLiH797fiwMVJx8GAB0XoCBI", + "browseEndpoint": { + "browseId": "UCpJyCbFbdTrx0M90HCNBHFQ", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + } + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CJYBEKCzAhgBIhMIoLiH797fiwMVJx8GAB0XoCBI", + "browseEndpoint": { + "browseId": "MPREb_w5lKTKIAWpH", + "params": "ggMrGilPTEFLNXV5X2xoeHdSc1NrWkxQbDB1Rm82Yll4VTFfdWpVNld1RTVybw%3D%3D", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + }, + "trackingParams": "CJYBEKCzAhgBIhMIoLiH797fiwMVJx8GAB0XoCBI", + "menu": { + "menuRenderer": { + "items": [ + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Shuffle play" + } + ] + }, + "icon": { + "iconType": "MUSIC_SHUFFLE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CKQBEJrzBRgAIhMIoLiH797fiwMVJx8GAB0XoCBI", + "watchPlaylistEndpoint": { + "playlistId": "OLAK5uy_lhxwRsSkZLPl0uFo6bYxU1_ujU6WuE5ro", + "params": "wAEB8gECKAE%3D" + } + }, + "trackingParams": "CKQBEJrzBRgAIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Start radio" + } + ] + }, + "icon": { + "iconType": "MIX" + }, + "navigationEndpoint": { + "clickTrackingParams": "CKMBEJvzBRgBIhMIoLiH797fiwMVJx8GAB0XoCBI", + "watchPlaylistEndpoint": { + "playlistId": "RDAMPLOLAK5uy_lhxwRsSkZLPl0uFo6bYxU1_ujU6WuE5ro", + "params": "wAEB" + } + }, + "trackingParams": "CKMBEJvzBRgBIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Play next" + } + ] + }, + "icon": { + "iconType": "QUEUE_PLAY_NEXT" + }, + "serviceEndpoint": { + "clickTrackingParams": "CKEBEL7uBRgCIhMIoLiH797fiwMVJx8GAB0XoCBI", + "queueAddEndpoint": { + "queueTarget": { + "playlistId": "OLAK5uy_lhxwRsSkZLPl0uFo6bYxU1_ujU6WuE5ro", + "onEmptyQueue": { + "clickTrackingParams": "CKEBEL7uBRgCIhMIoLiH797fiwMVJx8GAB0XoCBI", + "watchEndpoint": { + "playlistId": "OLAK5uy_lhxwRsSkZLPl0uFo6bYxU1_ujU6WuE5ro" + } + } + }, + "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO", + "commands": [ + { + "clickTrackingParams": "CKEBEL7uBRgCIhMIoLiH797fiwMVJx8GAB0XoCBI", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Album will play next" + } + ] + }, + "trackingParams": "CKIBEMrHAyITCKC4h-_e34sDFScfBgAdF6AgSA==" + } + } + } + } + ] + } + }, + "trackingParams": "CKEBEL7uBRgCIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_REMOTE_QUEUE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CJ8BEPvvBRgDIhMIoLiH797fiwMVJx8GAB0XoCBI", + "queueAddEndpoint": { + "queueTarget": { + "playlistId": "OLAK5uy_lhxwRsSkZLPl0uFo6bYxU1_ujU6WuE5ro", + "onEmptyQueue": { + "clickTrackingParams": "CJ8BEPvvBRgDIhMIoLiH797fiwMVJx8GAB0XoCBI", + "watchEndpoint": { + "playlistId": "OLAK5uy_lhxwRsSkZLPl0uFo6bYxU1_ujU6WuE5ro" + } + } + }, + "queueInsertPosition": "INSERT_AT_END", + "commands": [ + { + "clickTrackingParams": "CJ8BEPvvBRgDIhMIoLiH797fiwMVJx8GAB0XoCBI", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Album added to queue" + } + ] + }, + "trackingParams": "CKABEMrHAyITCKC4h-_e34sDFScfBgAdF6AgSA==" + } + } + } + } + ] + } + }, + "trackingParams": "CJ8BEPvvBRgDIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + { + "toggleMenuServiceItemRenderer": { + "defaultText": { + "runs": [ + { + "text": "Save album to library" + } + ] + }, + "defaultIcon": { + "iconType": "LIBRARY_ADD" + }, + "defaultServiceEndpoint": { + "clickTrackingParams": "CJ0BEIT_BRgEIhMIoLiH797fiwMVJx8GAB0XoCBI", + "modalEndpoint": { + "modal": { + "modalWithTitleAndButtonRenderer": { + "title": { + "runs": [ + { + "text": "Save this for later" + } + ] + }, + "content": { + "runs": [ + { + "text": "Save favorites to your library after signing in" + } + ] + }, + "button": { + "buttonRenderer": { + "style": "STYLE_BLUE_TEXT", + "isDisabled": false, + "text": { + "runs": [ + { + "text": "Sign in" + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CJ4BEPBbIhMIoLiH797fiwMVJx8GAB0XoCBI", + "signInEndpoint": { + "hack": true + } + }, + "trackingParams": "CJ4BEPBbIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + } + } + } + } + }, + "toggledText": { + "runs": [ + { + "text": "Remove album from library" + } + ] + }, + "toggledIcon": { + "iconType": "LIBRARY_SAVED" + }, + "toggledServiceEndpoint": { + "clickTrackingParams": "CJ0BEIT_BRgEIhMIoLiH797fiwMVJx8GAB0XoCBI", + "likeEndpoint": { + "status": "INDIFFERENT", + "target": { + "playlistId": "OLAK5uy_lhxwRsSkZLPl0uFo6bYxU1_ujU6WuE5ro" + } + } + }, + "trackingParams": "CJ0BEIT_BRgEIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Save to playlist" + } + ] + }, + "icon": { + "iconType": "ADD_TO_PLAYLIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CJsBEMOUBhgFIhMIoLiH797fiwMVJx8GAB0XoCBI", + "modalEndpoint": { + "modal": { + "modalWithTitleAndButtonRenderer": { + "title": { + "runs": [ + { + "text": "Save this for later" + } + ] + }, + "content": { + "runs": [ + { + "text": "Make playlists and share them after signing in" + } + ] + }, + "button": { + "buttonRenderer": { + "style": "STYLE_BLUE_TEXT", + "isDisabled": false, + "text": { + "runs": [ + { + "text": "Sign in" + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CJwBEPBbIhMIoLiH797fiwMVJx8GAB0XoCBI", + "signInEndpoint": { + "hack": true + } + }, + "trackingParams": "CJwBEPBbIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + } + } + } + } + }, + "trackingParams": "CJsBEMOUBhgFIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to artist" + } + ] + }, + "icon": { + "iconType": "ARTIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CJoBEJD7BRgGIhMIoLiH797fiwMVJx8GAB0XoCBI", + "browseEndpoint": { + "browseId": "UCpJyCbFbdTrx0M90HCNBHFQ", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + }, + "trackingParams": "CJoBEJD7BRgGIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CJkBEJH7BRgHIhMIoLiH797fiwMVJx8GAB0XoCBI", + "shareEntityEndpoint": { + "serializedShareEntity": "EilPTEFLNXV5X2xoeHdSc1NrWkxQbDB1Rm82Yll4VTFfdWpVNld1RTVybw%3D%3D", + "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL" + } + }, + "trackingParams": "CJkBEJH7BRgHIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + } + ], + "trackingParams": "CJgBEKc7IhMIoLiH797fiwMVJx8GAB0XoCBI", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlay": { + "musicItemThumbnailOverlayRenderer": { + "background": { + "verticalGradient": { + "gradientLayerColors": [ + "2147483648", + "0", + "0" + ] + } + }, + "content": { + "musicPlayButtonRenderer": { + "playNavigationEndpoint": { + "clickTrackingParams": "CJcBEMjeAiITCKC4h-_e34sDFScfBgAdF6AgSA==", + "watchPlaylistEndpoint": { + "playlistId": "OLAK5uy_lhxwRsSkZLPl0uFo6bYxU1_ujU6WuE5ro" + } + }, + "trackingParams": "CJcBEMjeAiITCKC4h-_e34sDFScfBgAdF6AgSA==", + "playIcon": { + "iconType": "PLAY_ARROW" + }, + "pauseIcon": { + "iconType": "PAUSE" + }, + "iconColor": 4294967295, + "backgroundColor": 2566914048, + "activeBackgroundColor": 4278190080, + "loadingIndicatorColor": 14745645, + "playingIcon": { + "iconType": "VOLUME_UP" + }, + "iconLoadingColor": 1308622847, + "activeScaleFactor": 1.2, + "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_MEDIUM", + "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF", + "accessibilityPlayData": { + "accessibilityData": { + "label": "Play DNA" + } + }, + "accessibilityPauseData": { + "accessibilityData": { + "label": "Pause DNA" + } + } + } + }, + "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_BOTTOM_RIGHT", + "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_HOVER" + } + } + } + }, + { + "musicTwoRowItemRenderer": { + "thumbnailRenderer": { + "musicThumbnailRenderer": { + "thumbnail": { + "thumbnails": [ + { + "url": "https://lh3.googleusercontent.com/7jDuk_B4v-2sCy02yQI9JAJ6RyjhkQqTBkL_LO9HnjKrQuRlO8-9sZ-moD4KkbpfJEdEShC7pRqWJu7e=w226-h226-l90-rj", + "width": 226, + "height": 226 + }, + { + "url": "https://lh3.googleusercontent.com/7jDuk_B4v-2sCy02yQI9JAJ6RyjhkQqTBkL_LO9HnjKrQuRlO8-9sZ-moD4KkbpfJEdEShC7pRqWJu7e=w544-h544-l90-rj", + "width": 544, + "height": 544 + } + ] + }, + "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_UNSPECIFIED", + "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_ASPECT_FILL", + "trackingParams": "CJUBEIS_AiITCKC4h-_e34sDFScfBgAdF6AgSA==" + } + }, + "aspectRatio": "MUSIC_TWO_ROW_ITEM_THUMBNAIL_ASPECT_RATIO_SQUARE", + "title": { + "runs": [ + { + "text": "Besser kann ich es nicht erklären", + "navigationEndpoint": { + "clickTrackingParams": "CIYBEKCzAhgCIhMIoLiH797fiwMVJx8GAB0XoCBI", + "browseEndpoint": { + "browseId": "MPREb_RSBYOXptNiW", + "params": "ggMrGilPTEFLNXV5X25xdzFFa2dnWmFlM3cwWksta1FfMk1ld2Jwd3hnMkR5bw%3D%3D", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + } + } + ] + }, + "subtitle": { + "runs": [ + { + "text": "Album" + }, + { + "text": " • " + }, + { + "text": "Madeline Juno", + "navigationEndpoint": { + "clickTrackingParams": "CIYBEKCzAhgCIhMIoLiH797fiwMVJx8GAB0XoCBI", + "browseEndpoint": { + "browseId": "UCpJyCbFbdTrx0M90HCNBHFQ", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + } + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CIYBEKCzAhgCIhMIoLiH797fiwMVJx8GAB0XoCBI", + "browseEndpoint": { + "browseId": "MPREb_RSBYOXptNiW", + "params": "ggMrGilPTEFLNXV5X25xdzFFa2dnWmFlM3cwWksta1FfMk1ld2Jwd3hnMkR5bw%3D%3D", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + }, + "trackingParams": "CIYBEKCzAhgCIhMIoLiH797fiwMVJx8GAB0XoCBI", + "menu": { + "menuRenderer": { + "items": [ + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Shuffle play" + } + ] + }, + "icon": { + "iconType": "MUSIC_SHUFFLE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CJQBEJrzBRgAIhMIoLiH797fiwMVJx8GAB0XoCBI", + "watchPlaylistEndpoint": { + "playlistId": "OLAK5uy_nqw1EkggZae3w0ZK-kQ_2Mewbpwxg2Dyo", + "params": "wAEB8gECKAE%3D" + } + }, + "trackingParams": "CJQBEJrzBRgAIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Start radio" + } + ] + }, + "icon": { + "iconType": "MIX" + }, + "navigationEndpoint": { + "clickTrackingParams": "CJMBEJvzBRgBIhMIoLiH797fiwMVJx8GAB0XoCBI", + "watchPlaylistEndpoint": { + "playlistId": "RDAMPLOLAK5uy_nqw1EkggZae3w0ZK-kQ_2Mewbpwxg2Dyo", + "params": "wAEB" + } + }, + "trackingParams": "CJMBEJvzBRgBIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Play next" + } + ] + }, + "icon": { + "iconType": "QUEUE_PLAY_NEXT" + }, + "serviceEndpoint": { + "clickTrackingParams": "CJEBEL7uBRgCIhMIoLiH797fiwMVJx8GAB0XoCBI", + "queueAddEndpoint": { + "queueTarget": { + "playlistId": "OLAK5uy_nqw1EkggZae3w0ZK-kQ_2Mewbpwxg2Dyo", + "onEmptyQueue": { + "clickTrackingParams": "CJEBEL7uBRgCIhMIoLiH797fiwMVJx8GAB0XoCBI", + "watchEndpoint": { + "playlistId": "OLAK5uy_nqw1EkggZae3w0ZK-kQ_2Mewbpwxg2Dyo" + } + } + }, + "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO", + "commands": [ + { + "clickTrackingParams": "CJEBEL7uBRgCIhMIoLiH797fiwMVJx8GAB0XoCBI", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Album will play next" + } + ] + }, + "trackingParams": "CJIBEMrHAyITCKC4h-_e34sDFScfBgAdF6AgSA==" + } + } + } + } + ] + } + }, + "trackingParams": "CJEBEL7uBRgCIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_REMOTE_QUEUE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CI8BEPvvBRgDIhMIoLiH797fiwMVJx8GAB0XoCBI", + "queueAddEndpoint": { + "queueTarget": { + "playlistId": "OLAK5uy_nqw1EkggZae3w0ZK-kQ_2Mewbpwxg2Dyo", + "onEmptyQueue": { + "clickTrackingParams": "CI8BEPvvBRgDIhMIoLiH797fiwMVJx8GAB0XoCBI", + "watchEndpoint": { + "playlistId": "OLAK5uy_nqw1EkggZae3w0ZK-kQ_2Mewbpwxg2Dyo" + } + } + }, + "queueInsertPosition": "INSERT_AT_END", + "commands": [ + { + "clickTrackingParams": "CI8BEPvvBRgDIhMIoLiH797fiwMVJx8GAB0XoCBI", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Album added to queue" + } + ] + }, + "trackingParams": "CJABEMrHAyITCKC4h-_e34sDFScfBgAdF6AgSA==" + } + } + } + } + ] + } + }, + "trackingParams": "CI8BEPvvBRgDIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + { + "toggleMenuServiceItemRenderer": { + "defaultText": { + "runs": [ + { + "text": "Save album to library" + } + ] + }, + "defaultIcon": { + "iconType": "LIBRARY_ADD" + }, + "defaultServiceEndpoint": { + "clickTrackingParams": "CI0BEIT_BRgEIhMIoLiH797fiwMVJx8GAB0XoCBI", + "modalEndpoint": { + "modal": { + "modalWithTitleAndButtonRenderer": { + "title": { + "runs": [ + { + "text": "Save this for later" + } + ] + }, + "content": { + "runs": [ + { + "text": "Save favorites to your library after signing in" + } + ] + }, + "button": { + "buttonRenderer": { + "style": "STYLE_BLUE_TEXT", + "isDisabled": false, + "text": { + "runs": [ + { + "text": "Sign in" + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CI4BEPBbIhMIoLiH797fiwMVJx8GAB0XoCBI", + "signInEndpoint": { + "hack": true + } + }, + "trackingParams": "CI4BEPBbIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + } + } + } + } + }, + "toggledText": { + "runs": [ + { + "text": "Remove album from library" + } + ] + }, + "toggledIcon": { + "iconType": "LIBRARY_SAVED" + }, + "toggledServiceEndpoint": { + "clickTrackingParams": "CI0BEIT_BRgEIhMIoLiH797fiwMVJx8GAB0XoCBI", + "likeEndpoint": { + "status": "INDIFFERENT", + "target": { + "playlistId": "OLAK5uy_nqw1EkggZae3w0ZK-kQ_2Mewbpwxg2Dyo" + } + } + }, + "trackingParams": "CI0BEIT_BRgEIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Save to playlist" + } + ] + }, + "icon": { + "iconType": "ADD_TO_PLAYLIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CIsBEMOUBhgFIhMIoLiH797fiwMVJx8GAB0XoCBI", + "modalEndpoint": { + "modal": { + "modalWithTitleAndButtonRenderer": { + "title": { + "runs": [ + { + "text": "Save this for later" + } + ] + }, + "content": { + "runs": [ + { + "text": "Make playlists and share them after signing in" + } + ] + }, + "button": { + "buttonRenderer": { + "style": "STYLE_BLUE_TEXT", + "isDisabled": false, + "text": { + "runs": [ + { + "text": "Sign in" + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CIwBEPBbIhMIoLiH797fiwMVJx8GAB0XoCBI", + "signInEndpoint": { + "hack": true + } + }, + "trackingParams": "CIwBEPBbIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + } + } + } + } + }, + "trackingParams": "CIsBEMOUBhgFIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to artist" + } + ] + }, + "icon": { + "iconType": "ARTIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CIoBEJD7BRgGIhMIoLiH797fiwMVJx8GAB0XoCBI", + "browseEndpoint": { + "browseId": "UCpJyCbFbdTrx0M90HCNBHFQ", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + }, + "trackingParams": "CIoBEJD7BRgGIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CIkBEJH7BRgHIhMIoLiH797fiwMVJx8GAB0XoCBI", + "shareEntityEndpoint": { + "serializedShareEntity": "EilPTEFLNXV5X25xdzFFa2dnWmFlM3cwWksta1FfMk1ld2Jwd3hnMkR5bw%3D%3D", + "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL" + } + }, + "trackingParams": "CIkBEJH7BRgHIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + } + ], + "trackingParams": "CIgBEKc7IhMIoLiH797fiwMVJx8GAB0XoCBI", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlay": { + "musicItemThumbnailOverlayRenderer": { + "background": { + "verticalGradient": { + "gradientLayerColors": [ + "2147483648", + "0", + "0" + ] + } + }, + "content": { + "musicPlayButtonRenderer": { + "playNavigationEndpoint": { + "clickTrackingParams": "CIcBEMjeAiITCKC4h-_e34sDFScfBgAdF6AgSA==", + "watchPlaylistEndpoint": { + "playlistId": "OLAK5uy_nqw1EkggZae3w0ZK-kQ_2Mewbpwxg2Dyo" + } + }, + "trackingParams": "CIcBEMjeAiITCKC4h-_e34sDFScfBgAdF6AgSA==", + "playIcon": { + "iconType": "PLAY_ARROW" + }, + "pauseIcon": { + "iconType": "PAUSE" + }, + "iconColor": 4294967295, + "backgroundColor": 2566914048, + "activeBackgroundColor": 4278190080, + "loadingIndicatorColor": 14745645, + "playingIcon": { + "iconType": "VOLUME_UP" + }, + "iconLoadingColor": 1308622847, + "activeScaleFactor": 1.2, + "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_MEDIUM", + "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF", + "accessibilityPlayData": { + "accessibilityData": { + "label": "Play Besser kann ich es nicht erklären" + } + }, + "accessibilityPauseData": { + "accessibilityData": { + "label": "Pause Besser kann ich es nicht erklären" + } + } + } + }, + "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_BOTTOM_RIGHT", + "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_HOVER" + } + } + } + }, + { + "musicTwoRowItemRenderer": { + "thumbnailRenderer": { + "musicThumbnailRenderer": { + "thumbnail": { + "thumbnails": [ + { + "url": "https://lh3.googleusercontent.com/EuoHCUohrVYMJFpGRqgDoyYfjyhh08PmfFhLBAX41ZZQ5VHQtuzWaNW2GX5iegQcMcr4781M65YuKi-i=w226-h226-l90-rj", + "width": 226, + "height": 226 + }, + { + "url": "https://lh3.googleusercontent.com/EuoHCUohrVYMJFpGRqgDoyYfjyhh08PmfFhLBAX41ZZQ5VHQtuzWaNW2GX5iegQcMcr4781M65YuKi-i=w544-h544-l90-rj", + "width": 544, + "height": 544 + } + ] + }, + "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_UNSPECIFIED", + "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_ASPECT_FILL", + "trackingParams": "CIUBEIS_AiITCKC4h-_e34sDFScfBgAdF6AgSA==" + } + }, + "aspectRatio": "MUSIC_TWO_ROW_ITEM_THUMBNAIL_ASPECT_RATIO_SQUARE", + "title": { + "runs": [ + { + "text": "Salvation", + "navigationEndpoint": { + "clickTrackingParams": "CHYQoLMCGAMiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "browseEndpoint": { + "browseId": "MPREb_DtpbfTVqpjY", + "params": "ggMrGilPTEFLNXV5X21BT3hRZ3RhbnZMc0paVHhzNURhbWNKQ3h5YllpWFF5Zw%3D%3D", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + } + } + ] + }, + "subtitle": { + "runs": [ + { + "text": "Album" + }, + { + "text": " • " + }, + { + "text": "Madeline Juno", + "navigationEndpoint": { + "clickTrackingParams": "CHYQoLMCGAMiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "browseEndpoint": { + "browseId": "UCpJyCbFbdTrx0M90HCNBHFQ", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + } + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CHYQoLMCGAMiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "browseEndpoint": { + "browseId": "MPREb_DtpbfTVqpjY", + "params": "ggMrGilPTEFLNXV5X21BT3hRZ3RhbnZMc0paVHhzNURhbWNKQ3h5YllpWFF5Zw%3D%3D", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + }, + "trackingParams": "CHYQoLMCGAMiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "menu": { + "menuRenderer": { + "items": [ + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Shuffle play" + } + ] + }, + "icon": { + "iconType": "MUSIC_SHUFFLE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CIQBEJrzBRgAIhMIoLiH797fiwMVJx8GAB0XoCBI", + "watchPlaylistEndpoint": { + "playlistId": "OLAK5uy_mAOxQgtanvLsJZTxs5DamcJCxybYiXQyg", + "params": "wAEB8gECKAE%3D" + } + }, + "trackingParams": "CIQBEJrzBRgAIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Start radio" + } + ] + }, + "icon": { + "iconType": "MIX" + }, + "navigationEndpoint": { + "clickTrackingParams": "CIMBEJvzBRgBIhMIoLiH797fiwMVJx8GAB0XoCBI", + "watchPlaylistEndpoint": { + "playlistId": "RDAMPLOLAK5uy_mAOxQgtanvLsJZTxs5DamcJCxybYiXQyg", + "params": "wAEB" + } + }, + "trackingParams": "CIMBEJvzBRgBIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Play next" + } + ] + }, + "icon": { + "iconType": "QUEUE_PLAY_NEXT" + }, + "serviceEndpoint": { + "clickTrackingParams": "CIEBEL7uBRgCIhMIoLiH797fiwMVJx8GAB0XoCBI", + "queueAddEndpoint": { + "queueTarget": { + "playlistId": "OLAK5uy_mAOxQgtanvLsJZTxs5DamcJCxybYiXQyg", + "onEmptyQueue": { + "clickTrackingParams": "CIEBEL7uBRgCIhMIoLiH797fiwMVJx8GAB0XoCBI", + "watchEndpoint": { + "playlistId": "OLAK5uy_mAOxQgtanvLsJZTxs5DamcJCxybYiXQyg" + } + } + }, + "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO", + "commands": [ + { + "clickTrackingParams": "CIEBEL7uBRgCIhMIoLiH797fiwMVJx8GAB0XoCBI", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Album will play next" + } + ] + }, + "trackingParams": "CIIBEMrHAyITCKC4h-_e34sDFScfBgAdF6AgSA==" + } + } + } + } + ] + } + }, + "trackingParams": "CIEBEL7uBRgCIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_REMOTE_QUEUE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CH8Q--8FGAMiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "queueAddEndpoint": { + "queueTarget": { + "playlistId": "OLAK5uy_mAOxQgtanvLsJZTxs5DamcJCxybYiXQyg", + "onEmptyQueue": { + "clickTrackingParams": "CH8Q--8FGAMiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "watchEndpoint": { + "playlistId": "OLAK5uy_mAOxQgtanvLsJZTxs5DamcJCxybYiXQyg" + } + } + }, + "queueInsertPosition": "INSERT_AT_END", + "commands": [ + { + "clickTrackingParams": "CH8Q--8FGAMiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Album added to queue" + } + ] + }, + "trackingParams": "CIABEMrHAyITCKC4h-_e34sDFScfBgAdF6AgSA==" + } + } + } + } + ] + } + }, + "trackingParams": "CH8Q--8FGAMiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + }, + { + "toggleMenuServiceItemRenderer": { + "defaultText": { + "runs": [ + { + "text": "Save album to library" + } + ] + }, + "defaultIcon": { + "iconType": "LIBRARY_ADD" + }, + "defaultServiceEndpoint": { + "clickTrackingParams": "CH0QhP8FGAQiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "modalEndpoint": { + "modal": { + "modalWithTitleAndButtonRenderer": { + "title": { + "runs": [ + { + "text": "Save this for later" + } + ] + }, + "content": { + "runs": [ + { + "text": "Save favorites to your library after signing in" + } + ] + }, + "button": { + "buttonRenderer": { + "style": "STYLE_BLUE_TEXT", + "isDisabled": false, + "text": { + "runs": [ + { + "text": "Sign in" + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CH4Q8FsiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "signInEndpoint": { + "hack": true + } + }, + "trackingParams": "CH4Q8FsiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + } + } + } + } + }, + "toggledText": { + "runs": [ + { + "text": "Remove album from library" + } + ] + }, + "toggledIcon": { + "iconType": "LIBRARY_SAVED" + }, + "toggledServiceEndpoint": { + "clickTrackingParams": "CH0QhP8FGAQiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "likeEndpoint": { + "status": "INDIFFERENT", + "target": { + "playlistId": "OLAK5uy_mAOxQgtanvLsJZTxs5DamcJCxybYiXQyg" + } + } + }, + "trackingParams": "CH0QhP8FGAQiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Save to playlist" + } + ] + }, + "icon": { + "iconType": "ADD_TO_PLAYLIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CHsQw5QGGAUiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "modalEndpoint": { + "modal": { + "modalWithTitleAndButtonRenderer": { + "title": { + "runs": [ + { + "text": "Save this for later" + } + ] + }, + "content": { + "runs": [ + { + "text": "Make playlists and share them after signing in" + } + ] + }, + "button": { + "buttonRenderer": { + "style": "STYLE_BLUE_TEXT", + "isDisabled": false, + "text": { + "runs": [ + { + "text": "Sign in" + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CHwQ8FsiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "signInEndpoint": { + "hack": true + } + }, + "trackingParams": "CHwQ8FsiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + } + } + } + } + }, + "trackingParams": "CHsQw5QGGAUiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to artist" + } + ] + }, + "icon": { + "iconType": "ARTIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CHoQkPsFGAYiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "browseEndpoint": { + "browseId": "UCpJyCbFbdTrx0M90HCNBHFQ", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + }, + "trackingParams": "CHoQkPsFGAYiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CHkQkfsFGAciEwiguIfv3t-LAxUnHwYAHRegIEg=", + "shareEntityEndpoint": { + "serializedShareEntity": "EilPTEFLNXV5X21BT3hRZ3RhbnZMc0paVHhzNURhbWNKQ3h5YllpWFF5Zw%3D%3D", + "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL" + } + }, + "trackingParams": "CHkQkfsFGAciEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + } + ], + "trackingParams": "CHgQpzsiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlay": { + "musicItemThumbnailOverlayRenderer": { + "background": { + "verticalGradient": { + "gradientLayerColors": [ + "2147483648", + "0", + "0" + ] + } + }, + "content": { + "musicPlayButtonRenderer": { + "playNavigationEndpoint": { + "clickTrackingParams": "CHcQyN4CIhMIoLiH797fiwMVJx8GAB0XoCBI", + "watchPlaylistEndpoint": { + "playlistId": "OLAK5uy_mAOxQgtanvLsJZTxs5DamcJCxybYiXQyg" + } + }, + "trackingParams": "CHcQyN4CIhMIoLiH797fiwMVJx8GAB0XoCBI", + "playIcon": { + "iconType": "PLAY_ARROW" + }, + "pauseIcon": { + "iconType": "PAUSE" + }, + "iconColor": 4294967295, + "backgroundColor": 2566914048, + "activeBackgroundColor": 4278190080, + "loadingIndicatorColor": 14745645, + "playingIcon": { + "iconType": "VOLUME_UP" + }, + "iconLoadingColor": 1308622847, + "activeScaleFactor": 1.2, + "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_MEDIUM", + "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF", + "accessibilityPlayData": { + "accessibilityData": { + "label": "Play Salvation" + } + }, + "accessibilityPauseData": { + "accessibilityData": { + "label": "Pause Salvation" + } + } + } + }, + "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_BOTTOM_RIGHT", + "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_HOVER" + } + } + } + }, + { + "musicTwoRowItemRenderer": { + "thumbnailRenderer": { + "musicThumbnailRenderer": { + "thumbnail": { + "thumbnails": [ + { + "url": "https://lh3.googleusercontent.com/IYxE8yTIpFUu0OayA5SaxFEn6zQ7T21hpkvI8CODY9NEH1XIhyoUhGohkZuaK-xSu22BC4wjp6srNjIW=w226-h226-l90-rj", + "width": 226, + "height": 226 + }, + { + "url": "https://lh3.googleusercontent.com/IYxE8yTIpFUu0OayA5SaxFEn6zQ7T21hpkvI8CODY9NEH1XIhyoUhGohkZuaK-xSu22BC4wjp6srNjIW=w544-h544-l90-rj", + "width": 544, + "height": 544 + } + ] + }, + "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_UNSPECIFIED", + "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_ASPECT_FILL", + "trackingParams": "CHUQhL8CIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + "aspectRatio": "MUSIC_TWO_ROW_ITEM_THUMBNAIL_ASPECT_RATIO_SQUARE", + "title": { + "runs": [ + { + "text": "Waldbrand", + "navigationEndpoint": { + "clickTrackingParams": "CGYQoLMCGAQiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "browseEndpoint": { + "browseId": "MPREb_u1I69lSAe5v", + "params": "ggMrGilPTEFLNXV5X2xHUF96djB2SkRVbGVjUUR6dWdVSm1qY0Y3cHZ5Vk55WQ%3D%3D", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + } + } + ] + }, + "subtitle": { + "runs": [ + { + "text": "EP" + }, + { + "text": " • " + }, + { + "text": "Madeline Juno", + "navigationEndpoint": { + "clickTrackingParams": "CGYQoLMCGAQiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "browseEndpoint": { + "browseId": "UCpJyCbFbdTrx0M90HCNBHFQ", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + } + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CGYQoLMCGAQiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "browseEndpoint": { + "browseId": "MPREb_u1I69lSAe5v", + "params": "ggMrGilPTEFLNXV5X2xHUF96djB2SkRVbGVjUUR6dWdVSm1qY0Y3cHZ5Vk55WQ%3D%3D", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + }, + "trackingParams": "CGYQoLMCGAQiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "menu": { + "menuRenderer": { + "items": [ + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Shuffle play" + } + ] + }, + "icon": { + "iconType": "MUSIC_SHUFFLE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CHQQmvMFGAAiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "watchPlaylistEndpoint": { + "playlistId": "OLAK5uy_lGP_zv0vJDUlecQDzugUJmjcF7pvyVNyY", + "params": "wAEB8gECKAE%3D" + } + }, + "trackingParams": "CHQQmvMFGAAiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Start radio" + } + ] + }, + "icon": { + "iconType": "MIX" + }, + "navigationEndpoint": { + "clickTrackingParams": "CHMQm_MFGAEiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "watchPlaylistEndpoint": { + "playlistId": "RDAMPLOLAK5uy_lGP_zv0vJDUlecQDzugUJmjcF7pvyVNyY", + "params": "wAEB" + } + }, + "trackingParams": "CHMQm_MFGAEiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Play next" + } + ] + }, + "icon": { + "iconType": "QUEUE_PLAY_NEXT" + }, + "serviceEndpoint": { + "clickTrackingParams": "CHEQvu4FGAIiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "queueAddEndpoint": { + "queueTarget": { + "playlistId": "OLAK5uy_lGP_zv0vJDUlecQDzugUJmjcF7pvyVNyY", + "onEmptyQueue": { + "clickTrackingParams": "CHEQvu4FGAIiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "watchEndpoint": { + "playlistId": "OLAK5uy_lGP_zv0vJDUlecQDzugUJmjcF7pvyVNyY" + } + } + }, + "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO", + "commands": [ + { + "clickTrackingParams": "CHEQvu4FGAIiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Album will play next" + } + ] + }, + "trackingParams": "CHIQyscDIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + } + } + } + ] + } + }, + "trackingParams": "CHEQvu4FGAIiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_REMOTE_QUEUE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CG8Q--8FGAMiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "queueAddEndpoint": { + "queueTarget": { + "playlistId": "OLAK5uy_lGP_zv0vJDUlecQDzugUJmjcF7pvyVNyY", + "onEmptyQueue": { + "clickTrackingParams": "CG8Q--8FGAMiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "watchEndpoint": { + "playlistId": "OLAK5uy_lGP_zv0vJDUlecQDzugUJmjcF7pvyVNyY" + } + } + }, + "queueInsertPosition": "INSERT_AT_END", + "commands": [ + { + "clickTrackingParams": "CG8Q--8FGAMiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Album added to queue" + } + ] + }, + "trackingParams": "CHAQyscDIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + } + } + } + ] + } + }, + "trackingParams": "CG8Q--8FGAMiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + }, + { + "toggleMenuServiceItemRenderer": { + "defaultText": { + "runs": [ + { + "text": "Save album to library" + } + ] + }, + "defaultIcon": { + "iconType": "LIBRARY_ADD" + }, + "defaultServiceEndpoint": { + "clickTrackingParams": "CG0QhP8FGAQiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "modalEndpoint": { + "modal": { + "modalWithTitleAndButtonRenderer": { + "title": { + "runs": [ + { + "text": "Save this for later" + } + ] + }, + "content": { + "runs": [ + { + "text": "Save favorites to your library after signing in" + } + ] + }, + "button": { + "buttonRenderer": { + "style": "STYLE_BLUE_TEXT", + "isDisabled": false, + "text": { + "runs": [ + { + "text": "Sign in" + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CG4Q8FsiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "signInEndpoint": { + "hack": true + } + }, + "trackingParams": "CG4Q8FsiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + } + } + } + } + }, + "toggledText": { + "runs": [ + { + "text": "Remove album from library" + } + ] + }, + "toggledIcon": { + "iconType": "LIBRARY_SAVED" + }, + "toggledServiceEndpoint": { + "clickTrackingParams": "CG0QhP8FGAQiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "likeEndpoint": { + "status": "INDIFFERENT", + "target": { + "playlistId": "OLAK5uy_lGP_zv0vJDUlecQDzugUJmjcF7pvyVNyY" + } + } + }, + "trackingParams": "CG0QhP8FGAQiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Save to playlist" + } + ] + }, + "icon": { + "iconType": "ADD_TO_PLAYLIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CGsQw5QGGAUiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "modalEndpoint": { + "modal": { + "modalWithTitleAndButtonRenderer": { + "title": { + "runs": [ + { + "text": "Save this for later" + } + ] + }, + "content": { + "runs": [ + { + "text": "Make playlists and share them after signing in" + } + ] + }, + "button": { + "buttonRenderer": { + "style": "STYLE_BLUE_TEXT", + "isDisabled": false, + "text": { + "runs": [ + { + "text": "Sign in" + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CGwQ8FsiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "signInEndpoint": { + "hack": true + } + }, + "trackingParams": "CGwQ8FsiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + } + } + } + } + }, + "trackingParams": "CGsQw5QGGAUiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to artist" + } + ] + }, + "icon": { + "iconType": "ARTIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CGoQkPsFGAYiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "browseEndpoint": { + "browseId": "UCpJyCbFbdTrx0M90HCNBHFQ", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + }, + "trackingParams": "CGoQkPsFGAYiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CGkQkfsFGAciEwiguIfv3t-LAxUnHwYAHRegIEg=", + "shareEntityEndpoint": { + "serializedShareEntity": "EilPTEFLNXV5X2xHUF96djB2SkRVbGVjUUR6dWdVSm1qY0Y3cHZ5Vk55WQ%3D%3D", + "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL" + } + }, + "trackingParams": "CGkQkfsFGAciEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + } + ], + "trackingParams": "CGgQpzsiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlay": { + "musicItemThumbnailOverlayRenderer": { + "background": { + "verticalGradient": { + "gradientLayerColors": [ + "2147483648", + "0", + "0" + ] + } + }, + "content": { + "musicPlayButtonRenderer": { + "playNavigationEndpoint": { + "clickTrackingParams": "CGcQyN4CIhMIoLiH797fiwMVJx8GAB0XoCBI", + "watchPlaylistEndpoint": { + "playlistId": "OLAK5uy_lGP_zv0vJDUlecQDzugUJmjcF7pvyVNyY" + } + }, + "trackingParams": "CGcQyN4CIhMIoLiH797fiwMVJx8GAB0XoCBI", + "playIcon": { + "iconType": "PLAY_ARROW" + }, + "pauseIcon": { + "iconType": "PAUSE" + }, + "iconColor": 4294967295, + "backgroundColor": 2566914048, + "activeBackgroundColor": 4278190080, + "loadingIndicatorColor": 14745645, + "playingIcon": { + "iconType": "VOLUME_UP" + }, + "iconLoadingColor": 1308622847, + "activeScaleFactor": 1.2, + "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_MEDIUM", + "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF", + "accessibilityPlayData": { + "accessibilityData": { + "label": "Play Waldbrand" + } + }, + "accessibilityPauseData": { + "accessibilityData": { + "label": "Pause Waldbrand" + } + } + } + }, + "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_BOTTOM_RIGHT", + "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_HOVER" + } + } + } + }, + { + "musicTwoRowItemRenderer": { + "thumbnailRenderer": { + "musicThumbnailRenderer": { + "thumbnail": { + "thumbnails": [ + { + "url": "https://lh3.googleusercontent.com/-hbxUNxc6nSCgSlTQfWPDjJIzqEFxwvKKDX4VsQCZW45yBEHM_MzWs8tMDeomICbeRu5V4XQkTFq5ZY=w226-h226-l90-rj", + "width": 226, + "height": 226 + }, + { + "url": "https://lh3.googleusercontent.com/-hbxUNxc6nSCgSlTQfWPDjJIzqEFxwvKKDX4VsQCZW45yBEHM_MzWs8tMDeomICbeRu5V4XQkTFq5ZY=w544-h544-l90-rj", + "width": 544, + "height": 544 + } + ] + }, + "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_UNSPECIFIED", + "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_ASPECT_FILL", + "trackingParams": "CGUQhL8CIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + "aspectRatio": "MUSIC_TWO_ROW_ITEM_THUMBNAIL_ASPECT_RATIO_SQUARE", + "title": { + "runs": [ + { + "text": "Nur zu Besuch", + "navigationEndpoint": { + "clickTrackingParams": "CFYQoLMCGAUiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "browseEndpoint": { + "browseId": "MPREb_5WpGF85VGT1", + "params": "ggMrGilPTEFLNXV5X2xXOUdJQjlMVU85R1NrTDdMdUlTcC1JTWZ5TFFhV1Z3MA%3D%3D", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + } + } + ] + }, + "subtitle": { + "runs": [ + { + "text": "Album" + }, + { + "text": " • " + }, + { + "text": "Madeline Juno", + "navigationEndpoint": { + "clickTrackingParams": "CFYQoLMCGAUiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "browseEndpoint": { + "browseId": "UCpJyCbFbdTrx0M90HCNBHFQ", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + } + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CFYQoLMCGAUiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "browseEndpoint": { + "browseId": "MPREb_5WpGF85VGT1", + "params": "ggMrGilPTEFLNXV5X2xXOUdJQjlMVU85R1NrTDdMdUlTcC1JTWZ5TFFhV1Z3MA%3D%3D", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + }, + "trackingParams": "CFYQoLMCGAUiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "menu": { + "menuRenderer": { + "items": [ + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Shuffle play" + } + ] + }, + "icon": { + "iconType": "MUSIC_SHUFFLE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CGQQmvMFGAAiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "watchPlaylistEndpoint": { + "playlistId": "OLAK5uy_lW9GIB9LUO9GSkL7LuISp-IMfyLQaWVw0", + "params": "wAEB8gECKAE%3D" + } + }, + "trackingParams": "CGQQmvMFGAAiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Start radio" + } + ] + }, + "icon": { + "iconType": "MIX" + }, + "navigationEndpoint": { + "clickTrackingParams": "CGMQm_MFGAEiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "watchPlaylistEndpoint": { + "playlistId": "RDAMPLOLAK5uy_lW9GIB9LUO9GSkL7LuISp-IMfyLQaWVw0", + "params": "wAEB" + } + }, + "trackingParams": "CGMQm_MFGAEiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Play next" + } + ] + }, + "icon": { + "iconType": "QUEUE_PLAY_NEXT" + }, + "serviceEndpoint": { + "clickTrackingParams": "CGEQvu4FGAIiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "queueAddEndpoint": { + "queueTarget": { + "playlistId": "OLAK5uy_lW9GIB9LUO9GSkL7LuISp-IMfyLQaWVw0", + "onEmptyQueue": { + "clickTrackingParams": "CGEQvu4FGAIiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "watchEndpoint": { + "playlistId": "OLAK5uy_lW9GIB9LUO9GSkL7LuISp-IMfyLQaWVw0" + } + } + }, + "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO", + "commands": [ + { + "clickTrackingParams": "CGEQvu4FGAIiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Album will play next" + } + ] + }, + "trackingParams": "CGIQyscDIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + } + } + } + ] + } + }, + "trackingParams": "CGEQvu4FGAIiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_REMOTE_QUEUE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CF8Q--8FGAMiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "queueAddEndpoint": { + "queueTarget": { + "playlistId": "OLAK5uy_lW9GIB9LUO9GSkL7LuISp-IMfyLQaWVw0", + "onEmptyQueue": { + "clickTrackingParams": "CF8Q--8FGAMiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "watchEndpoint": { + "playlistId": "OLAK5uy_lW9GIB9LUO9GSkL7LuISp-IMfyLQaWVw0" + } + } + }, + "queueInsertPosition": "INSERT_AT_END", + "commands": [ + { + "clickTrackingParams": "CF8Q--8FGAMiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Album added to queue" + } + ] + }, + "trackingParams": "CGAQyscDIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + } + } + } + ] + } + }, + "trackingParams": "CF8Q--8FGAMiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + }, + { + "toggleMenuServiceItemRenderer": { + "defaultText": { + "runs": [ + { + "text": "Save album to library" + } + ] + }, + "defaultIcon": { + "iconType": "LIBRARY_ADD" + }, + "defaultServiceEndpoint": { + "clickTrackingParams": "CF0QhP8FGAQiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "modalEndpoint": { + "modal": { + "modalWithTitleAndButtonRenderer": { + "title": { + "runs": [ + { + "text": "Save this for later" + } + ] + }, + "content": { + "runs": [ + { + "text": "Save favorites to your library after signing in" + } + ] + }, + "button": { + "buttonRenderer": { + "style": "STYLE_BLUE_TEXT", + "isDisabled": false, + "text": { + "runs": [ + { + "text": "Sign in" + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CF4Q8FsiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "signInEndpoint": { + "hack": true + } + }, + "trackingParams": "CF4Q8FsiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + } + } + } + } + }, + "toggledText": { + "runs": [ + { + "text": "Remove album from library" + } + ] + }, + "toggledIcon": { + "iconType": "LIBRARY_SAVED" + }, + "toggledServiceEndpoint": { + "clickTrackingParams": "CF0QhP8FGAQiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "likeEndpoint": { + "status": "INDIFFERENT", + "target": { + "playlistId": "OLAK5uy_lW9GIB9LUO9GSkL7LuISp-IMfyLQaWVw0" + } + } + }, + "trackingParams": "CF0QhP8FGAQiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Save to playlist" + } + ] + }, + "icon": { + "iconType": "ADD_TO_PLAYLIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CFsQw5QGGAUiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "modalEndpoint": { + "modal": { + "modalWithTitleAndButtonRenderer": { + "title": { + "runs": [ + { + "text": "Save this for later" + } + ] + }, + "content": { + "runs": [ + { + "text": "Make playlists and share them after signing in" + } + ] + }, + "button": { + "buttonRenderer": { + "style": "STYLE_BLUE_TEXT", + "isDisabled": false, + "text": { + "runs": [ + { + "text": "Sign in" + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CFwQ8FsiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "signInEndpoint": { + "hack": true + } + }, + "trackingParams": "CFwQ8FsiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + } + } + } + } + }, + "trackingParams": "CFsQw5QGGAUiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to artist" + } + ] + }, + "icon": { + "iconType": "ARTIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CFoQkPsFGAYiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "browseEndpoint": { + "browseId": "UCpJyCbFbdTrx0M90HCNBHFQ", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + }, + "trackingParams": "CFoQkPsFGAYiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CFkQkfsFGAciEwiguIfv3t-LAxUnHwYAHRegIEg=", + "shareEntityEndpoint": { + "serializedShareEntity": "EilPTEFLNXV5X2xXOUdJQjlMVU85R1NrTDdMdUlTcC1JTWZ5TFFhV1Z3MA%3D%3D", + "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL" + } + }, + "trackingParams": "CFkQkfsFGAciEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + } + ], + "trackingParams": "CFgQpzsiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlay": { + "musicItemThumbnailOverlayRenderer": { + "background": { + "verticalGradient": { + "gradientLayerColors": [ + "2147483648", + "0", + "0" + ] + } + }, + "content": { + "musicPlayButtonRenderer": { + "playNavigationEndpoint": { + "clickTrackingParams": "CFcQyN4CIhMIoLiH797fiwMVJx8GAB0XoCBI", + "watchPlaylistEndpoint": { + "playlistId": "OLAK5uy_lW9GIB9LUO9GSkL7LuISp-IMfyLQaWVw0" + } + }, + "trackingParams": "CFcQyN4CIhMIoLiH797fiwMVJx8GAB0XoCBI", + "playIcon": { + "iconType": "PLAY_ARROW" + }, + "pauseIcon": { + "iconType": "PAUSE" + }, + "iconColor": 4294967295, + "backgroundColor": 2566914048, + "activeBackgroundColor": 4278190080, + "loadingIndicatorColor": 14745645, + "playingIcon": { + "iconType": "VOLUME_UP" + }, + "iconLoadingColor": 1308622847, + "activeScaleFactor": 1.2, + "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_MEDIUM", + "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF", + "accessibilityPlayData": { + "accessibilityData": { + "label": "Play Nur zu Besuch" + } + }, + "accessibilityPauseData": { + "accessibilityData": { + "label": "Pause Nur zu Besuch" + } + } + } + }, + "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_BOTTOM_RIGHT", + "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_HOVER" + } + } + } + }, + { + "musicTwoRowItemRenderer": { + "thumbnailRenderer": { + "musicThumbnailRenderer": { + "thumbnail": { + "thumbnails": [ + { + "url": "https://lh3.googleusercontent.com/mtseYPleinVHcoq4NIt0qGY3YkT9WoO5yjnKURMwyOlVGuOj-Nxs0qBsENnOzLKQQzT6StKdzVq-OcY_=w226-h226-l90-rj", + "width": 226, + "height": 226 + }, + { + "url": "https://lh3.googleusercontent.com/mtseYPleinVHcoq4NIt0qGY3YkT9WoO5yjnKURMwyOlVGuOj-Nxs0qBsENnOzLKQQzT6StKdzVq-OcY_=w544-h544-l90-rj", + "width": 544, + "height": 544 + } + ] + }, + "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_UNSPECIFIED", + "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_ASPECT_FILL", + "trackingParams": "CFUQhL8CIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + "aspectRatio": "MUSIC_TWO_ROW_ITEM_THUMBNAIL_ASPECT_RATIO_SQUARE", + "title": { + "runs": [ + { + "text": "Was bleibt", + "navigationEndpoint": { + "clickTrackingParams": "CEYQoLMCGAYiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "browseEndpoint": { + "browseId": "MPREb_zkwlAdOMq1J", + "params": "ggMrGilPTEFLNXV5X201OG1pdjJjMS1FTi0xRkVBaWxDdjNRMy1QUDlSajhBcw%3D%3D", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + } + } + ] + }, + "subtitle": { + "runs": [ + { + "text": "Album" + }, + { + "text": " • " + }, + { + "text": "Madeline Juno", + "navigationEndpoint": { + "clickTrackingParams": "CEYQoLMCGAYiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "browseEndpoint": { + "browseId": "UCpJyCbFbdTrx0M90HCNBHFQ", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + } + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CEYQoLMCGAYiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "browseEndpoint": { + "browseId": "MPREb_zkwlAdOMq1J", + "params": "ggMrGilPTEFLNXV5X201OG1pdjJjMS1FTi0xRkVBaWxDdjNRMy1QUDlSajhBcw%3D%3D", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + }, + "trackingParams": "CEYQoLMCGAYiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "menu": { + "menuRenderer": { + "items": [ + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Shuffle play" + } + ] + }, + "icon": { + "iconType": "MUSIC_SHUFFLE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CFQQmvMFGAAiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "watchPlaylistEndpoint": { + "playlistId": "OLAK5uy_m58miv2c1-EN-1FEAilCv3Q3-PP9Rj8As", + "params": "wAEB8gECKAE%3D" + } + }, + "trackingParams": "CFQQmvMFGAAiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Start radio" + } + ] + }, + "icon": { + "iconType": "MIX" + }, + "navigationEndpoint": { + "clickTrackingParams": "CFMQm_MFGAEiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "watchPlaylistEndpoint": { + "playlistId": "RDAMPLOLAK5uy_m58miv2c1-EN-1FEAilCv3Q3-PP9Rj8As", + "params": "wAEB" + } + }, + "trackingParams": "CFMQm_MFGAEiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Play next" + } + ] + }, + "icon": { + "iconType": "QUEUE_PLAY_NEXT" + }, + "serviceEndpoint": { + "clickTrackingParams": "CFEQvu4FGAIiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "queueAddEndpoint": { + "queueTarget": { + "playlistId": "OLAK5uy_m58miv2c1-EN-1FEAilCv3Q3-PP9Rj8As", + "onEmptyQueue": { + "clickTrackingParams": "CFEQvu4FGAIiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "watchEndpoint": { + "playlistId": "OLAK5uy_m58miv2c1-EN-1FEAilCv3Q3-PP9Rj8As" + } + } + }, + "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO", + "commands": [ + { + "clickTrackingParams": "CFEQvu4FGAIiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Album will play next" + } + ] + }, + "trackingParams": "CFIQyscDIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + } + } + } + ] + } + }, + "trackingParams": "CFEQvu4FGAIiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_REMOTE_QUEUE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CE8Q--8FGAMiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "queueAddEndpoint": { + "queueTarget": { + "playlistId": "OLAK5uy_m58miv2c1-EN-1FEAilCv3Q3-PP9Rj8As", + "onEmptyQueue": { + "clickTrackingParams": "CE8Q--8FGAMiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "watchEndpoint": { + "playlistId": "OLAK5uy_m58miv2c1-EN-1FEAilCv3Q3-PP9Rj8As" + } + } + }, + "queueInsertPosition": "INSERT_AT_END", + "commands": [ + { + "clickTrackingParams": "CE8Q--8FGAMiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Album added to queue" + } + ] + }, + "trackingParams": "CFAQyscDIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + } + } + } + ] + } + }, + "trackingParams": "CE8Q--8FGAMiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + }, + { + "toggleMenuServiceItemRenderer": { + "defaultText": { + "runs": [ + { + "text": "Save album to library" + } + ] + }, + "defaultIcon": { + "iconType": "LIBRARY_ADD" + }, + "defaultServiceEndpoint": { + "clickTrackingParams": "CE0QhP8FGAQiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "modalEndpoint": { + "modal": { + "modalWithTitleAndButtonRenderer": { + "title": { + "runs": [ + { + "text": "Save this for later" + } + ] + }, + "content": { + "runs": [ + { + "text": "Save favorites to your library after signing in" + } + ] + }, + "button": { + "buttonRenderer": { + "style": "STYLE_BLUE_TEXT", + "isDisabled": false, + "text": { + "runs": [ + { + "text": "Sign in" + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CE4Q8FsiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "signInEndpoint": { + "hack": true + } + }, + "trackingParams": "CE4Q8FsiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + } + } + } + } + }, + "toggledText": { + "runs": [ + { + "text": "Remove album from library" + } + ] + }, + "toggledIcon": { + "iconType": "LIBRARY_SAVED" + }, + "toggledServiceEndpoint": { + "clickTrackingParams": "CE0QhP8FGAQiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "likeEndpoint": { + "status": "INDIFFERENT", + "target": { + "playlistId": "OLAK5uy_m58miv2c1-EN-1FEAilCv3Q3-PP9Rj8As" + } + } + }, + "trackingParams": "CE0QhP8FGAQiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Save to playlist" + } + ] + }, + "icon": { + "iconType": "ADD_TO_PLAYLIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CEsQw5QGGAUiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "modalEndpoint": { + "modal": { + "modalWithTitleAndButtonRenderer": { + "title": { + "runs": [ + { + "text": "Save this for later" + } + ] + }, + "content": { + "runs": [ + { + "text": "Make playlists and share them after signing in" + } + ] + }, + "button": { + "buttonRenderer": { + "style": "STYLE_BLUE_TEXT", + "isDisabled": false, + "text": { + "runs": [ + { + "text": "Sign in" + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CEwQ8FsiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "signInEndpoint": { + "hack": true + } + }, + "trackingParams": "CEwQ8FsiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + } + } + } + } + }, + "trackingParams": "CEsQw5QGGAUiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to artist" + } + ] + }, + "icon": { + "iconType": "ARTIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CEoQkPsFGAYiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "browseEndpoint": { + "browseId": "UCpJyCbFbdTrx0M90HCNBHFQ", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + }, + "trackingParams": "CEoQkPsFGAYiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CEkQkfsFGAciEwiguIfv3t-LAxUnHwYAHRegIEg=", + "shareEntityEndpoint": { + "serializedShareEntity": "EilPTEFLNXV5X201OG1pdjJjMS1FTi0xRkVBaWxDdjNRMy1QUDlSajhBcw%3D%3D", + "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL" + } + }, + "trackingParams": "CEkQkfsFGAciEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + } + ], + "trackingParams": "CEgQpzsiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlay": { + "musicItemThumbnailOverlayRenderer": { + "background": { + "verticalGradient": { + "gradientLayerColors": [ + "2147483648", + "0", + "0" + ] + } + }, + "content": { + "musicPlayButtonRenderer": { + "playNavigationEndpoint": { + "clickTrackingParams": "CEcQyN4CIhMIoLiH797fiwMVJx8GAB0XoCBI", + "watchPlaylistEndpoint": { + "playlistId": "OLAK5uy_m58miv2c1-EN-1FEAilCv3Q3-PP9Rj8As" + } + }, + "trackingParams": "CEcQyN4CIhMIoLiH797fiwMVJx8GAB0XoCBI", + "playIcon": { + "iconType": "PLAY_ARROW" + }, + "pauseIcon": { + "iconType": "PAUSE" + }, + "iconColor": 4294967295, + "backgroundColor": 2566914048, + "activeBackgroundColor": 4278190080, + "loadingIndicatorColor": 14745645, + "playingIcon": { + "iconType": "VOLUME_UP" + }, + "iconLoadingColor": 1308622847, + "activeScaleFactor": 1.2, + "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_MEDIUM", + "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF", + "accessibilityPlayData": { + "accessibilityData": { + "label": "Play Was bleibt" + } + }, + "accessibilityPauseData": { + "accessibilityData": { + "label": "Pause Was bleibt" + } + } + } + }, + "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_BOTTOM_RIGHT", + "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_HOVER" + } + } + } + }, + { + "musicTwoRowItemRenderer": { + "thumbnailRenderer": { + "musicThumbnailRenderer": { + "thumbnail": { + "thumbnails": [ + { + "url": "https://lh3.googleusercontent.com/Cy9iry8cYVOupKHKN7T_8Aky9svJ1AV0BS7E5DhfExsh1Q4EF6gRFpLs3Uu0Alv7EyiGM40ff0u_o2A=w226-h226-l90-rj", + "width": 226, + "height": 226 + }, + { + "url": "https://lh3.googleusercontent.com/Cy9iry8cYVOupKHKN7T_8Aky9svJ1AV0BS7E5DhfExsh1Q4EF6gRFpLs3Uu0Alv7EyiGM40ff0u_o2A=w544-h544-l90-rj", + "width": 544, + "height": 544 + } + ] + }, + "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_UNSPECIFIED", + "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_ASPECT_FILL", + "trackingParams": "CEUQhL8CIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + "aspectRatio": "MUSIC_TWO_ROW_ITEM_THUMBNAIL_ASPECT_RATIO_SQUARE", + "title": { + "runs": [ + { + "text": "Bevor ich dich vergesse", + "navigationEndpoint": { + "clickTrackingParams": "CDYQoLMCGAciEwiguIfv3t-LAxUnHwYAHRegIEg=", + "browseEndpoint": { + "browseId": "MPREb_pEOfMrLyCcU", + "params": "ggMrGilPTEFLNXV5X25OTy00MlVPMzAxdE5mdGQta2pVOGp3MnFGem9uUnpFbw%3D%3D", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + } + } + ] + }, + "subtitle": { + "runs": [ + { + "text": "EP" + }, + { + "text": " • " + }, + { + "text": "Madeline Juno", + "navigationEndpoint": { + "clickTrackingParams": "CDYQoLMCGAciEwiguIfv3t-LAxUnHwYAHRegIEg=", + "browseEndpoint": { + "browseId": "UCpJyCbFbdTrx0M90HCNBHFQ", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + } + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CDYQoLMCGAciEwiguIfv3t-LAxUnHwYAHRegIEg=", + "browseEndpoint": { + "browseId": "MPREb_pEOfMrLyCcU", + "params": "ggMrGilPTEFLNXV5X25OTy00MlVPMzAxdE5mdGQta2pVOGp3MnFGem9uUnpFbw%3D%3D", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + }, + "trackingParams": "CDYQoLMCGAciEwiguIfv3t-LAxUnHwYAHRegIEg=", + "menu": { + "menuRenderer": { + "items": [ + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Shuffle play" + } + ] + }, + "icon": { + "iconType": "MUSIC_SHUFFLE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CEQQmvMFGAAiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "watchPlaylistEndpoint": { + "playlistId": "OLAK5uy_nNO-42UO301tNftd-kjU8jw2qFzonRzEo", + "params": "wAEB8gECKAE%3D" + } + }, + "trackingParams": "CEQQmvMFGAAiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Start radio" + } + ] + }, + "icon": { + "iconType": "MIX" + }, + "navigationEndpoint": { + "clickTrackingParams": "CEMQm_MFGAEiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "watchPlaylistEndpoint": { + "playlistId": "RDAMPLOLAK5uy_nNO-42UO301tNftd-kjU8jw2qFzonRzEo", + "params": "wAEB" + } + }, + "trackingParams": "CEMQm_MFGAEiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Play next" + } + ] + }, + "icon": { + "iconType": "QUEUE_PLAY_NEXT" + }, + "serviceEndpoint": { + "clickTrackingParams": "CEEQvu4FGAIiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "queueAddEndpoint": { + "queueTarget": { + "playlistId": "OLAK5uy_nNO-42UO301tNftd-kjU8jw2qFzonRzEo", + "onEmptyQueue": { + "clickTrackingParams": "CEEQvu4FGAIiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "watchEndpoint": { + "playlistId": "OLAK5uy_nNO-42UO301tNftd-kjU8jw2qFzonRzEo" + } + } + }, + "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO", + "commands": [ + { + "clickTrackingParams": "CEEQvu4FGAIiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Album will play next" + } + ] + }, + "trackingParams": "CEIQyscDIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + } + } + } + ] + } + }, + "trackingParams": "CEEQvu4FGAIiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_REMOTE_QUEUE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CD8Q--8FGAMiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "queueAddEndpoint": { + "queueTarget": { + "playlistId": "OLAK5uy_nNO-42UO301tNftd-kjU8jw2qFzonRzEo", + "onEmptyQueue": { + "clickTrackingParams": "CD8Q--8FGAMiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "watchEndpoint": { + "playlistId": "OLAK5uy_nNO-42UO301tNftd-kjU8jw2qFzonRzEo" + } + } + }, + "queueInsertPosition": "INSERT_AT_END", + "commands": [ + { + "clickTrackingParams": "CD8Q--8FGAMiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Album added to queue" + } + ] + }, + "trackingParams": "CEAQyscDIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + } + } + } + ] + } + }, + "trackingParams": "CD8Q--8FGAMiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + }, + { + "toggleMenuServiceItemRenderer": { + "defaultText": { + "runs": [ + { + "text": "Save album to library" + } + ] + }, + "defaultIcon": { + "iconType": "LIBRARY_ADD" + }, + "defaultServiceEndpoint": { + "clickTrackingParams": "CD0QhP8FGAQiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "modalEndpoint": { + "modal": { + "modalWithTitleAndButtonRenderer": { + "title": { + "runs": [ + { + "text": "Save this for later" + } + ] + }, + "content": { + "runs": [ + { + "text": "Save favorites to your library after signing in" + } + ] + }, + "button": { + "buttonRenderer": { + "style": "STYLE_BLUE_TEXT", + "isDisabled": false, + "text": { + "runs": [ + { + "text": "Sign in" + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CD4Q8FsiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "signInEndpoint": { + "hack": true + } + }, + "trackingParams": "CD4Q8FsiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + } + } + } + } + }, + "toggledText": { + "runs": [ + { + "text": "Remove album from library" + } + ] + }, + "toggledIcon": { + "iconType": "LIBRARY_SAVED" + }, + "toggledServiceEndpoint": { + "clickTrackingParams": "CD0QhP8FGAQiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "likeEndpoint": { + "status": "INDIFFERENT", + "target": { + "playlistId": "OLAK5uy_nNO-42UO301tNftd-kjU8jw2qFzonRzEo" + } + } + }, + "trackingParams": "CD0QhP8FGAQiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Save to playlist" + } + ] + }, + "icon": { + "iconType": "ADD_TO_PLAYLIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CDsQw5QGGAUiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "modalEndpoint": { + "modal": { + "modalWithTitleAndButtonRenderer": { + "title": { + "runs": [ + { + "text": "Save this for later" + } + ] + }, + "content": { + "runs": [ + { + "text": "Make playlists and share them after signing in" + } + ] + }, + "button": { + "buttonRenderer": { + "style": "STYLE_BLUE_TEXT", + "isDisabled": false, + "text": { + "runs": [ + { + "text": "Sign in" + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CDwQ8FsiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "signInEndpoint": { + "hack": true + } + }, + "trackingParams": "CDwQ8FsiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + } + } + } + } + }, + "trackingParams": "CDsQw5QGGAUiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to artist" + } + ] + }, + "icon": { + "iconType": "ARTIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CDoQkPsFGAYiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "browseEndpoint": { + "browseId": "UCpJyCbFbdTrx0M90HCNBHFQ", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + }, + "trackingParams": "CDoQkPsFGAYiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CDkQkfsFGAciEwiguIfv3t-LAxUnHwYAHRegIEg=", + "shareEntityEndpoint": { + "serializedShareEntity": "EilPTEFLNXV5X25OTy00MlVPMzAxdE5mdGQta2pVOGp3MnFGem9uUnpFbw%3D%3D", + "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL" + } + }, + "trackingParams": "CDkQkfsFGAciEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + } + ], + "trackingParams": "CDgQpzsiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlay": { + "musicItemThumbnailOverlayRenderer": { + "background": { + "verticalGradient": { + "gradientLayerColors": [ + "2147483648", + "0", + "0" + ] + } + }, + "content": { + "musicPlayButtonRenderer": { + "playNavigationEndpoint": { + "clickTrackingParams": "CDcQyN4CIhMIoLiH797fiwMVJx8GAB0XoCBI", + "watchPlaylistEndpoint": { + "playlistId": "OLAK5uy_nNO-42UO301tNftd-kjU8jw2qFzonRzEo" + } + }, + "trackingParams": "CDcQyN4CIhMIoLiH797fiwMVJx8GAB0XoCBI", + "playIcon": { + "iconType": "PLAY_ARROW" + }, + "pauseIcon": { + "iconType": "PAUSE" + }, + "iconColor": 4294967295, + "backgroundColor": 2566914048, + "activeBackgroundColor": 4278190080, + "loadingIndicatorColor": 14745645, + "playingIcon": { + "iconType": "VOLUME_UP" + }, + "iconLoadingColor": 1308622847, + "activeScaleFactor": 1.2, + "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_MEDIUM", + "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF", + "accessibilityPlayData": { + "accessibilityData": { + "label": "Play Bevor ich dich vergesse" + } + }, + "accessibilityPauseData": { + "accessibilityData": { + "label": "Pause Bevor ich dich vergesse" + } + } + } + }, + "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_BOTTOM_RIGHT", + "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_HOVER" + } + } + } + }, + { + "musicTwoRowItemRenderer": { + "thumbnailRenderer": { + "musicThumbnailRenderer": { + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/9sIeyUVpnks/sddefault.jpg?sqp=-oaymwEWCJADEOEBIAQqCghqEJQEGHgg6AJIWg&rs=AMzJL3lzaxl8dWUrA3I33zo2zHOekyamxQ", + "width": 400, + "height": 225 + }, + { + "url": "https://i.ytimg.com/vi/9sIeyUVpnks/hq720.jpg?sqp=-oaymwEXCKAGEMIDIAQqCwjVARCqCBh4INgESFo&rs=AMzJL3kKbq3EBp8SRYYxLIqyzFEg2nbyuA", + "width": 800, + "height": 450 + } + ] + }, + "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_UNSPECIFIED", + "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_ASPECT_FILL", + "trackingParams": "CDUQhL8CIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + "aspectRatio": "MUSIC_TWO_ROW_ITEM_THUMBNAIL_ASPECT_RATIO_RECTANGLE_16_9", + "title": { + "runs": [ + { + "text": "Schatten ohne Licht" + } + ] + }, + "subtitle": { + "runs": [ + { + "text": "Video" + }, + { + "text": " • " + }, + { + "text": "Madeline Juno", + "navigationEndpoint": { + "clickTrackingParams": "CCcQoLMCGAgiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "browseEndpoint": { + "browseId": "UCpJyCbFbdTrx0M90HCNBHFQ", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + } + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CCcQoLMCGAgiEwiguIfv3t-LAxUnHwYAHRegIEhIy7ymq5TZh-H2AQ==", + "watchEndpoint": { + "videoId": "9sIeyUVpnks", + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_OMV" + } + } + } + }, + "trackingParams": "CCcQoLMCGAgiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "menu": { + "menuRenderer": { + "items": [ + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Start radio" + } + ] + }, + "icon": { + "iconType": "MIX" + }, + "navigationEndpoint": { + "clickTrackingParams": "CDQQm_MFGAAiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "watchEndpoint": { + "videoId": "9sIeyUVpnks", + "playlistId": "RDAMVM9sIeyUVpnks", + "params": "wAEB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GhFSREFNVk05c0lleVVWcG5rcw%3D%3D" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_OMV" + } + } + } + }, + "trackingParams": "CDQQm_MFGAAiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Play next" + } + ] + }, + "icon": { + "iconType": "QUEUE_PLAY_NEXT" + }, + "serviceEndpoint": { + "clickTrackingParams": "CDIQvu4FGAEiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "9sIeyUVpnks", + "onEmptyQueue": { + "clickTrackingParams": "CDIQvu4FGAEiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "watchEndpoint": { + "videoId": "9sIeyUVpnks" + } + } + }, + "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO", + "commands": [ + { + "clickTrackingParams": "CDIQvu4FGAEiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song will play next" + } + ] + }, + "trackingParams": "CDMQyscDIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + } + } + } + ] + } + }, + "trackingParams": "CDIQvu4FGAEiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_REMOTE_QUEUE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CDAQ--8FGAIiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "9sIeyUVpnks", + "onEmptyQueue": { + "clickTrackingParams": "CDAQ--8FGAIiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "watchEndpoint": { + "videoId": "9sIeyUVpnks" + } + } + }, + "queueInsertPosition": "INSERT_AT_END", + "commands": [ + { + "clickTrackingParams": "CDAQ--8FGAIiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song added to queue" + } + ] + }, + "trackingParams": "CDEQyscDIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + } + } + } + ] + } + }, + "trackingParams": "CDAQ--8FGAIiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + }, + { + "toggleMenuServiceItemRenderer": { + "defaultText": { + "runs": [ + { + "text": "Add to liked songs" + } + ] + }, + "defaultIcon": { + "iconType": "FAVORITE" + }, + "defaultServiceEndpoint": { + "clickTrackingParams": "CC4QjJ8GGAMiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "modalEndpoint": { + "modal": { + "modalWithTitleAndButtonRenderer": { + "title": { + "runs": [ + { + "text": "Like this song" + } + ] + }, + "content": { + "runs": [ + { + "text": "Improve recommendations and save music after signing in" + } + ] + }, + "button": { + "buttonRenderer": { + "style": "STYLE_BLUE_TEXT", + "isDisabled": false, + "text": { + "runs": [ + { + "text": "Sign in" + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CC8Q8FsiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "signInEndpoint": { + "hack": true + } + }, + "trackingParams": "CC8Q8FsiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + } + } + } + } + }, + "toggledText": { + "runs": [ + { + "text": "Remove from liked songs" + } + ] + }, + "toggledIcon": { + "iconType": "UNFAVORITE" + }, + "trackingParams": "CC4QjJ8GGAMiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Save to playlist" + } + ] + }, + "icon": { + "iconType": "ADD_TO_PLAYLIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CCwQw5QGGAQiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "modalEndpoint": { + "modal": { + "modalWithTitleAndButtonRenderer": { + "title": { + "runs": [ + { + "text": "Save this for later" + } + ] + }, + "content": { + "runs": [ + { + "text": "Make playlists and share them after signing in" + } + ] + }, + "button": { + "buttonRenderer": { + "style": "STYLE_BLUE_TEXT", + "isDisabled": false, + "text": { + "runs": [ + { + "text": "Sign in" + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CC0Q8FsiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "signInEndpoint": { + "hack": true + } + }, + "trackingParams": "CC0Q8FsiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + } + } + } + } + }, + "trackingParams": "CCwQw5QGGAQiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to artist" + } + ] + }, + "icon": { + "iconType": "ARTIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CCsQkPsFGAUiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "browseEndpoint": { + "browseId": "UCpJyCbFbdTrx0M90HCNBHFQ", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + }, + "trackingParams": "CCsQkPsFGAUiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CCoQkfsFGAYiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "shareEntityEndpoint": { + "serializedShareEntity": "Cgs5c0lleVVWcG5rcw%3D%3D", + "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL" + } + }, + "trackingParams": "CCoQkfsFGAYiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + } + ], + "trackingParams": "CCkQpzsiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlay": { + "musicItemThumbnailOverlayRenderer": { + "background": { + "verticalGradient": { + "gradientLayerColors": [ + "2147483648", + "2147483648" + ] + } + }, + "content": { + "musicPlayButtonRenderer": { + "playNavigationEndpoint": { + "clickTrackingParams": "CCgQyN4CIhMIoLiH797fiwMVJx8GAB0XoCBI", + "watchEndpoint": { + "videoId": "9sIeyUVpnks", + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_OMV" + } + } + } + }, + "trackingParams": "CCgQyN4CIhMIoLiH797fiwMVJx8GAB0XoCBI", + "playIcon": { + "iconType": "PLAY_ARROW" + }, + "pauseIcon": { + "iconType": "PAUSE" + }, + "iconColor": 4294967295, + "backgroundColor": 0, + "activeBackgroundColor": 0, + "loadingIndicatorColor": 14745645, + "playingIcon": { + "iconType": "VOLUME_UP" + }, + "iconLoadingColor": 0, + "activeScaleFactor": 1, + "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_HUGE", + "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_ANCESTOR", + "accessibilityPlayData": { + "accessibilityData": { + "label": "Play Schatten ohne Licht - Madeline Juno" + } + }, + "accessibilityPauseData": { + "accessibilityData": { + "label": "Pause Schatten ohne Licht - Madeline Juno" + } + } + } + }, + "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_CENTERED", + "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_PERSISTENT" + } + } + } + }, + { + "musicTwoRowItemRenderer": { + "thumbnailRenderer": { + "musicThumbnailRenderer": { + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/Fh7olM8oPNA/sddefault.jpg?sqp=-oaymwEWCJADEOEBIAQqCghqEJQEGHgg6AJIWg&rs=AMzJL3lZDDNffI-ibSXKPdXtmynSeG26hQ", + "width": 400, + "height": 225 + }, + { + "url": "https://i.ytimg.com/vi/Fh7olM8oPNA/hq720.jpg?sqp=-oaymwEXCKAGEMIDIAQqCwjVARCqCBh4INgESFo&rs=AMzJL3lNJF1ZIev5m2TVNVh4s-AhCpyz1g", + "width": 800, + "height": 450 + } + ] + }, + "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_UNSPECIFIED", + "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_ASPECT_FILL", + "trackingParams": "CCYQhL8CIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + "aspectRatio": "MUSIC_TWO_ROW_ITEM_THUMBNAIL_ASPECT_RATIO_RECTANGLE_16_9", + "title": { + "runs": [ + { + "text": "Madeline Juno - 99 Probleme (Akustik Version)" + } + ] + }, + "subtitle": { + "runs": [ + { + "text": "Video" + }, + { + "text": " • " + }, + { + "text": "Madeline Juno", + "navigationEndpoint": { + "clickTrackingParams": "CBgQoLMCGAkiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "browseEndpoint": { + "browseId": "UCpJyCbFbdTrx0M90HCNBHFQ", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + } + }, + { + "text": " & " + }, + { + "text": "Max Giesinger", + "navigationEndpoint": { + "clickTrackingParams": "CBgQoLMCGAkiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "browseEndpoint": { + "browseId": "UCEHalRyK7ZSFafTtAn3uYIA", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + } + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CBgQoLMCGAkiEwiguIfv3t-LAxUnHwYAHRegIEhI0Pmg-cySuo8W", + "watchEndpoint": { + "videoId": "Fh7olM8oPNA", + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_OMV" + } + } + } + }, + "trackingParams": "CBgQoLMCGAkiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "menu": { + "menuRenderer": { + "items": [ + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Start radio" + } + ] + }, + "icon": { + "iconType": "MIX" + }, + "navigationEndpoint": { + "clickTrackingParams": "CCUQm_MFGAAiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "watchEndpoint": { + "videoId": "Fh7olM8oPNA", + "playlistId": "RDAMVMFh7olM8oPNA", + "params": "wAEB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GhFSREFNVk1GaDdvbE04b1BOQQ%3D%3D" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_OMV" + } + } + } + }, + "trackingParams": "CCUQm_MFGAAiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Play next" + } + ] + }, + "icon": { + "iconType": "QUEUE_PLAY_NEXT" + }, + "serviceEndpoint": { + "clickTrackingParams": "CCMQvu4FGAEiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "Fh7olM8oPNA", + "onEmptyQueue": { + "clickTrackingParams": "CCMQvu4FGAEiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "watchEndpoint": { + "videoId": "Fh7olM8oPNA" + } + } + }, + "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO", + "commands": [ + { + "clickTrackingParams": "CCMQvu4FGAEiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song will play next" + } + ] + }, + "trackingParams": "CCQQyscDIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + } + } + } + ] + } + }, + "trackingParams": "CCMQvu4FGAEiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_REMOTE_QUEUE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CCEQ--8FGAIiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "Fh7olM8oPNA", + "onEmptyQueue": { + "clickTrackingParams": "CCEQ--8FGAIiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "watchEndpoint": { + "videoId": "Fh7olM8oPNA" + } + } + }, + "queueInsertPosition": "INSERT_AT_END", + "commands": [ + { + "clickTrackingParams": "CCEQ--8FGAIiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song added to queue" + } + ] + }, + "trackingParams": "CCIQyscDIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + } + } + } + ] + } + }, + "trackingParams": "CCEQ--8FGAIiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + }, + { + "toggleMenuServiceItemRenderer": { + "defaultText": { + "runs": [ + { + "text": "Add to liked songs" + } + ] + }, + "defaultIcon": { + "iconType": "FAVORITE" + }, + "defaultServiceEndpoint": { + "clickTrackingParams": "CB8QjJ8GGAMiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "modalEndpoint": { + "modal": { + "modalWithTitleAndButtonRenderer": { + "title": { + "runs": [ + { + "text": "Like this song" + } + ] + }, + "content": { + "runs": [ + { + "text": "Improve recommendations and save music after signing in" + } + ] + }, + "button": { + "buttonRenderer": { + "style": "STYLE_BLUE_TEXT", + "isDisabled": false, + "text": { + "runs": [ + { + "text": "Sign in" + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CCAQ8FsiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "signInEndpoint": { + "hack": true + } + }, + "trackingParams": "CCAQ8FsiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + } + } + } + } + }, + "toggledText": { + "runs": [ + { + "text": "Remove from liked songs" + } + ] + }, + "toggledIcon": { + "iconType": "UNFAVORITE" + }, + "trackingParams": "CB8QjJ8GGAMiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Save to playlist" + } + ] + }, + "icon": { + "iconType": "ADD_TO_PLAYLIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CB0Qw5QGGAQiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "modalEndpoint": { + "modal": { + "modalWithTitleAndButtonRenderer": { + "title": { + "runs": [ + { + "text": "Save this for later" + } + ] + }, + "content": { + "runs": [ + { + "text": "Make playlists and share them after signing in" + } + ] + }, + "button": { + "buttonRenderer": { + "style": "STYLE_BLUE_TEXT", + "isDisabled": false, + "text": { + "runs": [ + { + "text": "Sign in" + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CB4Q8FsiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "signInEndpoint": { + "hack": true + } + }, + "trackingParams": "CB4Q8FsiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + } + } + } + } + }, + "trackingParams": "CB0Qw5QGGAQiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to artist" + } + ] + }, + "icon": { + "iconType": "ARTIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CBwQkPsFGAUiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "browseEndpoint": { + "browseId": "UCpJyCbFbdTrx0M90HCNBHFQ", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + }, + "trackingParams": "CBwQkPsFGAUiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CBsQkfsFGAYiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "shareEntityEndpoint": { + "serializedShareEntity": "CgtGaDdvbE04b1BOQQ%3D%3D", + "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL" + } + }, + "trackingParams": "CBsQkfsFGAYiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + } + ], + "trackingParams": "CBoQpzsiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlay": { + "musicItemThumbnailOverlayRenderer": { + "background": { + "verticalGradient": { + "gradientLayerColors": [ + "2147483648", + "2147483648" + ] + } + }, + "content": { + "musicPlayButtonRenderer": { + "playNavigationEndpoint": { + "clickTrackingParams": "CBkQyN4CIhMIoLiH797fiwMVJx8GAB0XoCBI", + "watchEndpoint": { + "videoId": "Fh7olM8oPNA", + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_OMV" + } + } + } + }, + "trackingParams": "CBkQyN4CIhMIoLiH797fiwMVJx8GAB0XoCBI", + "playIcon": { + "iconType": "PLAY_ARROW" + }, + "pauseIcon": { + "iconType": "PAUSE" + }, + "iconColor": 4294967295, + "backgroundColor": 0, + "activeBackgroundColor": 0, + "loadingIndicatorColor": 14745645, + "playingIcon": { + "iconType": "VOLUME_UP" + }, + "iconLoadingColor": 0, + "activeScaleFactor": 1, + "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_HUGE", + "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_ANCESTOR", + "accessibilityPlayData": { + "accessibilityData": { + "label": "Play Madeline Juno - 99 Probleme (Akustik Version) - Madeline Juno" + } + }, + "accessibilityPauseData": { + "accessibilityData": { + "label": "Pause Madeline Juno - 99 Probleme (Akustik Version) - Madeline Juno" + } + } + } + }, + "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_CENTERED", + "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_PERSISTENT" + } + } + } + } + ], + "trackingParams": "CBcQobMCGAEiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "itemSize": "COLLECTION_STYLE_ITEM_SIZE_MEDIUM" + } + } + ], + "trackingParams": "CBYQui8iEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + }, + "tabs": [ + { + "tabRenderer": { + "content": { + "sectionListRenderer": { + "contents": [ + { + "musicResponsiveHeaderRenderer": { + "thumbnail": { + "musicThumbnailRenderer": { + "thumbnail": { + "thumbnails": [ + { + "url": "https://lh3.googleusercontent.com/IYxE8yTIpFUu0OayA5SaxFEn6zQ7T21hpkvI8CODY9NEH1XIhyoUhGohkZuaK-xSu22BC4wjp6srNjIW=w60-h60-l90-rj", + "width": 60, + "height": 60 + }, + { + "url": "https://lh3.googleusercontent.com/IYxE8yTIpFUu0OayA5SaxFEn6zQ7T21hpkvI8CODY9NEH1XIhyoUhGohkZuaK-xSu22BC4wjp6srNjIW=w120-h120-l90-rj", + "width": 120, + "height": 120 + }, + { + "url": "https://lh3.googleusercontent.com/IYxE8yTIpFUu0OayA5SaxFEn6zQ7T21hpkvI8CODY9NEH1XIhyoUhGohkZuaK-xSu22BC4wjp6srNjIW=w226-h226-l90-rj", + "width": 226, + "height": 226 + }, + { + "url": "https://lh3.googleusercontent.com/IYxE8yTIpFUu0OayA5SaxFEn6zQ7T21hpkvI8CODY9NEH1XIhyoUhGohkZuaK-xSu22BC4wjp6srNjIW=w544-h544-l90-rj", + "width": 544, + "height": 544 + } + ] + }, + "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_UNSPECIFIED", + "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_UNSPECIFIED", + "trackingParams": "CBUQhL8CIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + "buttons": [ + { + "toggleButtonRenderer": { + "isToggled": false, + "isDisabled": false, + "defaultIcon": { + "iconType": "LIBRARY_ADD" + }, + "toggledIcon": { + "iconType": "LIBRARY_SAVED" + }, + "trackingParams": "CBMQmE0YACITCKC4h-_e34sDFScfBgAdF6AgSA==", + "defaultNavigationEndpoint": { + "clickTrackingParams": "CBMQmE0YACITCKC4h-_e34sDFScfBgAdF6AgSA==", + "modalEndpoint": { + "modal": { + "modalWithTitleAndButtonRenderer": { + "title": { + "runs": [ + { + "text": "Save this for later" + } + ] + }, + "content": { + "runs": [ + { + "text": "Save favorites to your library after signing in" + } + ] + }, + "button": { + "buttonRenderer": { + "style": "STYLE_BLUE_TEXT", + "isDisabled": false, + "text": { + "runs": [ + { + "text": "Sign in" + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CBQQ8FsiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "signInEndpoint": { + "hack": true + } + }, + "trackingParams": "CBQQ8FsiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + } + } + } + } + }, + "accessibilityData": { + "accessibilityData": { + "label": "Save to library" + } + }, + "toggledAccessibilityData": { + "accessibilityData": { + "label": "Remove from library" + } + } + } + }, + { + "musicPlayButtonRenderer": { + "playNavigationEndpoint": { + "clickTrackingParams": "CBIQyN4CGAEiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "watchPlaylistEndpoint": { + "playlistId": "OLAK5uy_lGP_zv0vJDUlecQDzugUJmjcF7pvyVNyY" + } + }, + "trackingParams": "CBIQyN4CGAEiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "playIcon": { + "iconType": "PLAY_ARROW" + }, + "pauseIcon": { + "iconType": "PAUSE" + }, + "iconColor": 4294967295, + "backgroundColor": 0, + "activeBackgroundColor": 0, + "loadingIndicatorColor": 14745645, + "playingIcon": { + "iconType": "PAUSE" + }, + "iconLoadingColor": 0, + "activeScaleFactor": 1, + "accessibilityPlayData": { + "accessibilityData": { + "label": "Play Waldbrand" + } + }, + "accessibilityPauseData": { + "accessibilityData": { + "label": "Pause Waldbrand" + } + } + } + }, + { + "menuRenderer": { + "items": [ + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Shuffle play" + } + ] + }, + "icon": { + "iconType": "MUSIC_SHUFFLE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CAYQpzsYAiITCKC4h-_e34sDFScfBgAdF6AgSA==", + "watchPlaylistEndpoint": { + "playlistId": "OLAK5uy_lGP_zv0vJDUlecQDzugUJmjcF7pvyVNyY", + "params": "wAEB8gECKAE%3D" + } + }, + "trackingParams": "CAYQpzsYAiITCKC4h-_e34sDFScfBgAdF6AgSA==" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Start radio" + } + ] + }, + "icon": { + "iconType": "MIX" + }, + "navigationEndpoint": { + "clickTrackingParams": "CBEQm_MFGAEiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "watchPlaylistEndpoint": { + "playlistId": "RDAMPLOLAK5uy_lGP_zv0vJDUlecQDzugUJmjcF7pvyVNyY", + "params": "wAEB" + } + }, + "trackingParams": "CBEQm_MFGAEiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Play next" + } + ] + }, + "icon": { + "iconType": "QUEUE_PLAY_NEXT" + }, + "serviceEndpoint": { + "clickTrackingParams": "CA8Qvu4FGAIiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "queueAddEndpoint": { + "queueTarget": { + "playlistId": "OLAK5uy_lGP_zv0vJDUlecQDzugUJmjcF7pvyVNyY", + "onEmptyQueue": { + "clickTrackingParams": "CA8Qvu4FGAIiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "watchEndpoint": { + "playlistId": "OLAK5uy_lGP_zv0vJDUlecQDzugUJmjcF7pvyVNyY" + } + } + }, + "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO", + "commands": [ + { + "clickTrackingParams": "CA8Qvu4FGAIiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Album will play next" + } + ] + }, + "trackingParams": "CBAQyscDIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + } + } + } + ] + } + }, + "trackingParams": "CA8Qvu4FGAIiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_REMOTE_QUEUE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CA0Q--8FGAMiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "queueAddEndpoint": { + "queueTarget": { + "playlistId": "OLAK5uy_lGP_zv0vJDUlecQDzugUJmjcF7pvyVNyY", + "onEmptyQueue": { + "clickTrackingParams": "CA0Q--8FGAMiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "watchEndpoint": { + "playlistId": "OLAK5uy_lGP_zv0vJDUlecQDzugUJmjcF7pvyVNyY" + } + } + }, + "queueInsertPosition": "INSERT_AT_END", + "commands": [ + { + "clickTrackingParams": "CA0Q--8FGAMiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Album added to queue" + } + ] + }, + "trackingParams": "CA4QyscDIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + } + } + } + ] + } + }, + "trackingParams": "CA0Q--8FGAMiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + }, + { + "toggleMenuServiceItemRenderer": { + "defaultText": { + "runs": [ + { + "text": "Save album to library" + } + ] + }, + "defaultIcon": { + "iconType": "LIBRARY_ADD" + }, + "defaultServiceEndpoint": { + "clickTrackingParams": "CAsQhP8FGAQiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "modalEndpoint": { + "modal": { + "modalWithTitleAndButtonRenderer": { + "title": { + "runs": [ + { + "text": "Save this for later" + } + ] + }, + "content": { + "runs": [ + { + "text": "Save favorites to your library after signing in" + } + ] + }, + "button": { + "buttonRenderer": { + "style": "STYLE_BLUE_TEXT", + "isDisabled": false, + "text": { + "runs": [ + { + "text": "Sign in" + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CAwQ8FsiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "signInEndpoint": { + "hack": true + } + }, + "trackingParams": "CAwQ8FsiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + } + } + } + } + }, + "toggledText": { + "runs": [ + { + "text": "Remove album from library" + } + ] + }, + "toggledIcon": { + "iconType": "LIBRARY_SAVED" + }, + "toggledServiceEndpoint": { + "clickTrackingParams": "CAsQhP8FGAQiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "likeEndpoint": { + "status": "INDIFFERENT", + "target": { + "playlistId": "OLAK5uy_lGP_zv0vJDUlecQDzugUJmjcF7pvyVNyY" + } + } + }, + "trackingParams": "CAsQhP8FGAQiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Save to playlist" + } + ] + }, + "icon": { + "iconType": "ADD_TO_PLAYLIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CAkQw5QGGAUiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "modalEndpoint": { + "modal": { + "modalWithTitleAndButtonRenderer": { + "title": { + "runs": [ + { + "text": "Save this for later" + } + ] + }, + "content": { + "runs": [ + { + "text": "Make playlists and share them after signing in" + } + ] + }, + "button": { + "buttonRenderer": { + "style": "STYLE_BLUE_TEXT", + "isDisabled": false, + "text": { + "runs": [ + { + "text": "Sign in" + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CAoQ8FsiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "signInEndpoint": { + "hack": true + } + }, + "trackingParams": "CAoQ8FsiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + } + } + } + } + }, + "trackingParams": "CAkQw5QGGAUiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to artist" + } + ] + }, + "icon": { + "iconType": "ARTIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CAgQkPsFGAYiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "browseEndpoint": { + "browseId": "UCpJyCbFbdTrx0M90HCNBHFQ", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + }, + "trackingParams": "CAgQkPsFGAYiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CAcQkfsFGAciEwiguIfv3t-LAxUnHwYAHRegIEg=", + "shareEntityEndpoint": { + "serializedShareEntity": "EilPTEFLNXV5X2xHUF96djB2SkRVbGVjUUR6dWdVSm1qY0Y3cHZ5Vk55WQ%3D%3D", + "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL" + } + }, + "trackingParams": "CAcQkfsFGAciEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + } + ], + "trackingParams": "CAYQpzsYAiITCKC4h-_e34sDFScfBgAdF6AgSA==", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + } + ], + "title": { + "runs": [ + { + "text": "Waldbrand" + } + ] + }, + "subtitle": { + "runs": [ + { + "text": "EP" + }, + { + "text": " • " + }, + { + "text": "2016" + } + ] + }, + "trackingParams": "CAQQneEIGAAiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "straplineTextOne": { + "runs": [ + { + "text": "Madeline Juno", + "navigationEndpoint": { + "clickTrackingParams": "CAQQneEIGAAiEwiguIfv3t-LAxUnHwYAHRegIEg=", + "browseEndpoint": { + "browseId": "UCpJyCbFbdTrx0M90HCNBHFQ", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + } + } + ] + }, + "straplineThumbnail": { + "musicThumbnailRenderer": { + "thumbnail": { + "thumbnails": [ + { + "url": "https://lh3.googleusercontent.com/XOjaymqJY57PvxnDjUR8yUvCp6izuPTiBOGQHK6ebQ8uBpgRGgZoDjliQXnydKyg6mzv8XDTV5lLga8=w60-h60-p-l90-rj", + "width": 60, + "height": 60 + }, + { + "url": "https://lh3.googleusercontent.com/XOjaymqJY57PvxnDjUR8yUvCp6izuPTiBOGQHK6ebQ8uBpgRGgZoDjliQXnydKyg6mzv8XDTV5lLga8=w120-h120-p-l90-rj", + "width": 120, + "height": 120 + }, + { + "url": "https://lh3.googleusercontent.com/XOjaymqJY57PvxnDjUR8yUvCp6izuPTiBOGQHK6ebQ8uBpgRGgZoDjliQXnydKyg6mzv8XDTV5lLga8=w226-h226-p-l90-rj", + "width": 226, + "height": 226 + }, + { + "url": "https://lh3.googleusercontent.com/XOjaymqJY57PvxnDjUR8yUvCp6izuPTiBOGQHK6ebQ8uBpgRGgZoDjliQXnydKyg6mzv8XDTV5lLga8=w544-h544-p-l90-rj", + "width": 544, + "height": 544 + } + ] + }, + "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_UNSPECIFIED", + "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_UNSPECIFIED", + "trackingParams": "CAUQhL8CIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + }, + "secondSubtitle": { + "runs": [ + { + "text": "5 songs" + }, + { + "text": " • " + }, + { + "text": "17 minutes" + } + ] + } + } + } + ], + "trackingParams": "CAMQui8iEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + }, + "trackingParams": "CAIQ8JMBGAAiEwiguIfv3t-LAxUnHwYAHRegIEg=" + } + } + ] + } + }, + "trackingParams": "CAAQhGciEwiguIfv3t-LAxUnHwYAHRegIEg=", + "microformat": { + "microformatDataRenderer": { + "urlCanonical": "https://music.youtube.com/playlist?list=OLAK5uy_lGP_zv0vJDUlecQDzugUJmjcF7pvyVNyY" + } + }, + "background": { + "musicThumbnailRenderer": { + "thumbnail": { + "thumbnails": [ + { + "url": "https://lh3.googleusercontent.com/IYxE8yTIpFUu0OayA5SaxFEn6zQ7T21hpkvI8CODY9NEH1XIhyoUhGohkZuaK-xSu22BC4wjp6srNjIW=w60-h60-l90-rj", + "width": 60, + "height": 60 + }, + { + "url": "https://lh3.googleusercontent.com/IYxE8yTIpFUu0OayA5SaxFEn6zQ7T21hpkvI8CODY9NEH1XIhyoUhGohkZuaK-xSu22BC4wjp6srNjIW=w120-h120-l90-rj", + "width": 120, + "height": 120 + }, + { + "url": "https://lh3.googleusercontent.com/IYxE8yTIpFUu0OayA5SaxFEn6zQ7T21hpkvI8CODY9NEH1XIhyoUhGohkZuaK-xSu22BC4wjp6srNjIW=w226-h226-l90-rj", + "width": 226, + "height": 226 + }, + { + "url": "https://lh3.googleusercontent.com/IYxE8yTIpFUu0OayA5SaxFEn6zQ7T21hpkvI8CODY9NEH1XIhyoUhGohkZuaK-xSu22BC4wjp6srNjIW=w544-h544-l90-rj", + "width": 544, + "height": 544 + } + ] + }, + "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_UNSPECIFIED", + "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_UNSPECIFIED", + "trackingParams": "CAEQhL8CIhMIoLiH797fiwMVJx8GAB0XoCBI" + } + } +} diff --git a/testfiles/music_history/music_history.json b/testfiles/music_userdata/music_history.json similarity index 100% rename from testfiles/music_history/music_history.json rename to testfiles/music_userdata/music_history.json diff --git a/testfiles/music_history/saved_albums.json b/testfiles/music_userdata/saved_albums.json similarity index 100% rename from testfiles/music_history/saved_albums.json rename to testfiles/music_userdata/saved_albums.json diff --git a/testfiles/music_history/saved_artists.json b/testfiles/music_userdata/saved_artists.json similarity index 100% rename from testfiles/music_history/saved_artists.json rename to testfiles/music_userdata/saved_artists.json diff --git a/testfiles/music_history/saved_playlists.json b/testfiles/music_userdata/saved_playlists.json similarity index 100% rename from testfiles/music_history/saved_playlists.json rename to testfiles/music_userdata/saved_playlists.json diff --git a/testfiles/music_history/saved_tracks.json b/testfiles/music_userdata/saved_tracks.json similarity index 100% rename from testfiles/music_history/saved_tracks.json rename to testfiles/music_userdata/saved_tracks.json diff --git a/testfiles/playlist/playlist_20250316_cmdexecutor.json b/testfiles/playlist/playlist_20250316_cmdexecutor.json new file mode 100644 index 0000000..4b4250a --- /dev/null +++ b/testfiles/playlist/playlist_20250316_cmdexecutor.json @@ -0,0 +1,29478 @@ +{ + "responseContext": { + "serviceTrackingParams": [ + { + "service": "GFEEDBACK", + "params": [ + { + "key": "is_podcast_show_page", + "value": "0" + }, + { + "key": "browse_id", + "value": "VLPLbZIPy20-1pN7mqjckepWF78ndb6ci_qi" + }, + { + "key": "browse_id_prefix", + "value": "" + }, + { + "key": "logged_in", + "value": "0" + }, + { + "key": "e", + "value": "23804281,23986028,24004644,24077241,24166867,24181174,24241378,24290153,24425063,24439361,24453989,24547317,24566687,24699899,39325854,39326986,51010235,51020570,51025415,51037344,51037353,51043775,51063643,51072748,51091058,51095478,51098299,51115184,51141472,51152050,51176511,51178312,51178327,51178346,51178357,51183910,51184990,51194137,51204329,51217504,51222973,51225393,51227037,51228850,51232637,51237842,51242448,51249749,51256074,51256084,51263449,51272458,51274583,51285052,51285717,51294659,51300176,51300241,51303432,51305032,51311029,51311040,51313109,51313767,51314158,51316844,51320245,51330475,51335366,51335644,51337456,51338524,51339518,51340613,51340662,51341226,51341975,51342857,51348081,51349914,51350165,51351446,51353393,51354083,51354114,51354567,51355201,51355417,51355912,51358317,51360104,51360125,51360128,51361828,51362071,51362857,51363723,51363738,51363741,51363752,51363759,51363774,51364291,51365678,51366423,51366620,51367489,51369233,51369398,51372971,51374164,51375205,51375647,51375719,51379054,51380376,51380387,51380400,51382048,51383168,51385023,51386141,51386361,51386540,51389629,51389867,51391338,51394776,51394783,51395904,51397087,51397256,51397281,51398493,51399453,51404808,51404810,51405542,51405882,51405959,51406270,51406710,51407443,51407632,51407834,51408011,51408106,51408108,51410901,51411582,51411872,51412256,51412630,51412818,51413048,51413055,51413060,51413065,51413072,51413083,51413090,51413541,51414152,51414985,51416049,51417458,51417465,51417484,51417497,51417504,51417525,51417536,51417659,51419278,51419757,51419816,51420898,51420968,51421231,51421832,51421901,51422676,51422774,51423139,51423433,51423673,51424043,51424621,51425030,51425616,51426296,51428019,51428290,51429767,51429775,51430417,51431228,51431825,51431960,51432619,51432627,51435176,51435847,51435877,51435886,51435891,51435901,51435905,51435910,51435918,51436338,51437626" + }, + { + "key": "visitor_data", + "value": "CgtucU1TTXBlT1ZXayjRlNy-BjIKCgJERRIEEgAgHw%3D%3D" + } + ] + }, + { + "service": "GOOGLE_HELP", + "params": [ + { + "key": "is_podcast_show_page", + "value": "0" + }, + { + "key": "browse_id", + "value": "VLPLbZIPy20-1pN7mqjckepWF78ndb6ci_qi" + }, + { + "key": "browse_id_prefix", + "value": "" + } + ] + }, + { + "service": "CSI", + "params": [ + { + "key": "c", + "value": "WEB" + }, + { + "key": "cver", + "value": "2.20250314.01.00" + }, + { + "key": "yt_li", + "value": "0" + }, + { + "key": "GetPlaylist_rid", + "value": "0x142def5c83564770" + } + ] + }, + { + "service": "GUIDED_HELP", + "params": [ + { + "key": "logged_in", + "value": "0" + } + ] + }, + { + "service": "ECATCHER", + "params": [ + { + "key": "client.version", + "value": "2.20250314" + }, + { + "key": "client.name", + "value": "WEB" + } + ] + } + ], + "mainAppWebResponseContext": { + "loggedOut": true, + "trackingParam": "kx_fmPxhoPZRHq8_GjC5riD-PxsLqFe2gHcGHvijwG1QUlwRgkuswmIBwOcCE59TDtslLKPQ-SS" + }, + "webResponseContextExtensionData": { + "hasDecorated": true + } + }, + "contents": { + "twoColumnBrowseResultsRenderer": { + "tabs": [ + { + "tabRenderer": { + "selected": true, + "content": { + "sectionListRenderer": { + "contents": [ + { + "itemSectionRenderer": { + "contents": [ + { + "playlistVideoListRenderer": { + "contents": [ + { + "playlistVideoRenderer": { + "videoId": "dvgZkm1xWPE", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/dvgZkm1xWPE/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAF6wSFDQWvb39pnjwAKbZqtBo8zw", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/dvgZkm1xWPE/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBFCw6TDR5kZFRnA-LWrbocaJpkIw", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/dvgZkm1xWPE/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCa5GcQ_dGJ502O6pc0xONmTLHDtA", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/dvgZkm1xWPE/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAT-QcZjRo6kpkqpSOTHjVTUjO3tA", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Coldplay - Viva La Vida (Official Video)" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Coldplay - Viva La Vida (Official Video) by Coldplay 964,926,993 views 16 years ago 4 minutes, 3 seconds" + } + } + }, + "index": { + "simpleText": "1" + }, + "shortBylineText": { + "runs": [ + { + "text": "Coldplay", + "navigationEndpoint": { + "clickTrackingParams": "CLYDEMY0GAAiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UCDPM_n1atn2ijUwHd0NNRQw", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCDPM_n1atn2ijUwHd0NNRQw", + "canonicalBaseUrl": "/channel/UCDPM_n1atn2ijUwHd0NNRQw" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 3 seconds" + } + }, + "simpleText": "4:03" + }, + "navigationEndpoint": { + "clickTrackingParams": "CLYDEMY0GAAiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=dvgZkm1xWPE&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=1&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "dvgZkm1xWPE", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 0, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr4---sn-h0jeln7l.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=76f819926d7158f1&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "243", + "trackingParams": "CLYDEMY0GAAiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CLkDEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CLkDEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "dvgZkm1xWPE", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CLkDEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "dvgZkm1xWPE" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "dvgZkm1xWPE" + ] + } + } + ] + } + }, + "trackingParams": "CLkDEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CLgDENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "dvgZkm1xWPE", + "onAddCommand": { + "clickTrackingParams": "CLgDENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "dvgZkm1xWPE", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CLgDENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CLYDEMY0GAAiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "Cgtkdmdaa20xeFdQRQ%3D%3D", + "commands": [ + { + "clickTrackingParams": "CLYDEMY0GAAiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CLcDEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CLYDEMY0GAAiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CLYDEMY0GAAiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 3 seconds" + } + }, + "simpleText": "4:03" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "964M views" + }, + { + "text": " • " + }, + { + "text": "16 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "89dGC8de0CA", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/89dGC8de0CA/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCmOt0R6jvhtuUevep9_yydAS-K2g", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/89dGC8de0CA/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDgs_EmMC8KHsROcKAWphZ9mIbg_A", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/89dGC8de0CA/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDdZpVdlqFrtNvT46qP7JdV2qS_xg", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/89dGC8de0CA/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBOZcKJ9IfFyi28ANcj5GcmaR20Rg", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Aerosmith - Dream On (Audio)" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Aerosmith - Dream On (Audio) by Aerosmith 168,475,390 views 11 years ago 4 minutes, 29 seconds" + } + } + }, + "index": { + "simpleText": "2" + }, + "shortBylineText": { + "runs": [ + { + "text": "Aerosmith", + "navigationEndpoint": { + "clickTrackingParams": "CLIDEMY0GAEiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UCBxdHQVOaZhUOIj_3gt2FYw", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCBxdHQVOaZhUOIj_3gt2FYw", + "canonicalBaseUrl": "/channel/UCBxdHQVOaZhUOIj_3gt2FYw" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 29 seconds" + } + }, + "simpleText": "4:29" + }, + "navigationEndpoint": { + "clickTrackingParams": "CLIDEMY0GAEiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=89dGC8de0CA&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=2&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "89dGC8de0CA", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 1, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr3---sn-h0jeenle.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=f3d7460bc75ed020&ip=79.205.211.19&initcwndbps=2676250&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "269", + "trackingParams": "CLIDEMY0GAEiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CLUDEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CLUDEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "89dGC8de0CA", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CLUDEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "89dGC8de0CA" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "89dGC8de0CA" + ] + } + } + ] + } + }, + "trackingParams": "CLUDEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CLQDENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "89dGC8de0CA", + "onAddCommand": { + "clickTrackingParams": "CLQDENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "89dGC8de0CA", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CLQDENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CLIDEMY0GAEiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "Cgs4OWRHQzhkZTBDQQ%3D%3D", + "commands": [ + { + "clickTrackingParams": "CLIDEMY0GAEiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CLMDEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CLIDEMY0GAEiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CLIDEMY0GAEiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 29 seconds" + } + }, + "simpleText": "4:29" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "168M views" + }, + { + "text": " • " + }, + { + "text": "11 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "3ATxLct2jDo", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/3ATxLct2jDo/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCf241ir3ZWZiz00Y2ybY5qVNQpcg", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/3ATxLct2jDo/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCfLQtmh1Mmt3oHFlQwrjROi2Uauw", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/3ATxLct2jDo/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDlGsIg2fF-qkWKzEST8BDE3W8Ung", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/3ATxLct2jDo/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLD-Y1_zai7VZoR4q_u1gqFa86qtlw", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Lenny Kravitz - The Chamber (Lyric Video)" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Lenny Kravitz - The Chamber (Lyric Video) by Lenny Kravitz 9,695,039 views 10 years ago 4 minutes, 58 seconds" + } + } + }, + "index": { + "simpleText": "3" + }, + "shortBylineText": { + "runs": [ + { + "text": "Lenny Kravitz", + "navigationEndpoint": { + "clickTrackingParams": "CK4DEMY0GAIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UCdIs5dRqgZ1IWOdLZimHL_w", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCdIs5dRqgZ1IWOdLZimHL_w", + "canonicalBaseUrl": "/channel/UCdIs5dRqgZ1IWOdLZimHL_w" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 58 seconds" + } + }, + "simpleText": "4:58" + }, + "navigationEndpoint": { + "clickTrackingParams": "CK4DEMY0GAIiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=3ATxLct2jDo&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=3&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "3ATxLct2jDo", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 2, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr2---sn-h0jeenle.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=dc04f12dcb768c3a&ip=79.205.211.19&initcwndbps=2676250&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "298", + "trackingParams": "CK4DEMY0GAIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CLEDEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CLEDEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "3ATxLct2jDo", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CLEDEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "3ATxLct2jDo" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "3ATxLct2jDo" + ] + } + } + ] + } + }, + "trackingParams": "CLEDEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CLADENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "3ATxLct2jDo", + "onAddCommand": { + "clickTrackingParams": "CLADENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "3ATxLct2jDo", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CLADENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CK4DEMY0GAIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgszQVR4TGN0MmpEbw%3D%3D", + "commands": [ + { + "clickTrackingParams": "CK4DEMY0GAIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CK8DEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CK4DEMY0GAIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CK4DEMY0GAIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 58 seconds" + } + }, + "simpleText": "4:58" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "9.6M views" + }, + { + "text": " • " + }, + { + "text": "10 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "iX-QaNzd-0Y", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/iX-QaNzd-0Y/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLC5see3pLr032qk6-rO01a3ZhLfQQ", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/iX-QaNzd-0Y/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAsp00oKrv27y4VFJM3C3_xvGYVZQ", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/iX-QaNzd-0Y/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAIfO7lUol3rspcVVkLp3gdO4Wfcw", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/iX-QaNzd-0Y/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLB6ExMLEFyzsV8pFYFI3ZKbIdAcOQ", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Milky Chance - Stolen Dance (Official Video) [HD Version]" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Milky Chance - Stolen Dance (Official Video) [HD Version] by Milky Chance Official 989,507,506 views 11 years ago 5 minutes, 14 seconds" + } + } + }, + "index": { + "simpleText": "4" + }, + "shortBylineText": { + "runs": [ + { + "text": "Milky Chance Official", + "navigationEndpoint": { + "clickTrackingParams": "CKoDEMY0GAMiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UCy-ez61m5LdG3FQVr-4Crcw", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCy-ez61m5LdG3FQVr-4Crcw", + "canonicalBaseUrl": "/channel/UCy-ez61m5LdG3FQVr-4Crcw" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "5 minutes, 14 seconds" + } + }, + "simpleText": "5:14" + }, + "navigationEndpoint": { + "clickTrackingParams": "CKoDEMY0GAMiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=iX-QaNzd-0Y&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=4&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "iX-QaNzd-0Y", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 3, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr5---sn-h0jelnes.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=897f9068dcddfb46&ip=79.205.211.19&initcwndbps=2676250&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "314", + "trackingParams": "CKoDEMY0GAMiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CK0DEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CK0DEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "iX-QaNzd-0Y", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CK0DEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "iX-QaNzd-0Y" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "iX-QaNzd-0Y" + ] + } + } + ] + } + }, + "trackingParams": "CK0DEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CKwDENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "iX-QaNzd-0Y", + "onAddCommand": { + "clickTrackingParams": "CKwDENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "iX-QaNzd-0Y", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CKwDENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CKoDEMY0GAMiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtpWC1RYU56ZC0wWQ%3D%3D", + "commands": [ + { + "clickTrackingParams": "CKoDEMY0GAMiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CKsDEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CKoDEMY0GAMiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CKoDEMY0GAMiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "5 minutes, 14 seconds" + } + }, + "simpleText": "5:14" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "989M views" + }, + { + "text": " • " + }, + { + "text": "11 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "6gaEhK2C0tQ", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/6gaEhK2C0tQ/hqdefault.jpg?sqp=-oaymwE1CKgBEF5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-CYAC0AWKAgwIABABGEcgZShVMA8=&rs=AOn4CLC0KMWvU_M5lBkSRY9rNlFBx_9_3Q", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/6gaEhK2C0tQ/hqdefault.jpg?sqp=-oaymwE1CMQBEG5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-CYAC0AWKAgwIABABGEcgZShVMA8=&rs=AOn4CLC1g2ZhbqfuM8Gm14EmG0DBAHyBzQ", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/6gaEhK2C0tQ/hqdefault.jpg?sqp=-oaymwE2CPYBEIoBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gmAAtAFigIMCAAQARhHIGUoVTAP&rs=AOn4CLCFp3bWZfBBlYBCgwgKvg5PSEAuPw", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/6gaEhK2C0tQ/hqdefault.jpg?sqp=-oaymwE2CNACELwBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gmAAtAFigIMCAAQARhHIGUoVTAP&rs=AOn4CLAxXDiDPOQR7-nXNDSxGTr7OaDMRg", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Cut Copy - Take Me Over" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Cut Copy - Take Me Over by Cut Copy 431,810 views 12 years ago 4 minutes, 58 seconds" + } + } + }, + "index": { + "simpleText": "5" + }, + "shortBylineText": { + "runs": [ + { + "text": "Cut Copy", + "navigationEndpoint": { + "clickTrackingParams": "CKYDEMY0GAQiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UCvueeIpQ6l5BlyzUTWY13eQ", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCvueeIpQ6l5BlyzUTWY13eQ", + "canonicalBaseUrl": "/channel/UCvueeIpQ6l5BlyzUTWY13eQ" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 58 seconds" + } + }, + "simpleText": "4:58" + }, + "navigationEndpoint": { + "clickTrackingParams": "CKYDEMY0GAQiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=6gaEhK2C0tQ&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=5&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "6gaEhK2C0tQ", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 4, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr5---sn-h0jeenld.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=ea068484ad82d2d4&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "298", + "trackingParams": "CKYDEMY0GAQiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CKkDEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CKkDEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "6gaEhK2C0tQ", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CKkDEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "6gaEhK2C0tQ" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "6gaEhK2C0tQ" + ] + } + } + ] + } + }, + "trackingParams": "CKkDEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CKgDENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "6gaEhK2C0tQ", + "onAddCommand": { + "clickTrackingParams": "CKgDENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "6gaEhK2C0tQ", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CKgDENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CKYDEMY0GAQiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "Cgs2Z2FFaEsyQzB0UQ%3D%3D", + "commands": [ + { + "clickTrackingParams": "CKYDEMY0GAQiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CKcDEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CKYDEMY0GAQiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CKYDEMY0GAQiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 58 seconds" + } + }, + "simpleText": "4:58" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "431K views" + }, + { + "text": " • " + }, + { + "text": "12 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "yy21fr7z6wY", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/yy21fr7z6wY/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBFaWd6gj8eNEOrCIrGHOl9aCz3vg", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/yy21fr7z6wY/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCrsCuQ4xQiyrNlRWmAe5HkEesrNg", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/yy21fr7z6wY/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBw2M2Hs_hFSeGd_c5dz2aIyWaIfw", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/yy21fr7z6wY/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBoF_tp0ITQOi7B79RIDznD1NZ7hA", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Vance Joy - Riptide (Lyric video)" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Vance Joy - Riptide (Lyric video) by Local Session Manager 13,090,669 views 11 years ago 3 minutes, 20 seconds" + } + } + }, + "index": { + "simpleText": "6" + }, + "shortBylineText": { + "runs": [ + { + "text": "Local Session Manager", + "navigationEndpoint": { + "clickTrackingParams": "CKIDEMY0GAUiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/@LocalSessionManager", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCZ0kE5a34dmh_sehHxYArDg", + "canonicalBaseUrl": "/@LocalSessionManager" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 20 seconds" + } + }, + "simpleText": "3:20" + }, + "navigationEndpoint": { + "clickTrackingParams": "CKIDEMY0GAUiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=yy21fr7z6wY&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=6&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "yy21fr7z6wY", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 5, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr1---sn-h0jeenek.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=cb2db57ebef3eb06&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "200", + "trackingParams": "CKIDEMY0GAUiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CKUDEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CKUDEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "yy21fr7z6wY", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CKUDEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "yy21fr7z6wY" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "yy21fr7z6wY" + ] + } + } + ] + } + }, + "trackingParams": "CKUDEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CKQDENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "yy21fr7z6wY", + "onAddCommand": { + "clickTrackingParams": "CKQDENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "yy21fr7z6wY", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CKQDENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CKIDEMY0GAUiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "Cgt5eTIxZnI3ejZ3WQ%3D%3D", + "commands": [ + { + "clickTrackingParams": "CKIDEMY0GAUiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CKMDEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CKIDEMY0GAUiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CKIDEMY0GAUiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 20 seconds" + } + }, + "simpleText": "3:20" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "13M views" + }, + { + "text": " • " + }, + { + "text": "11 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "E3Cw6-xRHdg", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/E3Cw6-xRHdg/hqdefault.jpg?sqp=-oaymwE1CKgBEF5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-CYAC0AWKAgwIABABGGUgTyhJMA8=&rs=AOn4CLDUW5zYWFEKW8K69uJ5-77Y1-gebg", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/E3Cw6-xRHdg/hqdefault.jpg?sqp=-oaymwE1CMQBEG5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-CYAC0AWKAgwIABABGGUgTyhJMA8=&rs=AOn4CLBlidLDBkHrFrbEjhr3usfxETLfOA", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/E3Cw6-xRHdg/hqdefault.jpg?sqp=-oaymwE2CPYBEIoBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gmAAtAFigIMCAAQARhlIE8oSTAP&rs=AOn4CLBzWtFXB5Gt77VEAsfYlh9-F87i8A", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/E3Cw6-xRHdg/hqdefault.jpg?sqp=-oaymwE2CNACELwBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gmAAtAFigIMCAAQARhlIE8oSTAP&rs=AOn4CLDbMoUzeS0jiR4cP-h35lZocq8Bgw", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Haddaway - What Is Love [Full HD Official Music Video]" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Haddaway - What Is Love [Full HD Official Music Video] by Kiss András 769,816 views 12 years ago 3 minutes, 57 seconds" + } + } + }, + "index": { + "simpleText": "7" + }, + "shortBylineText": { + "runs": [ + { + "text": "Kiss András", + "navigationEndpoint": { + "clickTrackingParams": "CJ4DEMY0GAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/@rtlklubszenny1", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCSsQJRhZ5eO7MM_K_g7AS6A", + "canonicalBaseUrl": "/@rtlklubszenny1" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 57 seconds" + } + }, + "simpleText": "3:57" + }, + "navigationEndpoint": { + "clickTrackingParams": "CJ4DEMY0GAYiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=E3Cw6-xRHdg&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=7&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "E3Cw6-xRHdg", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 6, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr1---sn-h0jeenle.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=1370b0ebec511dd8&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "237", + "trackingParams": "CJ4DEMY0GAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CKEDEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CKEDEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "E3Cw6-xRHdg", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CKEDEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "E3Cw6-xRHdg" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "E3Cw6-xRHdg" + ] + } + } + ] + } + }, + "trackingParams": "CKEDEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CKADENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "E3Cw6-xRHdg", + "onAddCommand": { + "clickTrackingParams": "CKADENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "E3Cw6-xRHdg", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CKADENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CJ4DEMY0GAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtFM0N3Ni14UkhkZw%3D%3D", + "commands": [ + { + "clickTrackingParams": "CJ4DEMY0GAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CJ8DEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CJ4DEMY0GAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CJ4DEMY0GAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 57 seconds" + } + }, + "simpleText": "3:57" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "769K views" + }, + { + "text": " • " + }, + { + "text": "12 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "NUsoVlDFqZg", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/NUsoVlDFqZg/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLB_it4kap2IgxTHmuK4k6HcH2cYrQ", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/NUsoVlDFqZg/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAzdGRFlJ9x2cfGvyc--2p551-PNg", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/NUsoVlDFqZg/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDX9s-shgYo1TVzFx99K3kQBrVhAg", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/NUsoVlDFqZg/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBoUMQqcN7M6bX6FQQpbZOMcHUc8A", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Enrique Iglesias - Bailando ft. Descemer Bueno, Gente De Zona" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Enrique Iglesias - Bailando ft. Descemer Bueno, Gente De Zona by Enrique Iglesias 3,655,905,530 views 10 years ago 4 minutes, 47 seconds" + } + } + }, + "index": { + "simpleText": "8" + }, + "shortBylineText": { + "runs": [ + { + "text": "Enrique Iglesias", + "navigationEndpoint": { + "clickTrackingParams": "CJoDEMY0GAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UC-6czyMkxDi8E8akPl0c7_w", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UC-6czyMkxDi8E8akPl0c7_w", + "canonicalBaseUrl": "/channel/UC-6czyMkxDi8E8akPl0c7_w" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 47 seconds" + } + }, + "simpleText": "4:47" + }, + "navigationEndpoint": { + "clickTrackingParams": "CJoDEMY0GAciEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=NUsoVlDFqZg&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=8&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "NUsoVlDFqZg", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 7, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr3---sn-h0jeener.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=354b285650c5a998&ip=79.205.211.19&initcwndbps=2676250&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "287", + "trackingParams": "CJoDEMY0GAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CJ0DEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CJ0DEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "NUsoVlDFqZg", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CJ0DEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "NUsoVlDFqZg" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "NUsoVlDFqZg" + ] + } + } + ] + } + }, + "trackingParams": "CJ0DEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CJwDENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "NUsoVlDFqZg", + "onAddCommand": { + "clickTrackingParams": "CJwDENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "NUsoVlDFqZg", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CJwDENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CJoDEMY0GAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtOVXNvVmxERnFaZw%3D%3D", + "commands": [ + { + "clickTrackingParams": "CJoDEMY0GAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CJsDEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CJoDEMY0GAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CJoDEMY0GAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 47 seconds" + } + }, + "simpleText": "4:47" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "3.6B views" + }, + { + "text": " • " + }, + { + "text": "10 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "pUjE9H8QlA4", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/pUjE9H8QlA4/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLB6LvruwJXddjxT03Kqu5nBKrB7Nw", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/pUjE9H8QlA4/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLB-Q_M2fqi4zmt3v7pIvKnqWR4mUQ", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/pUjE9H8QlA4/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDHU93zInHE7XVYSdsNYgGQv2MtnQ", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/pUjE9H8QlA4/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDO9wWPCLhP98n25yT9jMxChE2-8A", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Mr. Probz - Waves (Robin Schulz Remix Radio Edit)" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Mr. Probz - Waves (Robin Schulz Remix Radio Edit) by Mr. Probz 648,157,090 views 11 years ago 3 minutes, 51 seconds" + } + } + }, + "index": { + "simpleText": "9" + }, + "shortBylineText": { + "runs": [ + { + "text": "Mr. Probz", + "navigationEndpoint": { + "clickTrackingParams": "CJYDEMY0GAgiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UC6YQf4SyHMZJ1jh5g6efPCg", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UC6YQf4SyHMZJ1jh5g6efPCg", + "canonicalBaseUrl": "/channel/UC6YQf4SyHMZJ1jh5g6efPCg" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 51 seconds" + } + }, + "simpleText": "3:51" + }, + "navigationEndpoint": { + "clickTrackingParams": "CJYDEMY0GAgiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=pUjE9H8QlA4&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=9&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "pUjE9H8QlA4", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 8, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr1---sn-h0jeenek.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=a548c4f47f10940e&ip=79.205.211.19&initcwndbps=2676250&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "231", + "trackingParams": "CJYDEMY0GAgiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CJkDEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CJkDEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "pUjE9H8QlA4", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CJkDEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "pUjE9H8QlA4" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "pUjE9H8QlA4" + ] + } + } + ] + } + }, + "trackingParams": "CJkDEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CJgDENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "pUjE9H8QlA4", + "onAddCommand": { + "clickTrackingParams": "CJgDENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "pUjE9H8QlA4", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CJgDENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CJYDEMY0GAgiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtwVWpFOUg4UWxBNA%3D%3D", + "commands": [ + { + "clickTrackingParams": "CJYDEMY0GAgiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CJcDEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CJYDEMY0GAgiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CJYDEMY0GAgiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 51 seconds" + } + }, + "simpleText": "3:51" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "648M views" + }, + { + "text": " • " + }, + { + "text": "11 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "cpYPPXf63a4", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/cpYPPXf63a4/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAQcHM5ewk6s7ya_AxkQ6ghE8Izpw", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/cpYPPXf63a4/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLClFKn-_WN6qVwgZ_2t5ITQp8TPMQ", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/cpYPPXf63a4/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBDzGVYkQcMnk2eFcTBL15muVgX3A", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/cpYPPXf63a4/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLD9hfCe5nXi4bOIMaVIjeKowWWHow", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Daniel Santacruz - Lento - Kizomba (Official Video HD)" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Daniel Santacruz - Lento - Kizomba (Official Video HD) by Daniel Santacruz 266,460,514 views 11 years ago 4 minutes, 27 seconds" + } + } + }, + "index": { + "simpleText": "10" + }, + "shortBylineText": { + "runs": [ + { + "text": "Daniel Santacruz", + "navigationEndpoint": { + "clickTrackingParams": "CJIDEMY0GAkiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UCDJk0j9rBf7wuh7KWG70uug", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCDJk0j9rBf7wuh7KWG70uug", + "canonicalBaseUrl": "/channel/UCDJk0j9rBf7wuh7KWG70uug" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 27 seconds" + } + }, + "simpleText": "4:27" + }, + "navigationEndpoint": { + "clickTrackingParams": "CJIDEMY0GAkiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=cpYPPXf63a4&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=10&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "cpYPPXf63a4", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 9, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr2---sn-h0jelnes.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=72960f3d77faddae&ip=79.205.211.19&initcwndbps=2676250&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "267", + "trackingParams": "CJIDEMY0GAkiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CJUDEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CJUDEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "cpYPPXf63a4", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CJUDEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "cpYPPXf63a4" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "cpYPPXf63a4" + ] + } + } + ] + } + }, + "trackingParams": "CJUDEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CJQDENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "cpYPPXf63a4", + "onAddCommand": { + "clickTrackingParams": "CJQDENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "cpYPPXf63a4", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CJQDENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CJIDEMY0GAkiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtjcFlQUFhmNjNhNA%3D%3D", + "commands": [ + { + "clickTrackingParams": "CJIDEMY0GAkiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CJMDEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CJIDEMY0GAkiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CJIDEMY0GAkiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 27 seconds" + } + }, + "simpleText": "4:27" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "266M views" + }, + { + "text": " • " + }, + { + "text": "11 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "G7JLoOKefvQ", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/G7JLoOKefvQ/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBoE8KNiEkb6UHG1aLS4obo2LPkQw", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/G7JLoOKefvQ/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDmVuiAGVM1KpQ9hyc6-WXpUBnRTA", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/G7JLoOKefvQ/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCfEWSAu9HA3-VZAkjCQ58UvK7KDg", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/G7JLoOKefvQ/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDSriv5maYtXtV4t_FIgceTyqOIOA", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Alejandro Sanz - Não Me Compares ft. Ivete Sangalo (Official Video)" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Alejandro Sanz - Não Me Compares ft. Ivete Sangalo (Official Video) by Alejandro Sanz 92,196,407 views 12 years ago 5 minutes, 7 seconds" + } + } + }, + "index": { + "simpleText": "11" + }, + "shortBylineText": { + "runs": [ + { + "text": "Alejandro Sanz", + "navigationEndpoint": { + "clickTrackingParams": "CI4DEMY0GAoiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UCV4S6_JoeDq9j6mgbpkmA0Q", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCV4S6_JoeDq9j6mgbpkmA0Q", + "canonicalBaseUrl": "/channel/UCV4S6_JoeDq9j6mgbpkmA0Q" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "5 minutes, 7 seconds" + } + }, + "simpleText": "5:07" + }, + "navigationEndpoint": { + "clickTrackingParams": "CI4DEMY0GAoiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=G7JLoOKefvQ&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=11&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "G7JLoOKefvQ", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 10, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr5---sn-h0jeenld.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=1bb24ba0e29e7ef4&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "307", + "trackingParams": "CI4DEMY0GAoiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CJEDEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CJEDEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "G7JLoOKefvQ", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CJEDEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "G7JLoOKefvQ" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "G7JLoOKefvQ" + ] + } + } + ] + } + }, + "trackingParams": "CJEDEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CJADENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "G7JLoOKefvQ", + "onAddCommand": { + "clickTrackingParams": "CJADENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "G7JLoOKefvQ", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CJADENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CI4DEMY0GAoiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtHN0pMb09LZWZ2UQ%3D%3D", + "commands": [ + { + "clickTrackingParams": "CI4DEMY0GAoiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CI8DEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CI4DEMY0GAoiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CI4DEMY0GAoiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "5 minutes, 7 seconds" + } + }, + "simpleText": "5:07" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "92M views" + }, + { + "text": " • " + }, + { + "text": "12 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "_rxgp7TJhUE", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/_rxgp7TJhUE/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBGIZuqNCrS6KvtexBWq2Dcb95syw", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/_rxgp7TJhUE/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAjz_-tUpU8js7mwcIBqeMhEkM8Zw", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/_rxgp7TJhUE/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCDG5fI4x8MvOFgJ_y1hCRfwxoRqA", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/_rxgp7TJhUE/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBr3gGhqkXnQ3sidK9zStu4O8R-Cg", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Britney Spears - Perfume (Official Video)" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Britney Spears - Perfume (Official Video) by Britney Spears 45,924,330 views 11 years ago 4 minutes, 24 seconds" + } + } + }, + "index": { + "simpleText": "12" + }, + "shortBylineText": { + "runs": [ + { + "text": "Britney Spears", + "navigationEndpoint": { + "clickTrackingParams": "CIoDEMY0GAsiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UCgffc95YDBlkGrBAJUHUmXQ", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCgffc95YDBlkGrBAJUHUmXQ", + "canonicalBaseUrl": "/channel/UCgffc95YDBlkGrBAJUHUmXQ" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 24 seconds" + } + }, + "simpleText": "4:24" + }, + "navigationEndpoint": { + "clickTrackingParams": "CIoDEMY0GAsiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=_rxgp7TJhUE&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=12&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "_rxgp7TJhUE", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 11, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr4---sn-h0jeenl6.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=febc60a7b4c98541&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "264", + "trackingParams": "CIoDEMY0GAsiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CI0DEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CI0DEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "_rxgp7TJhUE", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CI0DEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "_rxgp7TJhUE" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "_rxgp7TJhUE" + ] + } + } + ] + } + }, + "trackingParams": "CI0DEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CIwDENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "_rxgp7TJhUE", + "onAddCommand": { + "clickTrackingParams": "CIwDENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "_rxgp7TJhUE", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CIwDENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CIoDEMY0GAsiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtfcnhncDdUSmhVRQ%3D%3D", + "commands": [ + { + "clickTrackingParams": "CIoDEMY0GAsiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CIsDEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CIoDEMY0GAsiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CIoDEMY0GAsiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 24 seconds" + } + }, + "simpleText": "4:24" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "45M views" + }, + { + "text": " • " + }, + { + "text": "11 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "Bs5-klTyb9o", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/Bs5-klTyb9o/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDbAkbM7bwoPGPHer-jP2X-jW_ByQ", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/Bs5-klTyb9o/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBodv57L6lXFA0y0gTLsWyx7H7VIw", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/Bs5-klTyb9o/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCYvUvyl_d2aWHN6nZ86o3NjZjA2g", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/Bs5-klTyb9o/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLA47S7BgWfj3ykO3QLI0bGrnk0oog", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "John Newman - Losing Sleep (Official Music Video)" + } + ], + "accessibility": { + "accessibilityData": { + "label": "John Newman - Losing Sleep (Official Music Video) by John Newman 41,162,108 views 11 years ago 4 minutes, 23 seconds" + } + } + }, + "index": { + "simpleText": "13" + }, + "shortBylineText": { + "runs": [ + { + "text": "John Newman", + "navigationEndpoint": { + "clickTrackingParams": "CIYDEMY0GAwiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UCXtn650vh9Dj7uz8cFac0AQ", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCXtn650vh9Dj7uz8cFac0AQ", + "canonicalBaseUrl": "/channel/UCXtn650vh9Dj7uz8cFac0AQ" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 23 seconds" + } + }, + "simpleText": "4:23" + }, + "navigationEndpoint": { + "clickTrackingParams": "CIYDEMY0GAwiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=Bs5-klTyb9o&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=13&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "Bs5-klTyb9o", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 12, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr4---sn-h0jeln7e.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=06ce7e9254f26fda&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "263", + "trackingParams": "CIYDEMY0GAwiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CIkDEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CIkDEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "Bs5-klTyb9o", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CIkDEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "Bs5-klTyb9o" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "Bs5-klTyb9o" + ] + } + } + ] + } + }, + "trackingParams": "CIkDEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CIgDENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "Bs5-klTyb9o", + "onAddCommand": { + "clickTrackingParams": "CIgDENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "Bs5-klTyb9o", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CIgDENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CIYDEMY0GAwiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtCczUta2xUeWI5bw%3D%3D", + "commands": [ + { + "clickTrackingParams": "CIYDEMY0GAwiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CIcDEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CIYDEMY0GAwiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CIYDEMY0GAwiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 23 seconds" + } + }, + "simpleText": "4:23" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "41M views" + }, + { + "text": " • " + }, + { + "text": "11 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "My2FRPA3Gf8", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/My2FRPA3Gf8/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAAU5FGE6fEMSyb0zazDsXTQXg1_w", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/My2FRPA3Gf8/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBQguhsJ7nVWvya_1pNJNKUjOOIWQ", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/My2FRPA3Gf8/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBHwjM3lKojQ2TX8TobYlMijuzeUA", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/My2FRPA3Gf8/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDJxi2IUAaKs8Lz7bMgrTY7O-74qA", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Miley Cyrus - Wrecking Ball (Official Video)" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Miley Cyrus - Wrecking Ball (Official Video) by Miley Cyrus 1,217,932,995 views 11 years ago 3 minutes, 42 seconds" + } + } + }, + "index": { + "simpleText": "14" + }, + "shortBylineText": { + "runs": [ + { + "text": "Miley Cyrus", + "navigationEndpoint": { + "clickTrackingParams": "CIIDEMY0GA0iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UCn7dB9UMTBDjKtEKBy_XISw", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCn7dB9UMTBDjKtEKBy_XISw", + "canonicalBaseUrl": "/channel/UCn7dB9UMTBDjKtEKBy_XISw" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 42 seconds" + } + }, + "simpleText": "3:42" + }, + "navigationEndpoint": { + "clickTrackingParams": "CIIDEMY0GA0iEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=My2FRPA3Gf8&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=14&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "My2FRPA3Gf8", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 13, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr1---sn-h0jeenl6.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=332d8544f03719ff&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "222", + "trackingParams": "CIIDEMY0GA0iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CIUDEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CIUDEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "My2FRPA3Gf8", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CIUDEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "My2FRPA3Gf8" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "My2FRPA3Gf8" + ] + } + } + ] + } + }, + "trackingParams": "CIUDEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CIQDENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "My2FRPA3Gf8", + "onAddCommand": { + "clickTrackingParams": "CIQDENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "My2FRPA3Gf8", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CIQDENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CIIDEMY0GA0iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtNeTJGUlBBM0dmOA%3D%3D", + "commands": [ + { + "clickTrackingParams": "CIIDEMY0GA0iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CIMDEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CIIDEMY0GA0iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CIIDEMY0GA0iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 42 seconds" + } + }, + "simpleText": "3:42" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "1.2B views" + }, + { + "text": " • " + }, + { + "text": "11 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "W1tzURKYFNs", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/W1tzURKYFNs/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDF9cdRnk9KlmTvAHqhnSEqLMW0hQ", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/W1tzURKYFNs/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLB9_IEjtA0Jkl2lw2kqx2lfCs5R4A", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/W1tzURKYFNs/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLANDNdnKXTcxs__K1VT-YptiXyhZw", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/W1tzURKYFNs/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLB9L3Xrcdw4klCiNlTyC0uaQAOHmQ", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Miley Cyrus - Adore You (Official Video)" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Miley Cyrus - Adore You (Official Video) by Miley Cyrus 219,959,323 views 11 years ago 4 minutes, 38 seconds" + } + } + }, + "index": { + "simpleText": "15" + }, + "shortBylineText": { + "runs": [ + { + "text": "Miley Cyrus", + "navigationEndpoint": { + "clickTrackingParams": "CP4CEMY0GA4iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UCn7dB9UMTBDjKtEKBy_XISw", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCn7dB9UMTBDjKtEKBy_XISw", + "canonicalBaseUrl": "/channel/UCn7dB9UMTBDjKtEKBy_XISw" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 38 seconds" + } + }, + "simpleText": "4:38" + }, + "navigationEndpoint": { + "clickTrackingParams": "CP4CEMY0GA4iEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=W1tzURKYFNs&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=15&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "W1tzURKYFNs", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 14, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr1---sn-h0jeener.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=5b5b7351129814db&ip=79.205.211.19&initcwndbps=2676250&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "278", + "trackingParams": "CP4CEMY0GA4iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CIEDEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CIEDEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "W1tzURKYFNs", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CIEDEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "W1tzURKYFNs" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "W1tzURKYFNs" + ] + } + } + ] + } + }, + "trackingParams": "CIEDEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CIADENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "W1tzURKYFNs", + "onAddCommand": { + "clickTrackingParams": "CIADENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "W1tzURKYFNs", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CIADENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CP4CEMY0GA4iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtXMXR6VVJLWUZOcw%3D%3D", + "commands": [ + { + "clickTrackingParams": "CP4CEMY0GA4iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CP8CEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CP4CEMY0GA4iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CP4CEMY0GA4iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 38 seconds" + } + }, + "simpleText": "4:38" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "219M views" + }, + { + "text": " • " + }, + { + "text": "11 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "tO3n1oSPW58", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/tO3n1oSPW58/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBSuPh1OFOvWL-6-t8VV713BfK87g", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/tO3n1oSPW58/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDmi9vp4oaXbLWhSfESsWOhMZbspA", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/tO3n1oSPW58/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLD1j1dmHqsre8ppLgH6fpP9DXFFtA", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/tO3n1oSPW58/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLA7D4mwh4_kxUkPZxpleULdA1IAOw", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Travie McCoy: Rough Water ft. Jason Mraz [OFFICIAL VIDEO]" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Travie McCoy: Rough Water ft. Jason Mraz [OFFICIAL VIDEO] by Fueled By Ramen 7,879,292 views 11 years ago 3 minutes, 38 seconds" + } + } + }, + "index": { + "simpleText": "16" + }, + "shortBylineText": { + "runs": [ + { + "text": "Fueled By Ramen", + "navigationEndpoint": { + "clickTrackingParams": "CPoCEMY0GA8iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/@fueledbyramen", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UClVrJwcIy7saPcGc1nct80A", + "canonicalBaseUrl": "/@fueledbyramen" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 38 seconds" + } + }, + "simpleText": "3:38" + }, + "navigationEndpoint": { + "clickTrackingParams": "CPoCEMY0GA8iEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=tO3n1oSPW58&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=16&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "tO3n1oSPW58", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 15, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr3---sn-h0jeenek.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=b4ede7d6848f5b9f&ip=79.205.211.19&initcwndbps=2676250&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "218", + "trackingParams": "CPoCEMY0GA8iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CP0CEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CP0CEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "tO3n1oSPW58", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CP0CEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "tO3n1oSPW58" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "tO3n1oSPW58" + ] + } + } + ] + } + }, + "trackingParams": "CP0CEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CPwCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "tO3n1oSPW58", + "onAddCommand": { + "clickTrackingParams": "CPwCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "tO3n1oSPW58", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CPwCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CPoCEMY0GA8iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "Cgt0TzNuMW9TUFc1OA%3D%3D", + "commands": [ + { + "clickTrackingParams": "CPoCEMY0GA8iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CPsCEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CPoCEMY0GA8iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CPoCEMY0GA8iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 38 seconds" + } + }, + "simpleText": "3:38" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "7.8M views" + }, + { + "text": " • " + }, + { + "text": "11 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "6daRqd54o9U", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/6daRqd54o9U/hqdefault.jpg?sqp=-oaymwE1CKgBEF5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-BIAC4AOKAgwIABABGGYgZihmMA8=&rs=AOn4CLCfp2TOVksM4-M1Ldryt8IkhwHCOw", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/6daRqd54o9U/hqdefault.jpg?sqp=-oaymwE1CMQBEG5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-BIAC4AOKAgwIABABGGYgZihmMA8=&rs=AOn4CLCBHBsZ2uzyUUbGBRcEgeGiTdOT7w", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/6daRqd54o9U/hqdefault.jpg?sqp=-oaymwE2CPYBEIoBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gSAAuADigIMCAAQARhmIGYoZjAP&rs=AOn4CLCrXOiqVqAH651zPdtEN7fcNc8SGA", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/6daRqd54o9U/hqdefault.jpg?sqp=-oaymwE2CNACELwBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gSAAuADigIMCAAQARhmIGYoZjAP&rs=AOn4CLC9lrGMO2KwUkDbuGQ0ZVF-12g7JQ", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Blind Zero - I See Desire" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Blind Zero - I See Desire by Blind Zero 60,926 views 12 years ago 4 minutes, 4 seconds" + } + } + }, + "index": { + "simpleText": "17" + }, + "shortBylineText": { + "runs": [ + { + "text": "Blind Zero", + "navigationEndpoint": { + "clickTrackingParams": "CPYCEMY0GBAiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/@BlindZeroMusic", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCEYG3e7S3WPxrQKt6yOFLGw", + "canonicalBaseUrl": "/@BlindZeroMusic" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 4 seconds" + } + }, + "simpleText": "4:04" + }, + "navigationEndpoint": { + "clickTrackingParams": "CPYCEMY0GBAiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=6daRqd54o9U&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=17&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "6daRqd54o9U", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 16, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr2---sn-h0jeenl6.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=e9d691a9de78a3d5&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "244", + "trackingParams": "CPYCEMY0GBAiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CPkCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CPkCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "6daRqd54o9U", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CPkCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "6daRqd54o9U" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "6daRqd54o9U" + ] + } + } + ] + } + }, + "trackingParams": "CPkCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CPgCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "6daRqd54o9U", + "onAddCommand": { + "clickTrackingParams": "CPgCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "6daRqd54o9U", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CPgCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CPYCEMY0GBAiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "Cgs2ZGFScWQ1NG85VQ%3D%3D", + "commands": [ + { + "clickTrackingParams": "CPYCEMY0GBAiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CPcCEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CPYCEMY0GBAiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CPYCEMY0GBAiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 4 seconds" + } + }, + "simpleText": "4:04" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "60K views" + }, + { + "text": " • " + }, + { + "text": "12 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "GmpjYFbvcQQ", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/GmpjYFbvcQQ/hqdefault.jpg?sqp=-oaymwE1CKgBEF5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-BIAC4AOKAgwIABABGGUgYChZMA8=&rs=AOn4CLCb6b03B57iGs4HpqNNY7hxNHe4lQ", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/GmpjYFbvcQQ/hqdefault.jpg?sqp=-oaymwE1CMQBEG5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-BIAC4AOKAgwIABABGGUgYChZMA8=&rs=AOn4CLD0zvVj6alWjydhRz4HEY7Ik-o4Qw", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/GmpjYFbvcQQ/hqdefault.jpg?sqp=-oaymwE2CPYBEIoBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gSAAuADigIMCAAQARhlIGAoWTAP&rs=AOn4CLCiKBKEjAIgSNgS-79kGZbEyq8Ypw", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/GmpjYFbvcQQ/hqdefault.jpg?sqp=-oaymwE2CNACELwBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gSAAuADigIMCAAQARhlIGAoWTAP&rs=AOn4CLB5K5_OyMCG7kJe3v1T1B_cp-sRoA", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Berg - Tell Me (Audio)" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Berg - Tell Me (Audio) by Filtr Portugal 652,548 views 11 years ago 3 minutes, 28 seconds" + } + } + }, + "index": { + "simpleText": "18" + }, + "shortBylineText": { + "runs": [ + { + "text": "Filtr Portugal", + "navigationEndpoint": { + "clickTrackingParams": "CPICEMY0GBEiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/@FiltrPortugal", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UC3AH36Ou3_gO4Ey1SYCIWxA", + "canonicalBaseUrl": "/@FiltrPortugal" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 28 seconds" + } + }, + "simpleText": "3:28" + }, + "navigationEndpoint": { + "clickTrackingParams": "CPICEMY0GBEiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=GmpjYFbvcQQ&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=18&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "GmpjYFbvcQQ", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 17, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr4---sn-h0jeenl6.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=1a6a636056ef7104&ip=79.205.211.19&initcwndbps=2676250&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "208", + "trackingParams": "CPICEMY0GBEiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CPUCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CPUCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "GmpjYFbvcQQ", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CPUCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "GmpjYFbvcQQ" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "GmpjYFbvcQQ" + ] + } + } + ] + } + }, + "trackingParams": "CPUCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CPQCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "GmpjYFbvcQQ", + "onAddCommand": { + "clickTrackingParams": "CPQCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "GmpjYFbvcQQ", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CPQCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CPICEMY0GBEiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtHbXBqWUZidmNRUQ%3D%3D", + "commands": [ + { + "clickTrackingParams": "CPICEMY0GBEiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CPMCEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CPICEMY0GBEiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CPICEMY0GBEiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 28 seconds" + } + }, + "simpleText": "3:28" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "652K views" + }, + { + "text": " • " + }, + { + "text": "11 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "EoA1mCqdsVM", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/EoA1mCqdsVM/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCoh9T2bHvzcu_upQWPL3mOXMEflw", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/EoA1mCqdsVM/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDZQV5hhB3Lh1wjCFCzxcyBEzn4JQ", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/EoA1mCqdsVM/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDUNzlo6_euj-nQZ-H1FNFrxAo-dw", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/EoA1mCqdsVM/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLD4HEfyjtsX8QM9376hegmgUjWw_w", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "LISBOA - Wendy Nazaré & Pep's" + } + ], + "accessibility": { + "accessibilityData": { + "label": "LISBOA - Wendy Nazaré & Pep's by wendynazare 2,434,708 views 12 years ago 3 minutes, 51 seconds" + } + } + }, + "index": { + "simpleText": "19" + }, + "shortBylineText": { + "runs": [ + { + "text": "wendynazare", + "navigationEndpoint": { + "clickTrackingParams": "CO4CEMY0GBIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/@wendynazare", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCuWkRJW3O20-BXyuzvzvjUw", + "canonicalBaseUrl": "/@wendynazare" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 51 seconds" + } + }, + "simpleText": "3:51" + }, + "navigationEndpoint": { + "clickTrackingParams": "CO4CEMY0GBIiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=EoA1mCqdsVM&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=19&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "EoA1mCqdsVM", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 18, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr3---sn-h0jeln7l.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=128035982a9db153&ip=79.205.211.19&initcwndbps=2676250&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "231", + "trackingParams": "CO4CEMY0GBIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CPECEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CPECEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "EoA1mCqdsVM", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CPECEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "EoA1mCqdsVM" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "EoA1mCqdsVM" + ] + } + } + ] + } + }, + "trackingParams": "CPECEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CPACENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "EoA1mCqdsVM", + "onAddCommand": { + "clickTrackingParams": "CPACENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "EoA1mCqdsVM", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CPACENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CO4CEMY0GBIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtFb0ExbUNxZHNWTQ%3D%3D", + "commands": [ + { + "clickTrackingParams": "CO4CEMY0GBIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CO8CEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CO4CEMY0GBIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CO4CEMY0GBIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 51 seconds" + } + }, + "simpleText": "3:51" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "2.4M views" + }, + { + "text": " • " + }, + { + "text": "12 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "Cj25UpcBDt0", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/Cj25UpcBDt0/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBMJyT7zfC37tN594N0CGY03H0aYg", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/Cj25UpcBDt0/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDpe8UOX6JuyTrQKGyM0a_u0SYqjw", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/Cj25UpcBDt0/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAbACML8uIr9sCp-e9JJ17PRNI9hw", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/Cj25UpcBDt0/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCeSC8bLoDmSXHBp_AnSYUjadDPQA", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Faul, Wad Ad, Pnau - Changes (Videoclip)" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Faul, Wad Ad, Pnau - Changes (Videoclip) by FAUL & WAD 117,718,708 views 11 years ago 3 minutes, 25 seconds" + } + } + }, + "index": { + "simpleText": "20" + }, + "shortBylineText": { + "runs": [ + { + "text": "FAUL & WAD", + "navigationEndpoint": { + "clickTrackingParams": "COoCEMY0GBMiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UCdDwQirXr-a15rk0Tw5uxMw", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCdDwQirXr-a15rk0Tw5uxMw", + "canonicalBaseUrl": "/channel/UCdDwQirXr-a15rk0Tw5uxMw" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 25 seconds" + } + }, + "simpleText": "3:25" + }, + "navigationEndpoint": { + "clickTrackingParams": "COoCEMY0GBMiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=Cj25UpcBDt0&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=20&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "Cj25UpcBDt0", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 19, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr4---sn-h0jeln7e.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=0a3db95297010edd&ip=79.205.211.19&initcwndbps=2676250&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "205", + "trackingParams": "COoCEMY0GBMiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CO0CEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CO0CEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "Cj25UpcBDt0", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CO0CEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "Cj25UpcBDt0" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "Cj25UpcBDt0" + ] + } + } + ] + } + }, + "trackingParams": "CO0CEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "COwCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "Cj25UpcBDt0", + "onAddCommand": { + "clickTrackingParams": "COwCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "Cj25UpcBDt0", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "COwCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "COoCEMY0GBMiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtDajI1VXBjQkR0MA%3D%3D", + "commands": [ + { + "clickTrackingParams": "COoCEMY0GBMiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "COsCEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "COoCEMY0GBMiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "COoCEMY0GBMiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 25 seconds" + } + }, + "simpleText": "3:25" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "117M views" + }, + { + "text": " • " + }, + { + "text": "11 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "W-TE_Ys4iwM", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/W-TE_Ys4iwM/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAYZ4HjprMg0TJQ7fdUNenempmEVQ", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/W-TE_Ys4iwM/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLD7ByBPNTImD6c_J3OqiGxG_ajVfg", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/W-TE_Ys4iwM/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCQaCb7H2DkF5szyEM5sI0K9QNWTw", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/W-TE_Ys4iwM/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCpuwRHuaqH514yXPUn_q49LMnF0g", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "One Direction - Story of My Life" + } + ], + "accessibility": { + "accessibilityData": { + "label": "One Direction - Story of My Life by One Direction 1,040,687,862 views 11 years ago 4 minutes, 8 seconds" + } + } + }, + "index": { + "simpleText": "21" + }, + "shortBylineText": { + "runs": [ + { + "text": "One Direction", + "navigationEndpoint": { + "clickTrackingParams": "COYCEMY0GBQiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UCb2HGwORFBo94DmRx4oLzow", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCb2HGwORFBo94DmRx4oLzow", + "canonicalBaseUrl": "/channel/UCb2HGwORFBo94DmRx4oLzow" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 8 seconds" + } + }, + "simpleText": "4:08" + }, + "navigationEndpoint": { + "clickTrackingParams": "COYCEMY0GBQiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=W-TE_Ys4iwM&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=21&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "W-TE_Ys4iwM", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 20, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr4---sn-h0jelnes.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=5be4c4fd8b388b03&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "248", + "trackingParams": "COYCEMY0GBQiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "COkCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "COkCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "W-TE_Ys4iwM", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "COkCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "W-TE_Ys4iwM" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "W-TE_Ys4iwM" + ] + } + } + ] + } + }, + "trackingParams": "COkCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "COgCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "W-TE_Ys4iwM", + "onAddCommand": { + "clickTrackingParams": "COgCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "W-TE_Ys4iwM", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "COgCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "COYCEMY0GBQiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtXLVRFX1lzNGl3TQ%3D%3D", + "commands": [ + { + "clickTrackingParams": "COYCEMY0GBQiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "COcCEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "COYCEMY0GBQiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "COYCEMY0GBQiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 8 seconds" + } + }, + "simpleText": "4:08" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "1B views" + }, + { + "text": " • " + }, + { + "text": "11 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "T-sxSd1uwoU", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/T-sxSd1uwoU/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLB2c2jyFq5JkNhgBSVPVhNKHVrUzA", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/T-sxSd1uwoU/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAQa0w3fHuwi6Q2TxrO4v2DDUjTHw", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/T-sxSd1uwoU/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLD8NAXWvEmz1V6QJyG3Mqpb4T1nqg", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/T-sxSd1uwoU/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAu_FqgYktDFr9sZyqp3j4hYu4l4g", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Britney Spears - I Wanna Go (Official Video)" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Britney Spears - I Wanna Go (Official Video) by Britney Spears 290,797,480 views 13 years ago 4 minutes, 34 seconds" + } + } + }, + "index": { + "simpleText": "22" + }, + "shortBylineText": { + "runs": [ + { + "text": "Britney Spears", + "navigationEndpoint": { + "clickTrackingParams": "COICEMY0GBUiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UCgffc95YDBlkGrBAJUHUmXQ", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCgffc95YDBlkGrBAJUHUmXQ", + "canonicalBaseUrl": "/channel/UCgffc95YDBlkGrBAJUHUmXQ" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 34 seconds" + } + }, + "simpleText": "4:34" + }, + "navigationEndpoint": { + "clickTrackingParams": "COICEMY0GBUiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=T-sxSd1uwoU&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=22&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "T-sxSd1uwoU", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 21, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr4---sn-h0jelne6.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=4feb3149dd6ec285&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "274", + "trackingParams": "COICEMY0GBUiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "COUCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "COUCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "T-sxSd1uwoU", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "COUCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "T-sxSd1uwoU" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "T-sxSd1uwoU" + ] + } + } + ] + } + }, + "trackingParams": "COUCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "COQCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "T-sxSd1uwoU", + "onAddCommand": { + "clickTrackingParams": "COQCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "T-sxSd1uwoU", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "COQCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "COICEMY0GBUiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtULXN4U2QxdXdvVQ%3D%3D", + "commands": [ + { + "clickTrackingParams": "COICEMY0GBUiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "COMCEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "COICEMY0GBUiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "COICEMY0GBUiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 34 seconds" + } + }, + "simpleText": "4:34" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "290M views" + }, + { + "text": " • " + }, + { + "text": "13 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "YxIiPLVR6NA", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/YxIiPLVR6NA/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDetnXwumhmam0sGXcYJBoxUfU4qw", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/YxIiPLVR6NA/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBQcMH4N-guweBz4t792r3SrNYTKg", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/YxIiPLVR6NA/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAJpt2_6077rTXoKQwVWIhOk-0zFg", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/YxIiPLVR6NA/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCXf99Kl9zyUUe-6lry7VaSgDpW5g", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Avicii - Hey Brother (Lyric)" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Avicii - Hey Brother (Lyric) by Avicii 583,918,233 views 11 years ago 4 minutes, 19 seconds" + } + } + }, + "index": { + "simpleText": "23" + }, + "shortBylineText": { + "runs": [ + { + "text": "Avicii", + "navigationEndpoint": { + "clickTrackingParams": "CN4CEMY0GBYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UCPHjpfnnGklkRBBTd0k6aHg", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCPHjpfnnGklkRBBTd0k6aHg", + "canonicalBaseUrl": "/channel/UCPHjpfnnGklkRBBTd0k6aHg" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 19 seconds" + } + }, + "simpleText": "4:19" + }, + "navigationEndpoint": { + "clickTrackingParams": "CN4CEMY0GBYiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=YxIiPLVR6NA&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=23&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "YxIiPLVR6NA", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 22, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr2---sn-h0jeenle.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=6312223cb551e8d0&ip=79.205.211.19&initcwndbps=2676250&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "259", + "trackingParams": "CN4CEMY0GBYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "COECEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "COECEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "YxIiPLVR6NA", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "COECEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "YxIiPLVR6NA" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "YxIiPLVR6NA" + ] + } + } + ] + } + }, + "trackingParams": "COECEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "COACENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "YxIiPLVR6NA", + "onAddCommand": { + "clickTrackingParams": "COACENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "YxIiPLVR6NA", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "COACENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CN4CEMY0GBYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtZeElpUExWUjZOQQ%3D%3D", + "commands": [ + { + "clickTrackingParams": "CN4CEMY0GBYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CN8CEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CN4CEMY0GBYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CN4CEMY0GBYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 19 seconds" + } + }, + "simpleText": "4:19" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "583M views" + }, + { + "text": " • " + }, + { + "text": "11 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "XC3ahd6Di3M", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/XC3ahd6Di3M/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCU8eyalkOK8mbO7b1qoYsReJWfLw", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/XC3ahd6Di3M/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCUyQCCYvt3Rtnpzfrosz9vs0nFjA", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/XC3ahd6Di3M/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLB1zfNcmLHbpMkk2yyGuBQKW9d9lA", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/XC3ahd6Di3M/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAx6LkJ7pv394iXT_7YCRZws45hwA", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "U2 - Ordinary Love (From Mandela OST) Lyric Video" + } + ], + "accessibility": { + "accessibilityData": { + "label": "U2 - Ordinary Love (From Mandela OST) Lyric Video by U2 68,412,269 views 11 years ago 3 minutes, 39 seconds" + } + } + }, + "index": { + "simpleText": "24" + }, + "shortBylineText": { + "runs": [ + { + "text": "U2", + "navigationEndpoint": { + "clickTrackingParams": "CNoCEMY0GBciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UC4gPNusMDwx2Xm-YI35AkCA", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UC4gPNusMDwx2Xm-YI35AkCA", + "canonicalBaseUrl": "/channel/UC4gPNusMDwx2Xm-YI35AkCA" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 39 seconds" + } + }, + "simpleText": "3:39" + }, + "navigationEndpoint": { + "clickTrackingParams": "CNoCEMY0GBciEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=XC3ahd6Di3M&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=24&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "XC3ahd6Di3M", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 23, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr3---sn-h0jelnes.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=5c2dda85de838b73&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "219", + "trackingParams": "CNoCEMY0GBciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CN0CEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CN0CEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "XC3ahd6Di3M", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CN0CEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "XC3ahd6Di3M" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "XC3ahd6Di3M" + ] + } + } + ] + } + }, + "trackingParams": "CN0CEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CNwCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "XC3ahd6Di3M", + "onAddCommand": { + "clickTrackingParams": "CNwCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "XC3ahd6Di3M", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CNwCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CNoCEMY0GBciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtYQzNhaGQ2RGkzTQ%3D%3D", + "commands": [ + { + "clickTrackingParams": "CNoCEMY0GBciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CNsCEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CNoCEMY0GBciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CNoCEMY0GBciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 39 seconds" + } + }, + "simpleText": "3:39" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "68M views" + }, + { + "text": " • " + }, + { + "text": "11 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "vAqPeOUCfyw", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/vAqPeOUCfyw/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLA8NYx1N1tOXDCr-NR1TpZwQzrqYA", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/vAqPeOUCfyw/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCHNJs40QnBASTFwJCjOjexiaoM4Q", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/vAqPeOUCfyw/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDWfRS4sQpvCcAI44nY75D4kCw8Zw", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/vAqPeOUCfyw/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBblobV6r-4v5IoyIn9yHCi8Fpmhw", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Federico Scavo - Funky Nassau (Official Video Teaser)" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Federico Scavo - Funky Nassau (Official Video Teaser) by Energy TV 18,523,069 views 11 years ago 2 minutes, 42 seconds" + } + } + }, + "index": { + "simpleText": "25" + }, + "shortBylineText": { + "runs": [ + { + "text": "Energy TV", + "navigationEndpoint": { + "clickTrackingParams": "CNYCEMY0GBgiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/@EnergyProductionRec", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UC5eYHWDQqAsiKlnvLCz-ezg", + "canonicalBaseUrl": "/@EnergyProductionRec" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "2 minutes, 42 seconds" + } + }, + "simpleText": "2:42" + }, + "navigationEndpoint": { + "clickTrackingParams": "CNYCEMY0GBgiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=vAqPeOUCfyw&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=25&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "vAqPeOUCfyw", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 24, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr4---sn-h0jeenld.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=bc0a8f78e5027f2c&ip=79.205.211.19&initcwndbps=2676250&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "162", + "trackingParams": "CNYCEMY0GBgiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CNkCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CNkCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "vAqPeOUCfyw", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CNkCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "vAqPeOUCfyw" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "vAqPeOUCfyw" + ] + } + } + ] + } + }, + "trackingParams": "CNkCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CNgCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "vAqPeOUCfyw", + "onAddCommand": { + "clickTrackingParams": "CNgCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "vAqPeOUCfyw", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CNgCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CNYCEMY0GBgiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "Cgt2QXFQZU9VQ2Z5dw%3D%3D", + "commands": [ + { + "clickTrackingParams": "CNYCEMY0GBgiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CNcCEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CNYCEMY0GBgiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CNYCEMY0GBgiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "2 minutes, 42 seconds" + } + }, + "simpleText": "2:42" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "18M views" + }, + { + "text": " • " + }, + { + "text": "11 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "zVOXmhn-AcA", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/zVOXmhn-AcA/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDr4v68wFOQT0KoK1SMztpkO9mkzw", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/zVOXmhn-AcA/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAJMh6iownHU6xajR7-r_kAHxmtGA", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/zVOXmhn-AcA/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAlxLcEHcbkjYNnrRmXQOv2Lq6uIA", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/zVOXmhn-AcA/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLA9U3N4uglj3CX8L8eFUmHR1aBrfw", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "George Michael - Amazing" + } + ], + "accessibility": { + "accessibilityData": { + "label": "George Michael - Amazing by WinterGirl991 842,997 views 13 years ago 4 minutes, 26 seconds" + } + } + }, + "index": { + "simpleText": "26" + }, + "shortBylineText": { + "runs": [ + { + "text": "WinterGirl991", + "navigationEndpoint": { + "clickTrackingParams": "CNICEMY0GBkiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/@WinterGirl991", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UC85sMkq9uDGJDQf8fUo6VBA", + "canonicalBaseUrl": "/@WinterGirl991" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 26 seconds" + } + }, + "simpleText": "4:26" + }, + "navigationEndpoint": { + "clickTrackingParams": "CNICEMY0GBkiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=zVOXmhn-AcA&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=26&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "zVOXmhn-AcA", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 25, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr3---sn-h0jeener.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=cd53979a19fe01c0&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "266", + "trackingParams": "CNICEMY0GBkiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CNUCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CNUCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "zVOXmhn-AcA", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CNUCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "zVOXmhn-AcA" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "zVOXmhn-AcA" + ] + } + } + ] + } + }, + "trackingParams": "CNUCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CNQCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "zVOXmhn-AcA", + "onAddCommand": { + "clickTrackingParams": "CNQCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "zVOXmhn-AcA", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CNQCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CNICEMY0GBkiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "Cgt6Vk9YbWhuLUFjQQ%3D%3D", + "commands": [ + { + "clickTrackingParams": "CNICEMY0GBkiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CNMCEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CNICEMY0GBkiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CNICEMY0GBkiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 26 seconds" + } + }, + "simpleText": "4:26" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "842K views" + }, + { + "text": " • " + }, + { + "text": "13 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "450p7goxZqg", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/450p7goxZqg/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBvlfpDDdkHbnlGlnH25l5Eqh4ofA", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/450p7goxZqg/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLB5eBvqkowH7YmqRakDaowPkNUFsw", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/450p7goxZqg/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBqlxGbEnBmZFKfbtYgBa83e4nDtQ", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/450p7goxZqg/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCMPXbqFo3XANmCIDQNxRS2qtmDiQ", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "John Legend - All of Me (Official Video)" + } + ], + "accessibility": { + "accessibilityData": { + "label": "John Legend - All of Me (Official Video) by John Legend 2,493,406,783 views 11 years ago 5 minutes, 8 seconds" + } + } + }, + "index": { + "simpleText": "27" + }, + "shortBylineText": { + "runs": [ + { + "text": "John Legend", + "navigationEndpoint": { + "clickTrackingParams": "CM4CEMY0GBoiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UCEa-JnNdYCIFn3HMhjGEWpQ", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCEa-JnNdYCIFn3HMhjGEWpQ", + "canonicalBaseUrl": "/channel/UCEa-JnNdYCIFn3HMhjGEWpQ" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "5 minutes, 8 seconds" + } + }, + "simpleText": "5:08" + }, + "navigationEndpoint": { + "clickTrackingParams": "CM4CEMY0GBoiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=450p7goxZqg&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=27&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "450p7goxZqg", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 26, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr3---sn-h0jeln7l.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=e39d29ee0a3166a8&ip=79.205.211.19&initcwndbps=2676250&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "308", + "trackingParams": "CM4CEMY0GBoiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CNECEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CNECEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "450p7goxZqg", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CNECEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "450p7goxZqg" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "450p7goxZqg" + ] + } + } + ] + } + }, + "trackingParams": "CNECEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CNACENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "450p7goxZqg", + "onAddCommand": { + "clickTrackingParams": "CNACENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "450p7goxZqg", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CNACENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CM4CEMY0GBoiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "Cgs0NTBwN2dveFpxZw%3D%3D", + "commands": [ + { + "clickTrackingParams": "CM4CEMY0GBoiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CM8CEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CM4CEMY0GBoiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CM4CEMY0GBoiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "5 minutes, 8 seconds" + } + }, + "simpleText": "5:08" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "2.4B views" + }, + { + "text": " • " + }, + { + "text": "11 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "-nV1WxvsfTk", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/-nV1WxvsfTk/hqdefault.jpg?sqp=-oaymwE1CKgBEF5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-CYAC0AWKAgwIABABGFEgWihlMA8=&rs=AOn4CLBhU3DSdZ_sJUv5bEQR35yjlcXQww", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/-nV1WxvsfTk/hqdefault.jpg?sqp=-oaymwE1CMQBEG5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-CYAC0AWKAgwIABABGFEgWihlMA8=&rs=AOn4CLCYNa9RpmkKU6QG9e8HyfXcGJE6RQ", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/-nV1WxvsfTk/hqdefault.jpg?sqp=-oaymwE2CPYBEIoBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gmAAtAFigIMCAAQARhRIFooZTAP&rs=AOn4CLDMwkPCb7NUmj-g1aed80ttasgiGQ", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/-nV1WxvsfTk/hqdefault.jpg?sqp=-oaymwE2CNACELwBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gmAAtAFigIMCAAQARhRIFooZTAP&rs=AOn4CLARZUVQxMpkA2y9VViiaVDRlnVC2Q", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Habibi I love you ( Mon amour, I love you) Ahmed Chawki, Kenza Farah ft Pitbull" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Habibi I love you ( Mon amour, I love you) Ahmed Chawki, Kenza Farah ft Pitbull by JOANDCOLABEL 21,499,220 views 11 years ago 3 minutes, 48 seconds" + } + } + }, + "index": { + "simpleText": "28" + }, + "shortBylineText": { + "runs": [ + { + "text": "JOANDCOLABEL", + "navigationEndpoint": { + "clickTrackingParams": "CMoCEMY0GBsiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/@JOANDCOLABEL", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCMmD10HZfTh-jrnI6M7duTw", + "canonicalBaseUrl": "/@JOANDCOLABEL" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 48 seconds" + } + }, + "simpleText": "3:48" + }, + "navigationEndpoint": { + "clickTrackingParams": "CMoCEMY0GBsiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=-nV1WxvsfTk&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=28&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "-nV1WxvsfTk", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 27, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr2---sn-h0jeenek.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=fa75755b1bec7d39&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "228", + "trackingParams": "CMoCEMY0GBsiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CM0CEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CM0CEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "-nV1WxvsfTk", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CM0CEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "-nV1WxvsfTk" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "-nV1WxvsfTk" + ] + } + } + ] + } + }, + "trackingParams": "CM0CEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CMwCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "-nV1WxvsfTk", + "onAddCommand": { + "clickTrackingParams": "CMwCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "-nV1WxvsfTk", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CMwCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CMoCEMY0GBsiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgstblYxV3h2c2ZUaw%3D%3D", + "commands": [ + { + "clickTrackingParams": "CMoCEMY0GBsiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CMsCEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CMoCEMY0GBsiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CMoCEMY0GBsiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 48 seconds" + } + }, + "simpleText": "3:48" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "21M views" + }, + { + "text": " • " + }, + { + "text": "11 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "akhmS1D2Ce4", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/akhmS1D2Ce4/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBOwnviX2uKfqMYRvgXiKsIxl8KrQ", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/akhmS1D2Ce4/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCMnrVN0P-042Sc2uoxc5nC4bPzDw", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/akhmS1D2Ce4/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCJyHtoJXHkeTKw-uov5shc9RrOow", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/akhmS1D2Ce4/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLC0yrIPDo_utjblcEW4NwPxHNhsjQ", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Lana Del Rey vs Cedric Gervais 'Summertime Sadness' Remix" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Lana Del Rey vs Cedric Gervais 'Summertime Sadness' Remix by Spinnin' Records 178,138,845 views 11 years ago 3 minutes, 46 seconds" + } + } + }, + "index": { + "simpleText": "29" + }, + "shortBylineText": { + "runs": [ + { + "text": "Spinnin' Records", + "navigationEndpoint": { + "clickTrackingParams": "CMYCEMY0GBwiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/@spinninrecords", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCpDJl2EmP7Oh90Vylx0dZtA", + "canonicalBaseUrl": "/@spinninrecords" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 46 seconds" + } + }, + "simpleText": "3:46" + }, + "navigationEndpoint": { + "clickTrackingParams": "CMYCEMY0GBwiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=akhmS1D2Ce4&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=29&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "akhmS1D2Ce4", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 28, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr2---sn-h0jeln7l.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=6a48664b50f609ee&ip=79.205.211.19&initcwndbps=2676250&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "226", + "trackingParams": "CMYCEMY0GBwiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CMkCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CMkCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "akhmS1D2Ce4", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CMkCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "akhmS1D2Ce4" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "akhmS1D2Ce4" + ] + } + } + ] + } + }, + "trackingParams": "CMkCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CMgCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "akhmS1D2Ce4", + "onAddCommand": { + "clickTrackingParams": "CMgCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "akhmS1D2Ce4", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CMgCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CMYCEMY0GBwiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "Cgtha2htUzFEMkNlNA%3D%3D", + "commands": [ + { + "clickTrackingParams": "CMYCEMY0GBwiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CMcCEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CMYCEMY0GBwiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CMYCEMY0GBwiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 46 seconds" + } + }, + "simpleText": "3:46" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "178M views" + }, + { + "text": " • " + }, + { + "text": "11 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "t6hD6r3sIOE", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/t6hD6r3sIOE/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDLShpTYnVnnu6xn1ZcWnbnAq46nw", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/t6hD6r3sIOE/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAWGbkTMfW5lHbREv3YCHg_LkXeeA", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/t6hD6r3sIOE/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBbNoGf0B-5EQgWW8KrH0LP61sbMg", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/t6hD6r3sIOE/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLA4-8W0kfUm-C4d95AQ3XkcJckB6A", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Don Diablo & Matt Nash - Starlight (Could You Be Mine) (Original)" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Don Diablo & Matt Nash - Starlight (Could You Be Mine) (Original) by Axtone 3,939,537 views 11 years ago 5 minutes, 44 seconds" + } + } + }, + "index": { + "simpleText": "30" + }, + "shortBylineText": { + "runs": [ + { + "text": "Axtone", + "navigationEndpoint": { + "clickTrackingParams": "CMICEMY0GB0iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/@Axtone", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UC0fpPkYoKHpNtr8P2kWtgdg", + "canonicalBaseUrl": "/@Axtone" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "5 minutes, 44 seconds" + } + }, + "simpleText": "5:44" + }, + "navigationEndpoint": { + "clickTrackingParams": "CMICEMY0GB0iEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=t6hD6r3sIOE&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=30&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "t6hD6r3sIOE", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 29, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr3---sn-h0jeenl6.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=b7a843eabdec20e1&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "344", + "trackingParams": "CMICEMY0GB0iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CMUCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CMUCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "t6hD6r3sIOE", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CMUCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "t6hD6r3sIOE" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "t6hD6r3sIOE" + ] + } + } + ] + } + }, + "trackingParams": "CMUCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CMQCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "t6hD6r3sIOE", + "onAddCommand": { + "clickTrackingParams": "CMQCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "t6hD6r3sIOE", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CMQCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CMICEMY0GB0iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "Cgt0NmhENnIzc0lPRQ%3D%3D", + "commands": [ + { + "clickTrackingParams": "CMICEMY0GB0iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CMMCEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CMICEMY0GB0iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CMICEMY0GB0iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "5 minutes, 44 seconds" + } + }, + "simpleText": "5:44" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "3.9M views" + }, + { + "text": " • " + }, + { + "text": "11 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "LqAF832WSi0", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/LqAF832WSi0/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBYTvDUhLxQSSzkKUvfLYyQcvXXlA", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/LqAF832WSi0/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAAUM3IwOxEYaM0aM0G7KG3nbJURg", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/LqAF832WSi0/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDVIem8Z9gDMbxFXZLyT7cVRd6RfA", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/LqAF832WSi0/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCDKPgWzEbsTAC__dcK4Rfe9_Sgkw", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "The Aston Shuffle - Comfortable (Official Video) ft. Will Heard" + } + ], + "accessibility": { + "accessibilityData": { + "label": "The Aston Shuffle - Comfortable (Official Video) ft. Will Heard by The Aston Shuffle 865,747 views 11 years ago 4 minutes, 8 seconds" + } + } + }, + "index": { + "simpleText": "31" + }, + "shortBylineText": { + "runs": [ + { + "text": "The Aston Shuffle", + "navigationEndpoint": { + "clickTrackingParams": "CL4CEMY0GB4iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UC3M-u_ZX2TRdEBX8Zax-F2Q", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UC3M-u_ZX2TRdEBX8Zax-F2Q", + "canonicalBaseUrl": "/channel/UC3M-u_ZX2TRdEBX8Zax-F2Q" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 8 seconds" + } + }, + "simpleText": "4:08" + }, + "navigationEndpoint": { + "clickTrackingParams": "CL4CEMY0GB4iEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=LqAF832WSi0&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=31&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "LqAF832WSi0", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 30, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr3---sn-h0jeenl6.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=2ea005f37d964a2d&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "248", + "trackingParams": "CL4CEMY0GB4iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CMECEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CMECEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "LqAF832WSi0", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CMECEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "LqAF832WSi0" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "LqAF832WSi0" + ] + } + } + ] + } + }, + "trackingParams": "CMECEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CMACENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "LqAF832WSi0", + "onAddCommand": { + "clickTrackingParams": "CMACENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "LqAF832WSi0", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CMACENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CL4CEMY0GB4iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtMcUFGODMyV1NpMA%3D%3D", + "commands": [ + { + "clickTrackingParams": "CL4CEMY0GB4iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CL8CEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CL4CEMY0GB4iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CL4CEMY0GB4iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 8 seconds" + } + }, + "simpleText": "4:08" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "865K views" + }, + { + "text": " • " + }, + { + "text": "11 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "i-gyZ35074k", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/i-gyZ35074k/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBZQ1nDFb8pMur7r6zHJ-h74Z6wPw", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/i-gyZ35074k/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDdxjuMNoXsis-gAg4SxA0XCk8-mQ", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/i-gyZ35074k/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDYsEe48t_mdibG92Fjk8cdqbpXvA", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/i-gyZ35074k/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLARr3iQdufs-E9sjgYz_fHDB47_gw", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Zedd - Stay The Night ft. Hayley Williams" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Zedd - Stay The Night ft. Hayley Williams by Zedd 292,231,015 views 11 years ago 3 minutes, 37 seconds" + } + } + }, + "index": { + "simpleText": "32" + }, + "shortBylineText": { + "runs": [ + { + "text": "Zedd", + "navigationEndpoint": { + "clickTrackingParams": "CLoCEMY0GB8iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UCPNokRZ9hacjIQ3IQL6HNUQ", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCPNokRZ9hacjIQ3IQL6HNUQ", + "canonicalBaseUrl": "/channel/UCPNokRZ9hacjIQ3IQL6HNUQ" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 37 seconds" + } + }, + "simpleText": "3:37" + }, + "navigationEndpoint": { + "clickTrackingParams": "CLoCEMY0GB8iEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=i-gyZ35074k&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=32&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "i-gyZ35074k", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 31, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr3---sn-h0jelne6.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=8be832677e74ef89&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "217", + "trackingParams": "CLoCEMY0GB8iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CL0CEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CL0CEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "i-gyZ35074k", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CL0CEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "i-gyZ35074k" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "i-gyZ35074k" + ] + } + } + ] + } + }, + "trackingParams": "CL0CEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CLwCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "i-gyZ35074k", + "onAddCommand": { + "clickTrackingParams": "CLwCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "i-gyZ35074k", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CLwCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CLoCEMY0GB8iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtpLWd5WjM1MDc0aw%3D%3D", + "commands": [ + { + "clickTrackingParams": "CLoCEMY0GB8iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CLsCEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CLoCEMY0GB8iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CLoCEMY0GB8iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 37 seconds" + } + }, + "simpleText": "3:37" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "292M views" + }, + { + "text": " • " + }, + { + "text": "11 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "hN5X4kGhAtU", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/hN5X4kGhAtU/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAVCuZZCbYNGXqsT_mLAyoqCx7dFA", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/hN5X4kGhAtU/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBiEX3UOVDQPYSi4A3El70WElycbQ", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/hN5X4kGhAtU/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLB5N0XKCGgQByN-nVnkyzEACtBdUA", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/hN5X4kGhAtU/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAfDk5d1Q2fLuIIURN-GegpZuFTmA", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Empire Of The Sun - We Are The People (Official Music Video)" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Empire Of The Sun - We Are The People (Official Music Video) by Empire Of The Sun 150,000,408 views 14 years ago 5 minutes, 12 seconds" + } + } + }, + "index": { + "simpleText": "33" + }, + "shortBylineText": { + "runs": [ + { + "text": "Empire Of The Sun", + "navigationEndpoint": { + "clickTrackingParams": "CLYCEMY0GCAiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UCyacMWc-JhzX6iq2PCF-4jw", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCyacMWc-JhzX6iq2PCF-4jw", + "canonicalBaseUrl": "/channel/UCyacMWc-JhzX6iq2PCF-4jw" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "5 minutes, 12 seconds" + } + }, + "simpleText": "5:12" + }, + "navigationEndpoint": { + "clickTrackingParams": "CLYCEMY0GCAiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=hN5X4kGhAtU&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=33&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "hN5X4kGhAtU", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 32, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr1---sn-h0jeener.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=84de57e241a102d5&ip=79.205.211.19&initcwndbps=2676250&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "312", + "trackingParams": "CLYCEMY0GCAiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CLkCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CLkCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "hN5X4kGhAtU", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CLkCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "hN5X4kGhAtU" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "hN5X4kGhAtU" + ] + } + } + ] + } + }, + "trackingParams": "CLkCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CLgCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "hN5X4kGhAtU", + "onAddCommand": { + "clickTrackingParams": "CLgCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "hN5X4kGhAtU", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CLgCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CLYCEMY0GCAiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtoTjVYNGtHaEF0VQ%3D%3D", + "commands": [ + { + "clickTrackingParams": "CLYCEMY0GCAiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CLcCEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CLYCEMY0GCAiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CLYCEMY0GCAiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "5 minutes, 12 seconds" + } + }, + "simpleText": "5:12" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "150M views" + }, + { + "text": " • " + }, + { + "text": "14 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "0injWL1Kl98", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/0injWL1Kl98/hqdefault.jpg?sqp=-oaymwE1CKgBEF5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-BIAC4AOKAgwIABABGGEgZShDMA8=&rs=AOn4CLCdFdX_XwvjeFoM8WibjneZ4EKGsg", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/0injWL1Kl98/hqdefault.jpg?sqp=-oaymwE1CMQBEG5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-BIAC4AOKAgwIABABGGEgZShDMA8=&rs=AOn4CLBf1bpDXnVwPt4Y7i4Lw4A4V3v2Ng", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/0injWL1Kl98/hqdefault.jpg?sqp=-oaymwE2CPYBEIoBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gSAAuADigIMCAAQARhhIGUoQzAP&rs=AOn4CLDWw8NDXC_z4y4MMZIWaDu9hgSZ8Q", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/0injWL1Kl98/hqdefault.jpg?sqp=-oaymwE2CNACELwBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gSAAuADigIMCAAQARhhIGUoQzAP&rs=AOn4CLAe-PBxTtkmOGulBqgs5C7Zay5YFA", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Robbie Williams - Beyond the Sea" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Robbie Williams - Beyond the Sea by ididseeitcome 1,767,144 views 14 years ago 4 minutes, 24 seconds" + } + } + }, + "index": { + "simpleText": "34" + }, + "shortBylineText": { + "runs": [ + { + "text": "ididseeitcome", + "navigationEndpoint": { + "clickTrackingParams": "CLICEMY0GCEiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/@ididseeitcome", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCx8HeHB5BRhva9c2g4h0Qmg", + "canonicalBaseUrl": "/@ididseeitcome" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 24 seconds" + } + }, + "simpleText": "4:24" + }, + "navigationEndpoint": { + "clickTrackingParams": "CLICEMY0GCEiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=0injWL1Kl98&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=34&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "0injWL1Kl98", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 33, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr1---sn-h0jeened.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=d229e358bd4a97df&ip=79.205.211.19&initcwndbps=2676250&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "264", + "trackingParams": "CLICEMY0GCEiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CLUCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CLUCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "0injWL1Kl98", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CLUCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "0injWL1Kl98" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "0injWL1Kl98" + ] + } + } + ] + } + }, + "trackingParams": "CLUCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CLQCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "0injWL1Kl98", + "onAddCommand": { + "clickTrackingParams": "CLQCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "0injWL1Kl98", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CLQCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CLICEMY0GCEiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgswaW5qV0wxS2w5OA%3D%3D", + "commands": [ + { + "clickTrackingParams": "CLICEMY0GCEiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CLMCEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CLICEMY0GCEiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CLICEMY0GCEiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 24 seconds" + } + }, + "simpleText": "4:24" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "1.7M views" + }, + { + "text": " • " + }, + { + "text": "14 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "0KiKEB5guoY", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/0KiKEB5guoY/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBcAjaMjCb430KoqXibNw4x2Aae9w", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/0KiKEB5guoY/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDIO30YiTs4ZoNLvfLBzl7kJqX5Bg", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/0KiKEB5guoY/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAqHD21K6bO_TKoVDPHu8H6hDu3qg", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/0KiKEB5guoY/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBrfo6dRz5sJqf1vqsS1OxpfVsChw", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Eros Ramazzotti - Hasta El Éxtasis ft. Nicole Scherzinger" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Eros Ramazzotti - Hasta El Éxtasis ft. Nicole Scherzinger by ErosRamazzotti 5,859,401 views 11 years ago 3 minutes, 46 seconds" + } + } + }, + "index": { + "simpleText": "35" + }, + "shortBylineText": { + "runs": [ + { + "text": "ErosRamazzotti", + "navigationEndpoint": { + "clickTrackingParams": "CK4CEMY0GCIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UC-6TzsYLnG8R-K-r-rVaaeA", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UC-6TzsYLnG8R-K-r-rVaaeA", + "canonicalBaseUrl": "/channel/UC-6TzsYLnG8R-K-r-rVaaeA" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 46 seconds" + } + }, + "simpleText": "3:46" + }, + "navigationEndpoint": { + "clickTrackingParams": "CK4CEMY0GCIiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=0KiKEB5guoY&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=35&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "0KiKEB5guoY", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 34, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr5---sn-h0jeenld.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=d0a88a101e60ba86&ip=79.205.211.19&initcwndbps=2676250&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "226", + "trackingParams": "CK4CEMY0GCIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CLECEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CLECEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "0KiKEB5guoY", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CLECEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "0KiKEB5guoY" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "0KiKEB5guoY" + ] + } + } + ] + } + }, + "trackingParams": "CLECEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CLACENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "0KiKEB5guoY", + "onAddCommand": { + "clickTrackingParams": "CLACENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "0KiKEB5guoY", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CLACENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CK4CEMY0GCIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgswS2lLRUI1Z3VvWQ%3D%3D", + "commands": [ + { + "clickTrackingParams": "CK4CEMY0GCIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CK8CEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CK4CEMY0GCIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CK4CEMY0GCIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 46 seconds" + } + }, + "simpleText": "3:46" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "5.8M views" + }, + { + "text": " • " + }, + { + "text": "11 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "BR_DFMUzX4E", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/BR_DFMUzX4E/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBpYen3YJBZVCHxCOiR2eHWEQDZIA", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/BR_DFMUzX4E/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCWwrVSwgbAO0yz1Qx8gg69TyXYhg", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/BR_DFMUzX4E/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBwUCpZjwaKeafxwNABH230FFtEyQ", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/BR_DFMUzX4E/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCsbcNCb_mt2dGtNuJuALlwmLoM8Q", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Armin van Buuren feat. Trevor Guthrie - This Is What It Feels Like (Official Music Video)" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Armin van Buuren feat. Trevor Guthrie - This Is What It Feels Like (Official Music Video) by Armada Music TV 140,456,818 views 11 years ago 4 minutes, 10 seconds" + } + } + }, + "index": { + "simpleText": "36" + }, + "shortBylineText": { + "runs": [ + { + "text": "Armada Music TV", + "navigationEndpoint": { + "clickTrackingParams": "CKoCEMY0GCMiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/@armadamusictv", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCGZXYc32ri4D0gSLPf2pZXQ", + "canonicalBaseUrl": "/@armadamusictv" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 10 seconds" + } + }, + "simpleText": "4:10" + }, + "navigationEndpoint": { + "clickTrackingParams": "CKoCEMY0GCMiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=BR_DFMUzX4E&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=36&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "BR_DFMUzX4E", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 35, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr1---sn-h0jeenek.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=051fc314c5335f81&ip=79.205.211.19&initcwndbps=2676250&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "250", + "trackingParams": "CKoCEMY0GCMiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CK0CEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CK0CEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "BR_DFMUzX4E", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CK0CEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "BR_DFMUzX4E" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "BR_DFMUzX4E" + ] + } + } + ] + } + }, + "trackingParams": "CK0CEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CKwCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "BR_DFMUzX4E", + "onAddCommand": { + "clickTrackingParams": "CKwCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "BR_DFMUzX4E", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CKwCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CKoCEMY0GCMiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtCUl9ERk1Velg0RQ%3D%3D", + "commands": [ + { + "clickTrackingParams": "CKoCEMY0GCMiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CKsCEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CKoCEMY0GCMiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CKoCEMY0GCMiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 10 seconds" + } + }, + "simpleText": "4:10" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "140M views" + }, + { + "text": " • " + }, + { + "text": "11 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "RsKQOm_iJug", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/RsKQOm_iJug/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDRbUy6H24jiZ4vTBAIZ8_Qf2YIYA", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/RsKQOm_iJug/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBQwmW1_spb2cyFS7UWASybrE9UmQ", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/RsKQOm_iJug/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAYK_-O06XjcwAuEtcol8cWWgIw3A", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/RsKQOm_iJug/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLC9myemrIqhiAXdzFjL0ydrniZ0UA", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "A LIGHT THAT NEVER COMES (Official Lyric Video) - LINKIN PARK x STEVE AOKI" + } + ], + "accessibility": { + "accessibilityData": { + "label": "A LIGHT THAT NEVER COMES (Official Lyric Video) - LINKIN PARK x STEVE AOKI by Linkin Park 16,933,635 views 11 years ago 3 minutes, 58 seconds" + } + } + }, + "index": { + "simpleText": "37" + }, + "shortBylineText": { + "runs": [ + { + "text": "Linkin Park", + "navigationEndpoint": { + "clickTrackingParams": "CKYCEMY0GCQiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UCZU9T1ceaOgwfLRq7OKFU4Q", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCZU9T1ceaOgwfLRq7OKFU4Q", + "canonicalBaseUrl": "/channel/UCZU9T1ceaOgwfLRq7OKFU4Q" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 58 seconds" + } + }, + "simpleText": "3:58" + }, + "navigationEndpoint": { + "clickTrackingParams": "CKYCEMY0GCQiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=RsKQOm_iJug&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=37&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "RsKQOm_iJug", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 36, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr5---sn-h0jelnes.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=46c2903a6fe226e8&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "238", + "trackingParams": "CKYCEMY0GCQiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CKkCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CKkCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "RsKQOm_iJug", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CKkCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "RsKQOm_iJug" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "RsKQOm_iJug" + ] + } + } + ] + } + }, + "trackingParams": "CKkCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CKgCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "RsKQOm_iJug", + "onAddCommand": { + "clickTrackingParams": "CKgCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "RsKQOm_iJug", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CKgCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CKYCEMY0GCQiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtSc0tRT21faUp1Zw%3D%3D", + "commands": [ + { + "clickTrackingParams": "CKYCEMY0GCQiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CKcCEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CKYCEMY0GCQiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CKYCEMY0GCQiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 58 seconds" + } + }, + "simpleText": "3:58" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "16M views" + }, + { + "text": " • " + }, + { + "text": "11 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "yZqmarGShxg", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/yZqmarGShxg/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAk4ekkgJwCLdeho5NpJ2Iu8miMQA", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/yZqmarGShxg/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLD23-BBj6TMY9DsXtgPajGk5RjSUA", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/yZqmarGShxg/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAsUENcuOiy0_L3W0LDcWYcSRRAAw", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/yZqmarGShxg/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDjOKGSWUTCbhMXpY_K9D6A4P7NcQ", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Calvin Harris & Alesso - Under Control (Official Video) ft. Hurts" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Calvin Harris & Alesso - Under Control (Official Video) ft. Hurts by Calvin Harris 305,114,182 views 11 years ago 3 minutes, 31 seconds" + } + } + }, + "index": { + "simpleText": "38" + }, + "shortBylineText": { + "runs": [ + { + "text": "Calvin Harris", + "navigationEndpoint": { + "clickTrackingParams": "CKICEMY0GCUiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UCIjYyZxkFucP_W-tmXg_9Ow", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCIjYyZxkFucP_W-tmXg_9Ow", + "canonicalBaseUrl": "/channel/UCIjYyZxkFucP_W-tmXg_9Ow" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 31 seconds" + } + }, + "simpleText": "3:31" + }, + "navigationEndpoint": { + "clickTrackingParams": "CKICEMY0GCUiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=yZqmarGShxg&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=38&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "yZqmarGShxg", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 37, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr2---sn-h0jeenle.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=c99aa66ab1928718&ip=79.205.211.19&initcwndbps=2676250&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "211", + "trackingParams": "CKICEMY0GCUiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CKUCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CKUCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "yZqmarGShxg", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CKUCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "yZqmarGShxg" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "yZqmarGShxg" + ] + } + } + ] + } + }, + "trackingParams": "CKUCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CKQCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "yZqmarGShxg", + "onAddCommand": { + "clickTrackingParams": "CKQCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "yZqmarGShxg", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CKQCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CKICEMY0GCUiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "Cgt5WnFtYXJHU2h4Zw%3D%3D", + "commands": [ + { + "clickTrackingParams": "CKICEMY0GCUiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CKMCEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CKICEMY0GCUiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CKICEMY0GCUiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 31 seconds" + } + }, + "simpleText": "3:31" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "305M views" + }, + { + "text": " • " + }, + { + "text": "11 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "L5GwTfI_PD8", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/L5GwTfI_PD8/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLC2djC5eb_sUntqpiAaF0QNaHUWrQ", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/L5GwTfI_PD8/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBycNY58Ilnl_JQ4e2IhIMjDj-wvg", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/L5GwTfI_PD8/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBJTXTMdi1nuob4h8TIO4-cU8xD3Q", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/L5GwTfI_PD8/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAgnCTTCwavbAnTAWtzyP0aMuN-vg", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Fly Project - Toca Toca | Official Music Video" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Fly Project - Toca Toca | Official Music Video by Fly Project 219,920,157 views 11 years ago 2 minutes, 50 seconds" + } + } + }, + "index": { + "simpleText": "39" + }, + "shortBylineText": { + "runs": [ + { + "text": "Fly Project", + "navigationEndpoint": { + "clickTrackingParams": "CJ4CEMY0GCYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UCr5xubfcrZYYBDEOJCdI13A", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCr5xubfcrZYYBDEOJCdI13A", + "canonicalBaseUrl": "/channel/UCr5xubfcrZYYBDEOJCdI13A" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "2 minutes, 50 seconds" + } + }, + "simpleText": "2:50" + }, + "navigationEndpoint": { + "clickTrackingParams": "CJ4CEMY0GCYiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=L5GwTfI_PD8&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=39&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "L5GwTfI_PD8", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 38, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr1---sn-h0jeenl6.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=2f91b04df23f3c3f&ip=79.205.211.19&initcwndbps=2676250&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "170", + "trackingParams": "CJ4CEMY0GCYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CKECEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CKECEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "L5GwTfI_PD8", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CKECEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "L5GwTfI_PD8" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "L5GwTfI_PD8" + ] + } + } + ] + } + }, + "trackingParams": "CKECEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CKACENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "L5GwTfI_PD8", + "onAddCommand": { + "clickTrackingParams": "CKACENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "L5GwTfI_PD8", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CKACENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CJ4CEMY0GCYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtMNUd3VGZJX1BEOA%3D%3D", + "commands": [ + { + "clickTrackingParams": "CJ4CEMY0GCYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CJ8CEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CJ4CEMY0GCYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CJ4CEMY0GCYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "2 minutes, 50 seconds" + } + }, + "simpleText": "2:50" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "219M views" + }, + { + "text": " • " + }, + { + "text": "11 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "JL0q8o-IAc8", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/JL0q8o-IAc8/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAQdDNNH8BpWBVFllkY01ZGRraOqw", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/JL0q8o-IAc8/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAnd85hPZQwOEw9XR0WG68i18Wzew", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/JL0q8o-IAc8/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBELNYmIMf7g9upvnSy9Pjcr9VQnQ", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/JL0q8o-IAc8/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBJYY-Q6FIO4WjOkd-9S8ZtxenVBw", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Fly Project - Goodbye | Official Music Video" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Fly Project - Goodbye | Official Music Video by Fly Project 51,557,608 views 14 years ago 3 minutes, 10 seconds" + } + } + }, + "index": { + "simpleText": "40" + }, + "shortBylineText": { + "runs": [ + { + "text": "Fly Project", + "navigationEndpoint": { + "clickTrackingParams": "CJoCEMY0GCciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UCr5xubfcrZYYBDEOJCdI13A", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCr5xubfcrZYYBDEOJCdI13A", + "canonicalBaseUrl": "/channel/UCr5xubfcrZYYBDEOJCdI13A" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 10 seconds" + } + }, + "simpleText": "3:10" + }, + "navigationEndpoint": { + "clickTrackingParams": "CJoCEMY0GCciEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=JL0q8o-IAc8&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=40&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "JL0q8o-IAc8", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 39, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr5---sn-h0jelnez.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=24bd2af28f8801cf&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "190", + "trackingParams": "CJoCEMY0GCciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CJ0CEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CJ0CEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "JL0q8o-IAc8", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CJ0CEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "JL0q8o-IAc8" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "JL0q8o-IAc8" + ] + } + } + ] + } + }, + "trackingParams": "CJ0CEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CJwCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "JL0q8o-IAc8", + "onAddCommand": { + "clickTrackingParams": "CJwCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "JL0q8o-IAc8", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CJwCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CJoCEMY0GCciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtKTDBxOG8tSUFjOA%3D%3D", + "commands": [ + { + "clickTrackingParams": "CJoCEMY0GCciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CJsCEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CJoCEMY0GCciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CJoCEMY0GCciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 10 seconds" + } + }, + "simpleText": "3:10" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "51M views" + }, + { + "text": " • " + }, + { + "text": "14 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "wCXc37dJWNA", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/wCXc37dJWNA/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLACP6HZfTtHkQoKpDJ_7QSqog8gkQ", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/wCXc37dJWNA/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCRiFgvLnJZYtw8tijFghbNNxC6gQ", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/wCXc37dJWNA/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBTWl7tCjBa5qssIqXR4sPSSx1yHA", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/wCXc37dJWNA/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLC12XP-uxyy0SNBwazKsknP4gdq_w", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Fly Project - Back In My Life | Official Music Video" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Fly Project - Back In My Life | Official Music Video by Fly Project 24,880,309 views 12 years ago 3 minutes, 24 seconds" + } + } + }, + "index": { + "simpleText": "41" + }, + "shortBylineText": { + "runs": [ + { + "text": "Fly Project", + "navigationEndpoint": { + "clickTrackingParams": "CJYCEMY0GCgiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UCr5xubfcrZYYBDEOJCdI13A", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCr5xubfcrZYYBDEOJCdI13A", + "canonicalBaseUrl": "/channel/UCr5xubfcrZYYBDEOJCdI13A" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 24 seconds" + } + }, + "simpleText": "3:24" + }, + "navigationEndpoint": { + "clickTrackingParams": "CJYCEMY0GCgiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=wCXc37dJWNA&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=41&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "wCXc37dJWNA", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 40, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr4---sn-h0jeenek.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=c025dcdfb74958d0&ip=79.205.211.19&initcwndbps=2676250&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "204", + "trackingParams": "CJYCEMY0GCgiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CJkCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CJkCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "wCXc37dJWNA", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CJkCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "wCXc37dJWNA" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "wCXc37dJWNA" + ] + } + } + ] + } + }, + "trackingParams": "CJkCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CJgCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "wCXc37dJWNA", + "onAddCommand": { + "clickTrackingParams": "CJgCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "wCXc37dJWNA", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CJgCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CJYCEMY0GCgiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "Cgt3Q1hjMzdkSldOQQ%3D%3D", + "commands": [ + { + "clickTrackingParams": "CJYCEMY0GCgiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CJcCEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CJYCEMY0GCgiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CJYCEMY0GCgiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 24 seconds" + } + }, + "simpleText": "3:24" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "24M views" + }, + { + "text": " • " + }, + { + "text": "12 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "3P06kyFpIQU", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/3P06kyFpIQU/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCEebF1WfL-1pnsJsb1o_OxFU4lRw", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/3P06kyFpIQU/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBuSwOhaJjJP9D2JYEliS_7L_iHkg", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/3P06kyFpIQU/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCuSzPGZvi25E2wjAIydZJTE1y3SQ", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/3P06kyFpIQU/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCLExcSMTkBgv8CBGoBog5wgaflvg", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Fly Project - Musica | Official Music Video" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Fly Project - Musica | Official Music Video by Fly Project 104,731,275 views 13 years ago 3 minutes, 42 seconds" + } + } + }, + "index": { + "simpleText": "42" + }, + "shortBylineText": { + "runs": [ + { + "text": "Fly Project", + "navigationEndpoint": { + "clickTrackingParams": "CJICEMY0GCkiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UCr5xubfcrZYYBDEOJCdI13A", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCr5xubfcrZYYBDEOJCdI13A", + "canonicalBaseUrl": "/channel/UCr5xubfcrZYYBDEOJCdI13A" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 42 seconds" + } + }, + "simpleText": "3:42" + }, + "navigationEndpoint": { + "clickTrackingParams": "CJICEMY0GCkiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=3P06kyFpIQU&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=42&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "3P06kyFpIQU", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 41, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr3---sn-h0jelne6.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=dcfd3a9321692105&ip=79.205.211.19&initcwndbps=2676250&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "222", + "trackingParams": "CJICEMY0GCkiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CJUCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CJUCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "3P06kyFpIQU", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CJUCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "3P06kyFpIQU" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "3P06kyFpIQU" + ] + } + } + ] + } + }, + "trackingParams": "CJUCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CJQCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "3P06kyFpIQU", + "onAddCommand": { + "clickTrackingParams": "CJQCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "3P06kyFpIQU", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CJQCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CJICEMY0GCkiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgszUDA2a3lGcElRVQ%3D%3D", + "commands": [ + { + "clickTrackingParams": "CJICEMY0GCkiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CJMCEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CJICEMY0GCkiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CJICEMY0GCkiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 42 seconds" + } + }, + "simpleText": "3:42" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "104M views" + }, + { + "text": " • " + }, + { + "text": "13 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "zsmUOdmm02A", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/zsmUOdmm02A/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLB3PgIVgaEh_Y_Ki8bYUzcg_LnrIQ", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/zsmUOdmm02A/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBILVRU779bmWcRgTBgJNTuZ7XrEw", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/zsmUOdmm02A/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDej3TzzcXAiE3z72W3QbegCi3dNQ", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/zsmUOdmm02A/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAsJWFtAZuVLND_NBrtj0OZBrhprQ", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "P!nk - True Love (Official Video) ft. Lily Allen" + } + ], + "accessibility": { + "accessibilityData": { + "label": "P!nk - True Love (Official Video) ft. Lily Allen by P!NK 159,514,458 views 11 years ago 3 minutes, 53 seconds" + } + } + }, + "index": { + "simpleText": "43" + }, + "shortBylineText": { + "runs": [ + { + "text": "P!NK", + "navigationEndpoint": { + "clickTrackingParams": "CI4CEMY0GCoiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UCE5yTn9ljzSnC_oMp9Jnckg", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCE5yTn9ljzSnC_oMp9Jnckg", + "canonicalBaseUrl": "/channel/UCE5yTn9ljzSnC_oMp9Jnckg" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 53 seconds" + } + }, + "simpleText": "3:53" + }, + "navigationEndpoint": { + "clickTrackingParams": "CI4CEMY0GCoiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=zsmUOdmm02A&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=43&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "zsmUOdmm02A", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 42, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr3---sn-h0jeln7l.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=cec99439d9a6d360&ip=79.205.211.19&initcwndbps=2676250&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "233", + "trackingParams": "CI4CEMY0GCoiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CJECEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CJECEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "zsmUOdmm02A", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CJECEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "zsmUOdmm02A" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "zsmUOdmm02A" + ] + } + } + ] + } + }, + "trackingParams": "CJECEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CJACENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "zsmUOdmm02A", + "onAddCommand": { + "clickTrackingParams": "CJACENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "zsmUOdmm02A", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CJACENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CI4CEMY0GCoiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "Cgt6c21VT2RtbTAyQQ%3D%3D", + "commands": [ + { + "clickTrackingParams": "CI4CEMY0GCoiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CI8CEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CI4CEMY0GCoiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CI4CEMY0GCoiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 53 seconds" + } + }, + "simpleText": "3:53" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "159M views" + }, + { + "text": " • " + }, + { + "text": "11 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "47dtFZ8CFo8", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/47dtFZ8CFo8/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDxg8TVh9qLSm2kcqf9Sr1Sbgcv3A", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/47dtFZ8CFo8/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLB_LIR2L5x5LXe32TESIXox2qL-rA", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/47dtFZ8CFo8/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBHmVTivrzPGMmv8JyU57_ee-AQyA", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/47dtFZ8CFo8/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLB6e-auxuAuBC4I9t3tJQAtV-cobA", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Capital Cities - Safe And Sound" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Capital Cities - Safe And Sound by Capital Cities 823,706,902 views 11 years ago 3 minutes, 47 seconds" + } + } + }, + "index": { + "simpleText": "44" + }, + "shortBylineText": { + "runs": [ + { + "text": "Capital Cities", + "navigationEndpoint": { + "clickTrackingParams": "CIoCEMY0GCsiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UCV3qsXcX2DaGzpJg2pw9q5g", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCV3qsXcX2DaGzpJg2pw9q5g", + "canonicalBaseUrl": "/channel/UCV3qsXcX2DaGzpJg2pw9q5g" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 47 seconds" + } + }, + "simpleText": "3:47" + }, + "navigationEndpoint": { + "clickTrackingParams": "CIoCEMY0GCsiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=47dtFZ8CFo8&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=44&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "47dtFZ8CFo8", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 43, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr4---sn-h0jelnes.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=e3b76d159f02168f&ip=79.205.211.19&initcwndbps=2676250&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "227", + "trackingParams": "CIoCEMY0GCsiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CI0CEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CI0CEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "47dtFZ8CFo8", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CI0CEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "47dtFZ8CFo8" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "47dtFZ8CFo8" + ] + } + } + ] + } + }, + "trackingParams": "CI0CEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CIwCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "47dtFZ8CFo8", + "onAddCommand": { + "clickTrackingParams": "CIwCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "47dtFZ8CFo8", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CIwCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CIoCEMY0GCsiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "Cgs0N2R0Rlo4Q0ZvOA%3D%3D", + "commands": [ + { + "clickTrackingParams": "CIoCEMY0GCsiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CIsCEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CIoCEMY0GCsiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CIoCEMY0GCsiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 47 seconds" + } + }, + "simpleText": "3:47" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "823M views" + }, + { + "text": " • " + }, + { + "text": "11 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "BEXtdcg7ZfQ", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/BEXtdcg7ZfQ/hqdefault.jpg?sqp=-oaymwE1CKgBEF5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-CYAC0AWKAgwIABABGGUgZShlMA8=&rs=AOn4CLDJROFGUTRIszbU9OxA9kATF2ZG0A", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/BEXtdcg7ZfQ/hqdefault.jpg?sqp=-oaymwE1CMQBEG5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-CYAC0AWKAgwIABABGGUgZShlMA8=&rs=AOn4CLA3IoBz2PSsjPTJ1ufKAsUjFeAtzw", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/BEXtdcg7ZfQ/hqdefault.jpg?sqp=-oaymwE2CPYBEIoBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gmAAtAFigIMCAAQARhlIGUoZTAP&rs=AOn4CLCbP0Ph5BGxUt9txX4ijYpHKdSyHg", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/BEXtdcg7ZfQ/hqdefault.jpg?sqp=-oaymwE2CNACELwBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gmAAtAFigIMCAAQARhlIGUoZTAP&rs=AOn4CLBxApXA0D4D1vjvSijeVTs4zDAgRw", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Kika - Can't Feel Love (Tonight)" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Kika - Can't Feel Love (Tonight) by Pedro Miguel 271,206 views 11 years ago 4 minutes, 2 seconds" + } + } + }, + "index": { + "simpleText": "45" + }, + "shortBylineText": { + "runs": [ + { + "text": "Pedro Miguel", + "navigationEndpoint": { + "clickTrackingParams": "CIYCEMY0GCwiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/@pedromiguel5218", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCv6fbkfpZgUrEZXbSkiyC1Q", + "canonicalBaseUrl": "/@pedromiguel5218" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 2 seconds" + } + }, + "simpleText": "4:02" + }, + "navigationEndpoint": { + "clickTrackingParams": "CIYCEMY0GCwiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=BEXtdcg7ZfQ&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=45&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "BEXtdcg7ZfQ", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 44, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr5---sn-h0jelnes.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=0445ed75c83b65f4&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "242", + "trackingParams": "CIYCEMY0GCwiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CIkCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CIkCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "BEXtdcg7ZfQ", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CIkCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "BEXtdcg7ZfQ" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "BEXtdcg7ZfQ" + ] + } + } + ] + } + }, + "trackingParams": "CIkCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CIgCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "BEXtdcg7ZfQ", + "onAddCommand": { + "clickTrackingParams": "CIgCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "BEXtdcg7ZfQ", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CIgCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CIYCEMY0GCwiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtCRVh0ZGNnN1pmUQ%3D%3D", + "commands": [ + { + "clickTrackingParams": "CIYCEMY0GCwiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CIcCEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CIYCEMY0GCwiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CIYCEMY0GCwiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 2 seconds" + } + }, + "simpleText": "4:02" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "271K views" + }, + { + "text": " • " + }, + { + "text": "11 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "g1j1qwQQ8-Q", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/g1j1qwQQ8-Q/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCAHKCLTmGjoEm1nMR8M5fBZ2Bi2g", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/g1j1qwQQ8-Q/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBNU-hGY2K7pCY2s_mTya-uuI-tNQ", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/g1j1qwQQ8-Q/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLD4bMerODi_s4MP_1duBQfLFGzzRQ", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/g1j1qwQQ8-Q/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBnFQKwGD4W2n4srW_2Z2MwmRIhnQ", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "James Blunt - Bonfire Heart (Official Music Video)" + } + ], + "accessibility": { + "accessibilityData": { + "label": "James Blunt - Bonfire Heart (Official Music Video) by James Blunt 94,412,256 views 11 years ago 3 minutes, 46 seconds" + } + } + }, + "index": { + "simpleText": "46" + }, + "shortBylineText": { + "runs": [ + { + "text": "James Blunt", + "navigationEndpoint": { + "clickTrackingParams": "CIICEMY0GC0iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UCUg8KhMXhFxJm-YQzOQ7nPw", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCUg8KhMXhFxJm-YQzOQ7nPw", + "canonicalBaseUrl": "/channel/UCUg8KhMXhFxJm-YQzOQ7nPw" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 46 seconds" + } + }, + "simpleText": "3:46" + }, + "navigationEndpoint": { + "clickTrackingParams": "CIICEMY0GC0iEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=g1j1qwQQ8-Q&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=46&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "g1j1qwQQ8-Q", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 45, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr4---sn-h0jeenl6.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=8358f5ab0410f3e4&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "226", + "trackingParams": "CIICEMY0GC0iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CIUCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CIUCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "g1j1qwQQ8-Q", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CIUCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "g1j1qwQQ8-Q" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "g1j1qwQQ8-Q" + ] + } + } + ] + } + }, + "trackingParams": "CIUCEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CIQCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "g1j1qwQQ8-Q", + "onAddCommand": { + "clickTrackingParams": "CIQCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "g1j1qwQQ8-Q", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CIQCENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CIICEMY0GC0iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtnMWoxcXdRUTgtUQ%3D%3D", + "commands": [ + { + "clickTrackingParams": "CIICEMY0GC0iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CIMCEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CIICEMY0GC0iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CIICEMY0GC0iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 46 seconds" + } + }, + "simpleText": "3:46" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "94M views" + }, + { + "text": " • " + }, + { + "text": "11 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "sC2nElyx7Ds", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/sC2nElyx7Ds/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBD_ZyHaNedxcep7V0vCNwPuegTZA", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/sC2nElyx7Ds/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBPvRaKGd4pQwrv79HvwWVMe82WQQ", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/sC2nElyx7Ds/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLD_yR4QCHqCEQ_hIzYt9lz75Vbb_A", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/sC2nElyx7Ds/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBmIReHif4lqMsmdsSucE5M_jndpA", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Enrique Iglesias - Heart Attack (Official Music Video)" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Enrique Iglesias - Heart Attack (Official Music Video) by Enrique Iglesias 110,860,874 views 11 years ago 3 minutes, 51 seconds" + } + } + }, + "index": { + "simpleText": "47" + }, + "shortBylineText": { + "runs": [ + { + "text": "Enrique Iglesias", + "navigationEndpoint": { + "clickTrackingParams": "CP4BEMY0GC4iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UC-6czyMkxDi8E8akPl0c7_w", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UC-6czyMkxDi8E8akPl0c7_w", + "canonicalBaseUrl": "/channel/UC-6czyMkxDi8E8akPl0c7_w" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 51 seconds" + } + }, + "simpleText": "3:51" + }, + "navigationEndpoint": { + "clickTrackingParams": "CP4BEMY0GC4iEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=sC2nElyx7Ds&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=47&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "sC2nElyx7Ds", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 46, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr3---sn-h0jeened.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=b02da7125cb1ec3b&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "231", + "trackingParams": "CP4BEMY0GC4iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CIECEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CIECEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "sC2nElyx7Ds", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CIECEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "sC2nElyx7Ds" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "sC2nElyx7Ds" + ] + } + } + ] + } + }, + "trackingParams": "CIECEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CIACENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "sC2nElyx7Ds", + "onAddCommand": { + "clickTrackingParams": "CIACENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "sC2nElyx7Ds", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CIACENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CP4BEMY0GC4iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtzQzJuRWx5eDdEcw%3D%3D", + "commands": [ + { + "clickTrackingParams": "CP4BEMY0GC4iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CP8BEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CP4BEMY0GC4iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CP4BEMY0GC4iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 51 seconds" + } + }, + "simpleText": "3:51" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "110M views" + }, + { + "text": " • " + }, + { + "text": "11 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "-whp15J2n_M", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/-whp15J2n_M/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBdy7L_4ufBSDdHGXYAt7HMFQPnIQ", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/-whp15J2n_M/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDiEQRj3DC7DJfL8o6j93ssLq0mUQ", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/-whp15J2n_M/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDhRkVtvQnOci9Ma1HrjMiqbG2HeQ", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/-whp15J2n_M/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBhdOC0tvcG4PuX9Jkk7zUhz7H0ew", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "ARASH feat Helena- Broken Angel (Official Video)" + } + ], + "accessibility": { + "accessibilityData": { + "label": "ARASH feat Helena- Broken Angel (Official Video) by Warner Music Sweden 76,619,243 views 14 years ago 3 minutes, 23 seconds" + } + } + }, + "index": { + "simpleText": "48" + }, + "shortBylineText": { + "runs": [ + { + "text": "Warner Music Sweden", + "navigationEndpoint": { + "clickTrackingParams": "CPoBEMY0GC8iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/@warnersweden", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCU-0c1hN3jzWTdIetJCUULw", + "canonicalBaseUrl": "/@warnersweden" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 23 seconds" + } + }, + "simpleText": "3:23" + }, + "navigationEndpoint": { + "clickTrackingParams": "CPoBEMY0GC8iEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=-whp15J2n_M&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=48&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "-whp15J2n_M", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 47, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr1---sn-h0jeenek.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=fb0869d792769ff3&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "203", + "trackingParams": "CPoBEMY0GC8iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CP0BEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CP0BEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "-whp15J2n_M", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CP0BEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "-whp15J2n_M" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "-whp15J2n_M" + ] + } + } + ] + } + }, + "trackingParams": "CP0BEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CPwBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "-whp15J2n_M", + "onAddCommand": { + "clickTrackingParams": "CPwBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "-whp15J2n_M", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CPwBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CPoBEMY0GC8iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "Cgstd2hwMTVKMm5fTQ%3D%3D", + "commands": [ + { + "clickTrackingParams": "CPoBEMY0GC8iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CPsBEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CPoBEMY0GC8iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CPoBEMY0GC8iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 23 seconds" + } + }, + "simpleText": "3:23" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "76M views" + }, + { + "text": " • " + }, + { + "text": "14 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "hT_nvWreIhg", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/hT_nvWreIhg/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBIhao5qL--RZvtadDiYgT44baoDw", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/hT_nvWreIhg/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAsYzXI0TjGD18yzU7Y2XiSbEW1zw", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/hT_nvWreIhg/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLD07e2ntG66xGjVR_Kk4uHAGuW7bg", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/hT_nvWreIhg/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLD4ZkdBZxlYjMNx8xnLPU4AdoVhiQ", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "OneRepublic - Counting Stars" + } + ], + "accessibility": { + "accessibilityData": { + "label": "OneRepublic - Counting Stars by OneRepublic 4,132,958,795 views 11 years ago 4 minutes, 44 seconds" + } + } + }, + "index": { + "simpleText": "49" + }, + "shortBylineText": { + "runs": [ + { + "text": "OneRepublic", + "navigationEndpoint": { + "clickTrackingParams": "CPYBEMY0GDAiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UCi4EDAgjULwwNBHOg1aaCig", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCi4EDAgjULwwNBHOg1aaCig", + "canonicalBaseUrl": "/channel/UCi4EDAgjULwwNBHOg1aaCig" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 44 seconds" + } + }, + "simpleText": "4:44" + }, + "navigationEndpoint": { + "clickTrackingParams": "CPYBEMY0GDAiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=hT_nvWreIhg&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=49&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "hT_nvWreIhg", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 48, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr5---sn-h0jeener.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=853fe7bd6ade2218&ip=79.205.211.19&initcwndbps=2676250&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "284", + "trackingParams": "CPYBEMY0GDAiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CPkBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CPkBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "hT_nvWreIhg", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CPkBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "hT_nvWreIhg" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "hT_nvWreIhg" + ] + } + } + ] + } + }, + "trackingParams": "CPkBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CPgBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "hT_nvWreIhg", + "onAddCommand": { + "clickTrackingParams": "CPgBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "hT_nvWreIhg", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CPgBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CPYBEMY0GDAiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtoVF9udldyZUloZw%3D%3D", + "commands": [ + { + "clickTrackingParams": "CPYBEMY0GDAiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CPcBEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CPYBEMY0GDAiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CPYBEMY0GDAiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 44 seconds" + } + }, + "simpleText": "4:44" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "4.1B views" + }, + { + "text": " • " + }, + { + "text": "11 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "UJWk_KNbDHo", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/UJWk_KNbDHo/hqdefault.jpg?sqp=-oaymwE1CKgBEF5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-CYAC0AWKAgwIABABGGUgVShPMA8=&rs=AOn4CLB3xVN3wmMah3co1EO7nYVvUSkeog", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/UJWk_KNbDHo/hqdefault.jpg?sqp=-oaymwE1CMQBEG5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-CYAC0AWKAgwIABABGGUgVShPMA8=&rs=AOn4CLDFyy6Ns1aKkOvgvlX6LfiTB9q2eA", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/UJWk_KNbDHo/hqdefault.jpg?sqp=-oaymwE2CPYBEIoBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gmAAtAFigIMCAAQARhlIFUoTzAP&rs=AOn4CLDFEP7AJx4SNVzFAiAK_T9lHLnp0g", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/UJWk_KNbDHo/hqdefault.jpg?sqp=-oaymwE2CNACELwBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gmAAtAFigIMCAAQARhlIFUoTzAP&rs=AOn4CLAl0SO4FZZ6SUKRMRn95L3ZLBRU-A", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "The Lumineers - \"Stubborn Love\" (Official Video)" + } + ], + "accessibility": { + "accessibilityData": { + "label": "The Lumineers - \"Stubborn Love\" (Official Video) by The Lumineers 169,486,252 views 12 years ago 4 minutes, 40 seconds" + } + } + }, + "index": { + "simpleText": "50" + }, + "shortBylineText": { + "runs": [ + { + "text": "The Lumineers", + "navigationEndpoint": { + "clickTrackingParams": "CPIBEMY0GDEiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UCB7P9Hr5BYB5Mkxau6t3Sgw", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCB7P9Hr5BYB5Mkxau6t3Sgw", + "canonicalBaseUrl": "/channel/UCB7P9Hr5BYB5Mkxau6t3Sgw" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 40 seconds" + } + }, + "simpleText": "4:40" + }, + "navigationEndpoint": { + "clickTrackingParams": "CPIBEMY0GDEiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=UJWk_KNbDHo&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=50&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "UJWk_KNbDHo", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 49, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr3---sn-h0jeenek.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=5095a4fca35b0c7a&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "280", + "trackingParams": "CPIBEMY0GDEiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CPUBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CPUBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "UJWk_KNbDHo", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CPUBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "UJWk_KNbDHo" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "UJWk_KNbDHo" + ] + } + } + ] + } + }, + "trackingParams": "CPUBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CPQBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "UJWk_KNbDHo", + "onAddCommand": { + "clickTrackingParams": "CPQBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "UJWk_KNbDHo", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CPQBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CPIBEMY0GDEiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtVSldrX0tOYkRIbw%3D%3D", + "commands": [ + { + "clickTrackingParams": "CPIBEMY0GDEiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CPMBEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CPIBEMY0GDEiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CPIBEMY0GDEiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 40 seconds" + } + }, + "simpleText": "4:40" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "169M views" + }, + { + "text": " • " + }, + { + "text": "12 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "MC8QcaMMVQE", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/MC8QcaMMVQE/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCAAbDSdJQlhIQmjXbBUwQQb5xqug", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/MC8QcaMMVQE/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDLnyeFrl4uKWmMCPijCtbtS9PDLA", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/MC8QcaMMVQE/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLC8hPFnguyZKSnbKsxMLknXGkROxw", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/MC8QcaMMVQE/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBqmFas4L0jxsT50nXK-_ZNJWgFxQ", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Kings Of Leon - Wait For Me (Audio)" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Kings Of Leon - Wait For Me (Audio) by Kings of Leon 28,671,143 views 11 years ago 3 minutes, 33 seconds" + } + } + }, + "index": { + "simpleText": "51" + }, + "shortBylineText": { + "runs": [ + { + "text": "Kings of Leon", + "navigationEndpoint": { + "clickTrackingParams": "CO4BEMY0GDIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UCfJein8E4rcYZSUCc8UqyMA", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCfJein8E4rcYZSUCc8UqyMA", + "canonicalBaseUrl": "/channel/UCfJein8E4rcYZSUCc8UqyMA" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 33 seconds" + } + }, + "simpleText": "3:33" + }, + "navigationEndpoint": { + "clickTrackingParams": "CO4BEMY0GDIiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=MC8QcaMMVQE&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=51&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "MC8QcaMMVQE", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 50, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr2---sn-h0jelnes.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=302f1071a30c5501&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "213", + "trackingParams": "CO4BEMY0GDIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CPEBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CPEBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "MC8QcaMMVQE", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CPEBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "MC8QcaMMVQE" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "MC8QcaMMVQE" + ] + } + } + ] + } + }, + "trackingParams": "CPEBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CPABENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "MC8QcaMMVQE", + "onAddCommand": { + "clickTrackingParams": "CPABENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "MC8QcaMMVQE", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CPABENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CO4BEMY0GDIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtNQzhRY2FNTVZRRQ%3D%3D", + "commands": [ + { + "clickTrackingParams": "CO4BEMY0GDIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CO8BEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CO4BEMY0GDIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CO4BEMY0GDIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 33 seconds" + } + }, + "simpleText": "3:33" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "28M views" + }, + { + "text": " • " + }, + { + "text": "11 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "jzy2dgEUOhY", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/jzy2dgEUOhY/hqdefault.jpg?sqp=-oaymwE1CKgBEF5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AGGBYAC4AOKAgwIABABGHIgUyg_MA8=&rs=AOn4CLAnw9WlRNIB1ssFUX4x7FAdsKuvdg", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/jzy2dgEUOhY/hqdefault.jpg?sqp=-oaymwE1CMQBEG5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AGGBYAC4AOKAgwIABABGHIgUyg_MA8=&rs=AOn4CLB4Mi95fDi4hWe743pwjB6LYsLEFQ", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/jzy2dgEUOhY/hqdefault.jpg?sqp=-oaymwE2CPYBEIoBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgBhgWAAuADigIMCAAQARhyIFMoPzAP&rs=AOn4CLAUoW9lbl3glxKs1noRsbI2WhfYKQ", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/jzy2dgEUOhY/hqdefault.jpg?sqp=-oaymwE2CNACELwBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgBhgWAAuADigIMCAAQARhyIFMoPzAP&rs=AOn4CLDmacmuMILsbsDH4cBFEeYF6qBcNA", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Guru Josh Project - Infinity (Klaas Vocal Mix) [Ultra Records]" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Guru Josh Project - Infinity (Klaas Vocal Mix) [Ultra Records] by Ultra Records 239,021,360 views 16 years ago 3 minutes, 15 seconds" + } + } + }, + "index": { + "simpleText": "52" + }, + "shortBylineText": { + "runs": [ + { + "text": "Ultra Records", + "navigationEndpoint": { + "clickTrackingParams": "COoBEMY0GDMiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/@ultrarecords", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UC4rasfm9J-X4jNl9SvXp8xA", + "canonicalBaseUrl": "/@ultrarecords" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 15 seconds" + } + }, + "simpleText": "3:15" + }, + "navigationEndpoint": { + "clickTrackingParams": "COoBEMY0GDMiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=jzy2dgEUOhY&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=52&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "jzy2dgEUOhY", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 51, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr2---sn-h0jelne6.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=8f3cb67601143a16&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "195", + "trackingParams": "COoBEMY0GDMiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CO0BEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CO0BEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "jzy2dgEUOhY", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CO0BEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "jzy2dgEUOhY" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "jzy2dgEUOhY" + ] + } + } + ] + } + }, + "trackingParams": "CO0BEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "COwBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "jzy2dgEUOhY", + "onAddCommand": { + "clickTrackingParams": "COwBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "jzy2dgEUOhY", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "COwBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "COoBEMY0GDMiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtqenkyZGdFVU9oWQ%3D%3D", + "commands": [ + { + "clickTrackingParams": "COoBEMY0GDMiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "COsBEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "COoBEMY0GDMiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "COoBEMY0GDMiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 15 seconds" + } + }, + "simpleText": "3:15" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "239M views" + }, + { + "text": " • " + }, + { + "text": "16 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "3YhoejhnW8w", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/3YhoejhnW8w/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDfgpFk1HtN5u0ZBNo78q1mrs_4nw", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/3YhoejhnW8w/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLApVZI-D45J5ojT34Gus61UJaEXdw", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/3YhoejhnW8w/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBMX62qB4qKHZzvBcmVj-XPVeS1JQ", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/3YhoejhnW8w/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCj8mZhCEqajEImqnY0RgKyYWOS5A", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Camila - De Que Me Sirve la Vida" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Camila - De Que Me Sirve la Vida by Camila 285,644,747 views 13 years ago 5 minutes, 51 seconds" + } + } + }, + "index": { + "simpleText": "53" + }, + "shortBylineText": { + "runs": [ + { + "text": "Camila", + "navigationEndpoint": { + "clickTrackingParams": "COYBEMY0GDQiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UCTbABe0xvBjIQeCMXU_R7fA", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCTbABe0xvBjIQeCMXU_R7fA", + "canonicalBaseUrl": "/channel/UCTbABe0xvBjIQeCMXU_R7fA" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "5 minutes, 51 seconds" + } + }, + "simpleText": "5:51" + }, + "navigationEndpoint": { + "clickTrackingParams": "COYBEMY0GDQiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=3YhoejhnW8w&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=53&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "3YhoejhnW8w", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 52, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr1---sn-h0jelnez.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=dd88687a38675bcc&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "351", + "trackingParams": "COYBEMY0GDQiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "COkBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "COkBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "3YhoejhnW8w", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "COkBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "3YhoejhnW8w" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "3YhoejhnW8w" + ] + } + } + ] + } + }, + "trackingParams": "COkBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "COgBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "3YhoejhnW8w", + "onAddCommand": { + "clickTrackingParams": "COgBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "3YhoejhnW8w", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "COgBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "COYBEMY0GDQiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgszWWhvZWpoblc4dw%3D%3D", + "commands": [ + { + "clickTrackingParams": "COYBEMY0GDQiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "COcBEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "COYBEMY0GDQiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "COYBEMY0GDQiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "5 minutes, 51 seconds" + } + }, + "simpleText": "5:51" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "285M views" + }, + { + "text": " • " + }, + { + "text": "13 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "HL4HjQwMx-o", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/HL4HjQwMx-o/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLA6VzpyD2lVc5N71uaB_23uIgQ19A", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/HL4HjQwMx-o/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLA3cspSDPLqEjL0muVDihd0tnqWkQ", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/HL4HjQwMx-o/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDoxvLVbdLzk9pqUptaJPA1vcBVYA", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/HL4HjQwMx-o/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAsuN6aDouSBRmGB6piUuUiuL5R5Q", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Maná - Amor Clandestino (Video Oficial)" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Maná - Amor Clandestino (Video Oficial) by OficialMana 428,292,709 views 13 years ago 4 minutes, 53 seconds" + } + } + }, + "index": { + "simpleText": "54" + }, + "shortBylineText": { + "runs": [ + { + "text": "OficialMana", + "navigationEndpoint": { + "clickTrackingParams": "COIBEMY0GDUiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UC3cSX-0y3IZzr2F2J1dFlUg", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UC3cSX-0y3IZzr2F2J1dFlUg", + "canonicalBaseUrl": "/channel/UC3cSX-0y3IZzr2F2J1dFlUg" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 53 seconds" + } + }, + "simpleText": "4:53" + }, + "navigationEndpoint": { + "clickTrackingParams": "COIBEMY0GDUiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=HL4HjQwMx-o&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=54&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "HL4HjQwMx-o", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 53, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr3---sn-h0jeenld.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=1cbe078d0c0cc7ea&ip=79.205.211.19&initcwndbps=2676250&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "293", + "trackingParams": "COIBEMY0GDUiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "COUBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "COUBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "HL4HjQwMx-o", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "COUBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "HL4HjQwMx-o" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "HL4HjQwMx-o" + ] + } + } + ] + } + }, + "trackingParams": "COUBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "COQBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "HL4HjQwMx-o", + "onAddCommand": { + "clickTrackingParams": "COQBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "HL4HjQwMx-o", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "COQBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "COIBEMY0GDUiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtITDRIalF3TXgtbw%3D%3D", + "commands": [ + { + "clickTrackingParams": "COIBEMY0GDUiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "COMBEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "COIBEMY0GDUiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "COIBEMY0GDUiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 53 seconds" + } + }, + "simpleText": "4:53" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "428M views" + }, + { + "text": " • " + }, + { + "text": "13 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "_KSyWS8UgA4", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/_KSyWS8UgA4/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBU46lqWcHWhFSwiCUytw5njUpmZg", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/_KSyWS8UgA4/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCQFylRnsllq8tClcowKxgPcUEWTg", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/_KSyWS8UgA4/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCdlzpDwD9BJFdH-K2j0bcOFcADsg", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/_KSyWS8UgA4/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCKuicZvyotuY9nfW3zfXlOD6cH8A", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Cali Y El Dandee - Yo Te Esperaré" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Cali Y El Dandee - Yo Te Esperaré by CALIDANDEE 556,958,207 views 13 years ago 4 minutes, 14 seconds" + } + } + }, + "index": { + "simpleText": "55" + }, + "shortBylineText": { + "runs": [ + { + "text": "CALIDANDEE", + "navigationEndpoint": { + "clickTrackingParams": "CN4BEMY0GDYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/@calidandee001", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UC-xukSIikEbhER7PqlB1nuQ", + "canonicalBaseUrl": "/@calidandee001" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 14 seconds" + } + }, + "simpleText": "4:14" + }, + "navigationEndpoint": { + "clickTrackingParams": "CN4BEMY0GDYiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=_KSyWS8UgA4&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=55&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "_KSyWS8UgA4", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 54, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr4---sn-h0jeenld.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=fca4b2592f14800e&ip=79.205.211.19&initcwndbps=2676250&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "254", + "trackingParams": "CN4BEMY0GDYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "COEBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "COEBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "_KSyWS8UgA4", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "COEBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "_KSyWS8UgA4" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "_KSyWS8UgA4" + ] + } + } + ] + } + }, + "trackingParams": "COEBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "COABENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "_KSyWS8UgA4", + "onAddCommand": { + "clickTrackingParams": "COABENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "_KSyWS8UgA4", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "COABENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CN4BEMY0GDYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtfS1N5V1M4VWdBNA%3D%3D", + "commands": [ + { + "clickTrackingParams": "CN4BEMY0GDYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CN8BEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CN4BEMY0GDYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CN4BEMY0GDYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 14 seconds" + } + }, + "simpleText": "4:14" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "556M views" + }, + { + "text": " • " + }, + { + "text": "13 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "3O1_3zBUKM8", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/3O1_3zBUKM8/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDSX6rdGdayCv9q8ORPnwvXyZbY7w", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/3O1_3zBUKM8/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAqUmKxnTY6wYdHwceZVW8Bi14OjA", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/3O1_3zBUKM8/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLC09zyYP3V7DJhsQ0ZH3RYVV9OFeA", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/3O1_3zBUKM8/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLChZ9Ft8GWnxmAKv9lu8JzEkTDATw", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Naughty Boy - La la la ft. Sam Smith (Official Video)" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Naughty Boy - La la la ft. Sam Smith (Official Video) by Naughty Boy 1,339,217,104 views 11 years ago 4 minutes, 4 seconds" + } + } + }, + "index": { + "simpleText": "56" + }, + "shortBylineText": { + "runs": [ + { + "text": "Naughty Boy", + "navigationEndpoint": { + "clickTrackingParams": "CNoBEMY0GDciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UCrJot6B0r3pIS0Q6ZTwZKvw", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCrJot6B0r3pIS0Q6ZTwZKvw", + "canonicalBaseUrl": "/channel/UCrJot6B0r3pIS0Q6ZTwZKvw" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 4 seconds" + } + }, + "simpleText": "4:04" + }, + "navigationEndpoint": { + "clickTrackingParams": "CNoBEMY0GDciEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=3O1_3zBUKM8&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=56&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "3O1_3zBUKM8", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 55, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr2---sn-h0jeln7l.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=dced7fdf305428cf&ip=79.205.211.19&initcwndbps=2676250&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "244", + "trackingParams": "CNoBEMY0GDciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CN0BEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CN0BEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "3O1_3zBUKM8", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CN0BEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "3O1_3zBUKM8" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "3O1_3zBUKM8" + ] + } + } + ] + } + }, + "trackingParams": "CN0BEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CNwBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "3O1_3zBUKM8", + "onAddCommand": { + "clickTrackingParams": "CNwBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "3O1_3zBUKM8", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CNwBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CNoBEMY0GDciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgszTzFfM3pCVUtNOA%3D%3D", + "commands": [ + { + "clickTrackingParams": "CNoBEMY0GDciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CNsBEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CNoBEMY0GDciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CNoBEMY0GDciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 4 seconds" + } + }, + "simpleText": "4:04" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "1.3B views" + }, + { + "text": " • " + }, + { + "text": "11 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "CfihYWRWRTQ", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/CfihYWRWRTQ/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCIcrhbh_N3owILzML6-7eEWqpvOA", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/CfihYWRWRTQ/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBwdDIM9Ie3BilA9LiQ3N1nUfG5eQ", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/CfihYWRWRTQ/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBzF89D001zicGbPbH4FzOdvJ0taQ", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/CfihYWRWRTQ/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBu1Ay7NR8qPDRBOxuC7aw1Icscvw", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "John Newman - Love Me Again" + } + ], + "accessibility": { + "accessibilityData": { + "label": "John Newman - Love Me Again by John Newman 1,091,688,321 views 11 years ago 3 minutes, 56 seconds" + } + } + }, + "index": { + "simpleText": "57" + }, + "shortBylineText": { + "runs": [ + { + "text": "John Newman", + "navigationEndpoint": { + "clickTrackingParams": "CNYBEMY0GDgiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UCXtn650vh9Dj7uz8cFac0AQ", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCXtn650vh9Dj7uz8cFac0AQ", + "canonicalBaseUrl": "/channel/UCXtn650vh9Dj7uz8cFac0AQ" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 56 seconds" + } + }, + "simpleText": "3:56" + }, + "navigationEndpoint": { + "clickTrackingParams": "CNYBEMY0GDgiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=CfihYWRWRTQ&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=57&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "CfihYWRWRTQ", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 56, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr3---sn-h0jeln7e.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=09f8a16164564534&ip=79.205.211.19&initcwndbps=2676250&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "236", + "trackingParams": "CNYBEMY0GDgiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CNkBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CNkBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "CfihYWRWRTQ", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CNkBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "CfihYWRWRTQ" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "CfihYWRWRTQ" + ] + } + } + ] + } + }, + "trackingParams": "CNkBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CNgBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "CfihYWRWRTQ", + "onAddCommand": { + "clickTrackingParams": "CNgBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "CfihYWRWRTQ", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CNgBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CNYBEMY0GDgiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtDZmloWVdSV1JUUQ%3D%3D", + "commands": [ + { + "clickTrackingParams": "CNYBEMY0GDgiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CNcBEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CNYBEMY0GDgiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CNYBEMY0GDgiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 56 seconds" + } + }, + "simpleText": "3:56" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "1B views" + }, + { + "text": " • " + }, + { + "text": "11 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "pr6uyXT1-Vs", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/pr6uyXT1-Vs/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDDE5LY_52_9eCxWt7iijMLmg2c4w", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/pr6uyXT1-Vs/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAF6cjFxbxjzKCDqB6BCEdrfKKAKw", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/pr6uyXT1-Vs/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCQFciI8SQNgZHXCJtHYwvy3i8fpg", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/pr6uyXT1-Vs/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAP2CEkVK-tHiLm57UjszBKiAmlZQ", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Dança da Lua - Eugénia Melo e Castro e Ney Matogrosso" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Dança da Lua - Eugénia Melo e Castro e Ney Matogrosso by Mario Rietsch Monteiro 70,767 views 14 years ago 1 minute, 57 seconds" + } + } + }, + "index": { + "simpleText": "58" + }, + "shortBylineText": { + "runs": [ + { + "text": "Mario Rietsch Monteiro", + "navigationEndpoint": { + "clickTrackingParams": "CNIBEMY0GDkiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/@mariormonteiro", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UC0amZq9I39vfeRjfA8pZd5A", + "canonicalBaseUrl": "/@mariormonteiro" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "1 minute, 57 seconds" + } + }, + "simpleText": "1:57" + }, + "navigationEndpoint": { + "clickTrackingParams": "CNIBEMY0GDkiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=pr6uyXT1-Vs&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=58&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "pr6uyXT1-Vs", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 57, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr2---sn-h0jeenek.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=a6beaec974f5f95b&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "117", + "trackingParams": "CNIBEMY0GDkiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CNUBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CNUBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "pr6uyXT1-Vs", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CNUBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "pr6uyXT1-Vs" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "pr6uyXT1-Vs" + ] + } + } + ] + } + }, + "trackingParams": "CNUBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CNQBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "pr6uyXT1-Vs", + "onAddCommand": { + "clickTrackingParams": "CNQBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "pr6uyXT1-Vs", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CNQBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CNIBEMY0GDkiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtwcjZ1eVhUMS1Wcw%3D%3D", + "commands": [ + { + "clickTrackingParams": "CNIBEMY0GDkiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CNMBEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CNIBEMY0GDkiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CNIBEMY0GDkiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "1 minute, 57 seconds" + } + }, + "simpleText": "1:57" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "70K views" + }, + { + "text": " • " + }, + { + "text": "14 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "6BTjG-dhf5s", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/6BTjG-dhf5s/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCB6CojJe9yunlBLoJxLLS3drmglg", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/6BTjG-dhf5s/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBoZsX1OkxGBO8Mwp2kPCxGtAtoig", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/6BTjG-dhf5s/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCoyW5GYQuCU4vS8IGhAsYod8FQeQ", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/6BTjG-dhf5s/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCcrOamSmXRhCbyraIUWQBBh1dALA", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Daddy Yankee - Limbo (Video Oficial)" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Daddy Yankee - Limbo (Video Oficial) by Daddy Yankee 1,420,126,379 views 12 years ago 4 minutes, 15 seconds" + } + } + }, + "index": { + "simpleText": "59" + }, + "shortBylineText": { + "runs": [ + { + "text": "Daddy Yankee", + "navigationEndpoint": { + "clickTrackingParams": "CM4BEMY0GDoiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UC9TO_oo4c_LrOiKNaY6aysA", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UC9TO_oo4c_LrOiKNaY6aysA", + "canonicalBaseUrl": "/channel/UC9TO_oo4c_LrOiKNaY6aysA" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 15 seconds" + } + }, + "simpleText": "4:15" + }, + "navigationEndpoint": { + "clickTrackingParams": "CM4BEMY0GDoiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=6BTjG-dhf5s&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=59&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "6BTjG-dhf5s", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 58, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr3---sn-h0jelne7.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=e814e31be7617f9b&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "255", + "trackingParams": "CM4BEMY0GDoiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CNEBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CNEBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "6BTjG-dhf5s", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CNEBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "6BTjG-dhf5s" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "6BTjG-dhf5s" + ] + } + } + ] + } + }, + "trackingParams": "CNEBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CNABENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "6BTjG-dhf5s", + "onAddCommand": { + "clickTrackingParams": "CNABENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "6BTjG-dhf5s", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CNABENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CM4BEMY0GDoiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "Cgs2QlRqRy1kaGY1cw%3D%3D", + "commands": [ + { + "clickTrackingParams": "CM4BEMY0GDoiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CM8BEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CM4BEMY0GDoiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CM4BEMY0GDoiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 15 seconds" + } + }, + "simpleText": "4:15" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "1.4B views" + }, + { + "text": " • " + }, + { + "text": "12 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "5dbEhBKGOtY", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/5dbEhBKGOtY/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAu20cZb31Jew5t4T0WSPbozhkOWw", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/5dbEhBKGOtY/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDN5rDJy-e3Q-oKv56oGAeiWxp_wA", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/5dbEhBKGOtY/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBVTlhWdeeQAPN_hbtd9SiOfiD-cg", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/5dbEhBKGOtY/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDIwWRFUUwHSYpwbnNbM-__RVoGFA", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "David Guetta - Play Hard ft. Ne-Yo, Akon (Official Video)" + } + ], + "accessibility": { + "accessibilityData": { + "label": "David Guetta - Play Hard ft. Ne-Yo, Akon (Official Video) by David Guetta 1,228,365,572 views 11 years ago 4 minutes, 2 seconds" + } + } + }, + "index": { + "simpleText": "60" + }, + "shortBylineText": { + "runs": [ + { + "text": "David Guetta", + "navigationEndpoint": { + "clickTrackingParams": "CMoBEMY0GDsiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UC1l7wYrva1qCH-wgqcHaaRg", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UC1l7wYrva1qCH-wgqcHaaRg", + "canonicalBaseUrl": "/channel/UC1l7wYrva1qCH-wgqcHaaRg" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 2 seconds" + } + }, + "simpleText": "4:02" + }, + "navigationEndpoint": { + "clickTrackingParams": "CMoBEMY0GDsiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=5dbEhBKGOtY&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=60&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "5dbEhBKGOtY", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 59, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr2---sn-h0jeenl6.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=e5d6c48412863ad6&ip=79.205.211.19&initcwndbps=2676250&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "242", + "trackingParams": "CMoBEMY0GDsiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CM0BEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CM0BEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "5dbEhBKGOtY", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CM0BEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "5dbEhBKGOtY" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "5dbEhBKGOtY" + ] + } + } + ] + } + }, + "trackingParams": "CM0BEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CMwBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "5dbEhBKGOtY", + "onAddCommand": { + "clickTrackingParams": "CMwBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "5dbEhBKGOtY", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CMwBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CMoBEMY0GDsiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "Cgs1ZGJFaEJLR090WQ%3D%3D", + "commands": [ + { + "clickTrackingParams": "CMoBEMY0GDsiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CMsBEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CMoBEMY0GDsiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CMoBEMY0GDsiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 2 seconds" + } + }, + "simpleText": "4:02" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "1.2B views" + }, + { + "text": " • " + }, + { + "text": "11 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "_xSv4RXT2as", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/_xSv4RXT2as/hqdefault.jpg?sqp=-oaymwE1CKgBEF5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-CYAC0AWKAgwIABABGGUgVShNMA8=&rs=AOn4CLBovKLROUB5Na0a16y1ET9WQv6hhg", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/_xSv4RXT2as/hqdefault.jpg?sqp=-oaymwE1CMQBEG5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-CYAC0AWKAgwIABABGGUgVShNMA8=&rs=AOn4CLDbucfXWctpGpQEFIEWBwyPsQQbCQ", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/_xSv4RXT2as/hqdefault.jpg?sqp=-oaymwE2CPYBEIoBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gmAAtAFigIMCAAQARhlIFUoTTAP&rs=AOn4CLDf6sDB2DAqcBDyzP3UJKJpejE1tg", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/_xSv4RXT2as/hqdefault.jpg?sqp=-oaymwE2CNACELwBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gmAAtAFigIMCAAQARhlIFUoTTAP&rs=AOn4CLA8Ztf7jm-8mOOQ98-WrAW961e4pg", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Pegate Mas." + } + ], + "accessibility": { + "accessibilityData": { + "label": "Pegate Mas. by ReggaetontodoelTIME 1,043,846 views 13 years ago 3 minutes, 27 seconds" + } + } + }, + "index": { + "simpleText": "61" + }, + "shortBylineText": { + "runs": [ + { + "text": "ReggaetontodoelTIME", + "navigationEndpoint": { + "clickTrackingParams": "CMYBEMY0GDwiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/@ReggaetontodoelTIME", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCPZ4LPqzBCJGFcWdvk5xxOg", + "canonicalBaseUrl": "/@ReggaetontodoelTIME" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 27 seconds" + } + }, + "simpleText": "3:27" + }, + "navigationEndpoint": { + "clickTrackingParams": "CMYBEMY0GDwiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=_xSv4RXT2as&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=61&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "_xSv4RXT2as", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 60, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr3---sn-h0jeenld.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=ff14afe115d3d9ab&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "207", + "trackingParams": "CMYBEMY0GDwiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CMkBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CMkBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "_xSv4RXT2as", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CMkBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "_xSv4RXT2as" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "_xSv4RXT2as" + ] + } + } + ] + } + }, + "trackingParams": "CMkBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CMgBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "_xSv4RXT2as", + "onAddCommand": { + "clickTrackingParams": "CMgBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "_xSv4RXT2as", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CMgBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CMYBEMY0GDwiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtfeFN2NFJYVDJhcw%3D%3D", + "commands": [ + { + "clickTrackingParams": "CMYBEMY0GDwiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CMcBEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CMYBEMY0GDwiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CMYBEMY0GDwiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 27 seconds" + } + }, + "simpleText": "3:27" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "1M views" + }, + { + "text": " • " + }, + { + "text": "13 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "0NKUpo_xKyQ", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/0NKUpo_xKyQ/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLADtMt8JfkPpoGaMv2hURRXMU6R7Q", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/0NKUpo_xKyQ/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDSVoLlva8D-wJcGTCVC1ZXRKu0IQ", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/0NKUpo_xKyQ/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAE0Ug5lFw6sgJQtIQvCjfu5jOkmg", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/0NKUpo_xKyQ/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLArr-cx_RTYEtrkdPTi3m7tqzGhUA", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Ellie Goulding - Lights (Official Video)" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Ellie Goulding - Lights (Official Video) by Ellie Goulding 232,369,806 views 14 years ago 3 minutes, 34 seconds" + } + } + }, + "index": { + "simpleText": "62" + }, + "shortBylineText": { + "runs": [ + { + "text": "Ellie Goulding", + "navigationEndpoint": { + "clickTrackingParams": "CMIBEMY0GD0iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UCt-am4x4ZyeohfgM85qFgdQ", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCt-am4x4ZyeohfgM85qFgdQ", + "canonicalBaseUrl": "/channel/UCt-am4x4ZyeohfgM85qFgdQ" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 34 seconds" + } + }, + "simpleText": "3:34" + }, + "navigationEndpoint": { + "clickTrackingParams": "CMIBEMY0GD0iEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=0NKUpo_xKyQ&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=62&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "0NKUpo_xKyQ", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 61, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr2---sn-h0jelne7.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=d0d294a68ff12b24&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "214", + "trackingParams": "CMIBEMY0GD0iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CMUBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CMUBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "0NKUpo_xKyQ", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CMUBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "0NKUpo_xKyQ" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "0NKUpo_xKyQ" + ] + } + } + ] + } + }, + "trackingParams": "CMUBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CMQBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "0NKUpo_xKyQ", + "onAddCommand": { + "clickTrackingParams": "CMQBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "0NKUpo_xKyQ", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CMQBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CMIBEMY0GD0iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgswTktVcG9feEt5UQ%3D%3D", + "commands": [ + { + "clickTrackingParams": "CMIBEMY0GD0iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CMMBEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CMIBEMY0GD0iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CMIBEMY0GD0iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 34 seconds" + } + }, + "simpleText": "3:34" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "232M views" + }, + { + "text": " • " + }, + { + "text": "14 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "lbSOLBMUvIE", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/lbSOLBMUvIE/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDvWhUK20wEvDvx6tWIpQZSj6TFKg", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/lbSOLBMUvIE/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLArB-KUURodCmDX4zuumnYJ5TKeqA", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/lbSOLBMUvIE/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAONZ3Xn5kovwS5qaQ8cPFqkH_lzA", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/lbSOLBMUvIE/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLD-f74zKaipTYXwuF-NDq2hCMN9HQ", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Michael Bublé - Home [Official Music Video]" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Michael Bublé - Home [Official Music Video] by Michael Bublé 185,198,696 views 15 years ago 3 minutes, 46 seconds" + } + } + }, + "index": { + "simpleText": "63" + }, + "shortBylineText": { + "runs": [ + { + "text": "Michael Bublé", + "navigationEndpoint": { + "clickTrackingParams": "CL4BEMY0GD4iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UCHqQruhGENdmWy_oeH1f8QA", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCHqQruhGENdmWy_oeH1f8QA", + "canonicalBaseUrl": "/channel/UCHqQruhGENdmWy_oeH1f8QA" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 46 seconds" + } + }, + "simpleText": "3:46" + }, + "navigationEndpoint": { + "clickTrackingParams": "CL4BEMY0GD4iEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=lbSOLBMUvIE&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=63&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "lbSOLBMUvIE", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 62, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr1---sn-h0jelnes.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=95b48e2c1314bc81&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "226", + "trackingParams": "CL4BEMY0GD4iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CMEBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CMEBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "lbSOLBMUvIE", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CMEBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "lbSOLBMUvIE" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "lbSOLBMUvIE" + ] + } + } + ] + } + }, + "trackingParams": "CMEBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CMABENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "lbSOLBMUvIE", + "onAddCommand": { + "clickTrackingParams": "CMABENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "lbSOLBMUvIE", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CMABENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CL4BEMY0GD4iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtsYlNPTEJNVXZJRQ%3D%3D", + "commands": [ + { + "clickTrackingParams": "CL4BEMY0GD4iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CL8BEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CL4BEMY0GD4iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CL4BEMY0GD4iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 46 seconds" + } + }, + "simpleText": "3:46" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "185M views" + }, + { + "text": " • " + }, + { + "text": "15 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "ZPq570o-Nv0", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/ZPq570o-Nv0/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBDO-vYQxpK3yOgOXuagFIx-eguMA", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/ZPq570o-Nv0/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLD4OWcwdAzRxskG6UVTgLauZwxtbA", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/ZPq570o-Nv0/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCzDYn5hCxHQKE0xNOTCb3i-znFbg", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/ZPq570o-Nv0/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCzM8lVpFtRZ-st8Lgv3Asn0VmvAw", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "ESC Portugal - 2003 - Deixa me Sonhar - Rita Guerra" + } + ], + "accessibility": { + "accessibilityData": { + "label": "ESC Portugal - 2003 - Deixa me Sonhar - Rita Guerra by Ricardo Mendes 19,545 views 16 years ago 3 minutes, 12 seconds" + } + } + }, + "index": { + "simpleText": "64" + }, + "shortBylineText": { + "runs": [ + { + "text": "Ricardo Mendes", + "navigationEndpoint": { + "clickTrackingParams": "CLoBEMY0GD8iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/@rickymendes", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCV25caWF5Lt_nKLJ2UowvkQ", + "canonicalBaseUrl": "/@rickymendes" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 12 seconds" + } + }, + "simpleText": "3:12" + }, + "navigationEndpoint": { + "clickTrackingParams": "CLoBEMY0GD8iEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=ZPq570o-Nv0&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=64&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "ZPq570o-Nv0", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 63, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr5---sn-h0jelne6.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=64fab9ef4a3e36fd&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "192", + "trackingParams": "CLoBEMY0GD8iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CL0BEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CL0BEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "ZPq570o-Nv0", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CL0BEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "ZPq570o-Nv0" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "ZPq570o-Nv0" + ] + } + } + ] + } + }, + "trackingParams": "CL0BEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CLwBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "ZPq570o-Nv0", + "onAddCommand": { + "clickTrackingParams": "CLwBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "ZPq570o-Nv0", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CLwBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CLoBEMY0GD8iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtaUHE1NzBvLU52MA%3D%3D", + "commands": [ + { + "clickTrackingParams": "CLoBEMY0GD8iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CLsBEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CLoBEMY0GD8iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CLoBEMY0GD8iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 12 seconds" + } + }, + "simpleText": "3:12" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "19K views" + }, + { + "text": " • " + }, + { + "text": "16 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "1xXtAhX-eiM", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/1xXtAhX-eiM/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAHtZd0WZV-JSsmM0VB8EWv7KbSlA", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/1xXtAhX-eiM/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBuSZs-3Xgj0e9wv1aa7YYln8jROw", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/1xXtAhX-eiM/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLB61OqKRcSm3wBKCUcpyy3sb8BqpQ", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/1xXtAhX-eiM/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDB5CdXIzUcb-Cc1RD-OrqnCCiRIg", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "LOREEN \"Sober\" (2011)" + } + ], + "accessibility": { + "accessibilityData": { + "label": "LOREEN \"Sober\" (2011) by Warner Music Sweden 6,099,679 views 13 years ago 3 minutes, 53 seconds" + } + } + }, + "index": { + "simpleText": "65" + }, + "shortBylineText": { + "runs": [ + { + "text": "Warner Music Sweden", + "navigationEndpoint": { + "clickTrackingParams": "CLYBEMY0GEAiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/@warnersweden", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCU-0c1hN3jzWTdIetJCUULw", + "canonicalBaseUrl": "/@warnersweden" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 53 seconds" + } + }, + "simpleText": "3:53" + }, + "navigationEndpoint": { + "clickTrackingParams": "CLYBEMY0GEAiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=1xXtAhX-eiM&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=65&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "1xXtAhX-eiM", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 64, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr5---sn-h0jeenek.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=d715ed0215fe7a23&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "233", + "trackingParams": "CLYBEMY0GEAiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CLkBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CLkBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "1xXtAhX-eiM", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CLkBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "1xXtAhX-eiM" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "1xXtAhX-eiM" + ] + } + } + ] + } + }, + "trackingParams": "CLkBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CLgBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "1xXtAhX-eiM", + "onAddCommand": { + "clickTrackingParams": "CLgBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "1xXtAhX-eiM", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CLgBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CLYBEMY0GEAiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgsxeFh0QWhYLWVpTQ%3D%3D", + "commands": [ + { + "clickTrackingParams": "CLYBEMY0GEAiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CLcBEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CLYBEMY0GEAiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CLYBEMY0GEAiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 53 seconds" + } + }, + "simpleText": "3:53" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "6M views" + }, + { + "text": " • " + }, + { + "text": "13 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "xPOBdqHWios", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/xPOBdqHWios/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLC8Lh3CkNdyJcTn7gtMzddSd9zh3g", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/xPOBdqHWios/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDUEluw5neNRplNJt9DbenjOTNWlQ", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/xPOBdqHWios/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBehcEqFGrYkQptor0Ghns4sxrowA", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/xPOBdqHWios/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLALKt1b0KiTCQrkK1-DT59TyUpBeg", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Loreen - My Heart Is Refusing Me (Lyric Video)" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Loreen - My Heart Is Refusing Me (Lyric Video) by Warner Music Sweden 2,535,225 views 12 years ago 3 minutes, 44 seconds" + } + } + }, + "index": { + "simpleText": "66" + }, + "shortBylineText": { + "runs": [ + { + "text": "Warner Music Sweden", + "navigationEndpoint": { + "clickTrackingParams": "CLIBEMY0GEEiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/@warnersweden", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCU-0c1hN3jzWTdIetJCUULw", + "canonicalBaseUrl": "/@warnersweden" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 44 seconds" + } + }, + "simpleText": "3:44" + }, + "navigationEndpoint": { + "clickTrackingParams": "CLIBEMY0GEEiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=xPOBdqHWios&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=66&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "xPOBdqHWios", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 65, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr4---sn-h0jeener.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=c4f38176a1d68a8b&ip=79.205.211.19&initcwndbps=2676250&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "224", + "trackingParams": "CLIBEMY0GEEiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CLUBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CLUBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "xPOBdqHWios", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CLUBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "xPOBdqHWios" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "xPOBdqHWios" + ] + } + } + ] + } + }, + "trackingParams": "CLUBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CLQBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "xPOBdqHWios", + "onAddCommand": { + "clickTrackingParams": "CLQBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "xPOBdqHWios", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CLQBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CLIBEMY0GEEiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "Cgt4UE9CZHFIV2lvcw%3D%3D", + "commands": [ + { + "clickTrackingParams": "CLIBEMY0GEEiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CLMBEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CLIBEMY0GEEiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CLIBEMY0GEEiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 44 seconds" + } + }, + "simpleText": "3:44" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "2.5M views" + }, + { + "text": " • " + }, + { + "text": "12 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "6_5D4y6x-oo", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/6_5D4y6x-oo/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDaC_kZhD5OIIbgv87Jmr8GNL7w3A", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/6_5D4y6x-oo/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBhkN0HtMjznrQqMlxBezBSZpHOQA", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/6_5D4y6x-oo/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBONE-_u-aoQlsUh5nYrgs6QUPgUg", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/6_5D4y6x-oo/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBPhxbr2T5fpBosc8qPzVLKIDcAhA", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Edward Maya & Mia Martina - Stereo Love (Ultra Music)" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Edward Maya & Mia Martina - Stereo Love (Ultra Music) by Ultra Records 62,848,978 views 14 years ago 4 minutes, 15 seconds" + } + } + }, + "index": { + "simpleText": "67" + }, + "shortBylineText": { + "runs": [ + { + "text": "Ultra Records", + "navigationEndpoint": { + "clickTrackingParams": "CK4BEMY0GEIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/@ultrarecords", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UC4rasfm9J-X4jNl9SvXp8xA", + "canonicalBaseUrl": "/@ultrarecords" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 15 seconds" + } + }, + "simpleText": "4:15" + }, + "navigationEndpoint": { + "clickTrackingParams": "CK4BEMY0GEIiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=6_5D4y6x-oo&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=67&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "6_5D4y6x-oo", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 66, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr1---sn-h0jelne7.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=ebfe43e32eb1fa8a&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "255", + "trackingParams": "CK4BEMY0GEIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CLEBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CLEBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "6_5D4y6x-oo", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CLEBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "6_5D4y6x-oo" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "6_5D4y6x-oo" + ] + } + } + ] + } + }, + "trackingParams": "CLEBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CLABENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "6_5D4y6x-oo", + "onAddCommand": { + "clickTrackingParams": "CLABENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "6_5D4y6x-oo", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CLABENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CK4BEMY0GEIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "Cgs2XzVENHk2eC1vbw%3D%3D", + "commands": [ + { + "clickTrackingParams": "CK4BEMY0GEIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CK8BEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CK4BEMY0GEIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CK4BEMY0GEIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 15 seconds" + } + }, + "simpleText": "4:15" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "62M views" + }, + { + "text": " • " + }, + { + "text": "14 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "oASZG96v0Rk", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/oASZG96v0Rk/hqdefault.jpg?sqp=-oaymwE1CKgBEF5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-CYAC0AWKAgwIABABGGUgXyhDMA8=&rs=AOn4CLClGyeg9LhLdOH_CUakbhXmikljTg", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/oASZG96v0Rk/hqdefault.jpg?sqp=-oaymwE1CMQBEG5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-CYAC0AWKAgwIABABGGUgXyhDMA8=&rs=AOn4CLDsbf0YdGxcU_GJLos0h-LPWWh7Ww", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/oASZG96v0Rk/hqdefault.jpg?sqp=-oaymwE2CPYBEIoBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gmAAtAFigIMCAAQARhlIF8oQzAP&rs=AOn4CLD6T1Sk2KThe_f0-4SW5jisNy35Bw", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/oASZG96v0Rk/hqdefault.jpg?sqp=-oaymwE2CNACELwBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gmAAtAFigIMCAAQARhlIF8oQzAP&rs=AOn4CLBd5s5UzVJEp9Zg3YkMxP7CUi4QgQ", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Akcent - That's My Name (Ultra Music)" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Akcent - That's My Name (Ultra Music) by Ultra Records 154,819,127 views 15 years ago 4 minutes, 14 seconds" + } + } + }, + "index": { + "simpleText": "68" + }, + "shortBylineText": { + "runs": [ + { + "text": "Ultra Records", + "navigationEndpoint": { + "clickTrackingParams": "CKoBEMY0GEMiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/@ultrarecords", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UC4rasfm9J-X4jNl9SvXp8xA", + "canonicalBaseUrl": "/@ultrarecords" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 14 seconds" + } + }, + "simpleText": "4:14" + }, + "navigationEndpoint": { + "clickTrackingParams": "CKoBEMY0GEMiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=oASZG96v0Rk&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=68&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "oASZG96v0Rk", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 67, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr1---sn-h0jeenl6.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=a004991bdeafd119&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "254", + "trackingParams": "CKoBEMY0GEMiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CK0BEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CK0BEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "oASZG96v0Rk", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CK0BEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "oASZG96v0Rk" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "oASZG96v0Rk" + ] + } + } + ] + } + }, + "trackingParams": "CK0BEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CKwBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "oASZG96v0Rk", + "onAddCommand": { + "clickTrackingParams": "CKwBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "oASZG96v0Rk", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CKwBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CKoBEMY0GEMiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtvQVNaRzk2djBSaw%3D%3D", + "commands": [ + { + "clickTrackingParams": "CKoBEMY0GEMiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CKsBEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CKoBEMY0GEMiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CKoBEMY0GEMiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 14 seconds" + } + }, + "simpleText": "4:14" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "154M views" + }, + { + "text": " • " + }, + { + "text": "15 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "d1dcXgGQT2M", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/d1dcXgGQT2M/hqdefault.jpg?sqp=-oaymwE1CKgBEF5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-BIAC4AOKAgwIABABGE4gTihlMA8=&rs=AOn4CLAlDX9aQI088nOKb_O8q-H2fKj8OA", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/d1dcXgGQT2M/hqdefault.jpg?sqp=-oaymwE1CMQBEG5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-BIAC4AOKAgwIABABGE4gTihlMA8=&rs=AOn4CLDXXu3Eq8Sn66U0CUuBkC_jWtmdrQ", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/d1dcXgGQT2M/hqdefault.jpg?sqp=-oaymwE2CPYBEIoBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gSAAuADigIMCAAQARhOIE4oZTAP&rs=AOn4CLBzZwbcbxOQ5CT1DIMLTQ907z_FsQ", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/d1dcXgGQT2M/hqdefault.jpg?sqp=-oaymwE2CNACELwBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gSAAuADigIMCAAQARhOIE4oZTAP&rs=AOn4CLDmFaKxRVU5T3CfypAQ0DLBkamPuQ", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "La Ley - Mentira (Video Oficial)" + } + ], + "accessibility": { + "accessibilityData": { + "label": "La Ley - Mentira (Video Oficial) by Warner Music México 255,984,045 views 16 years ago 4 minutes, 49 seconds" + } + } + }, + "index": { + "simpleText": "69" + }, + "shortBylineText": { + "runs": [ + { + "text": "Warner Music México", + "navigationEndpoint": { + "clickTrackingParams": "CKYBEMY0GEQiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/@WarnerMusicMexico", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCP1b9jYyEqiNhJi4GqYdovw", + "canonicalBaseUrl": "/@WarnerMusicMexico" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 49 seconds" + } + }, + "simpleText": "4:49" + }, + "navigationEndpoint": { + "clickTrackingParams": "CKYBEMY0GEQiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=d1dcXgGQT2M&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=69&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "d1dcXgGQT2M", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 68, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr1---sn-h0jeenld.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=77575c5e01904f63&ip=79.205.211.19&initcwndbps=2676250&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "289", + "trackingParams": "CKYBEMY0GEQiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CKkBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CKkBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "d1dcXgGQT2M", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CKkBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "d1dcXgGQT2M" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "d1dcXgGQT2M" + ] + } + } + ] + } + }, + "trackingParams": "CKkBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CKgBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "d1dcXgGQT2M", + "onAddCommand": { + "clickTrackingParams": "CKgBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "d1dcXgGQT2M", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CKgBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CKYBEMY0GEQiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtkMWRjWGdHUVQyTQ%3D%3D", + "commands": [ + { + "clickTrackingParams": "CKYBEMY0GEQiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CKcBEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CKYBEMY0GEQiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CKYBEMY0GEQiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 49 seconds" + } + }, + "simpleText": "4:49" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "255M views" + }, + { + "text": " • " + }, + { + "text": "16 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "O2fU28Pehdc", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/O2fU28Pehdc/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAnTmI3HSwFkBYgpooV5oGnBoeAYg", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/O2fU28Pehdc/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDcvNVpXvvxcr61JSdwB1NkSLqZCQ", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/O2fU28Pehdc/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDcYhdUh2BlV5az8L6Iuq-It6ONjA", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/O2fU28Pehdc/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDLmlSoF2pcg72a8myCdj2UkAoJcg", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Maite Perroni - Tu y Yo (Video Oficial)" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Maite Perroni - Tu y Yo (Video Oficial) by Maite Perroni 134,939,906 views 11 years ago 4 minutes, 3 seconds" + } + } + }, + "index": { + "simpleText": "70" + }, + "shortBylineText": { + "runs": [ + { + "text": "Maite Perroni", + "navigationEndpoint": { + "clickTrackingParams": "CKIBEMY0GEUiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UCU720aZHx6_8ABYWvBHbWUQ", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCU720aZHx6_8ABYWvBHbWUQ", + "canonicalBaseUrl": "/channel/UCU720aZHx6_8ABYWvBHbWUQ" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 3 seconds" + } + }, + "simpleText": "4:03" + }, + "navigationEndpoint": { + "clickTrackingParams": "CKIBEMY0GEUiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=O2fU28Pehdc&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=70&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "O2fU28Pehdc", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 69, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr2---sn-h0jeenle.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=3b67d4dbc3de85d7&ip=79.205.211.19&initcwndbps=2676250&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "243", + "trackingParams": "CKIBEMY0GEUiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CKUBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CKUBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "O2fU28Pehdc", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CKUBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "O2fU28Pehdc" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "O2fU28Pehdc" + ] + } + } + ] + } + }, + "trackingParams": "CKUBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CKQBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "O2fU28Pehdc", + "onAddCommand": { + "clickTrackingParams": "CKQBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "O2fU28Pehdc", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CKQBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CKIBEMY0GEUiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtPMmZVMjhQZWhkYw%3D%3D", + "commands": [ + { + "clickTrackingParams": "CKIBEMY0GEUiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CKMBEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CKIBEMY0GEUiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CKIBEMY0GEUiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 3 seconds" + } + }, + "simpleText": "4:03" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "134M views" + }, + { + "text": " • " + }, + { + "text": "11 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "p-Z3YrHJ1sU", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/p-Z3YrHJ1sU/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAS7gls6oe0TfboDpVgwUjTmTLB9g", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/p-Z3YrHJ1sU/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCS8Udu4Esa0SEPLdshEVw9jbCg9Q", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/p-Z3YrHJ1sU/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDx8O_LL4-vrngtFsM3WgBGX3Q8LQ", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/p-Z3YrHJ1sU/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDBWAvjWTOgxJrQUMO7uk_5shK1kw", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Edward Maya & Vika Jigulina - Stereo Love (Official Music Video)" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Edward Maya & Vika Jigulina - Stereo Love (Official Music Video) by Spinnin' Records 671,660,426 views 15 years ago 4 minutes, 13 seconds" + } + } + }, + "index": { + "simpleText": "71" + }, + "shortBylineText": { + "runs": [ + { + "text": "Spinnin' Records", + "navigationEndpoint": { + "clickTrackingParams": "CJ4BEMY0GEYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/@spinninrecords", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCpDJl2EmP7Oh90Vylx0dZtA", + "canonicalBaseUrl": "/@spinninrecords" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 13 seconds" + } + }, + "simpleText": "4:13" + }, + "navigationEndpoint": { + "clickTrackingParams": "CJ4BEMY0GEYiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=p-Z3YrHJ1sU&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=71&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "p-Z3YrHJ1sU", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 70, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr5---sn-h0jeenle.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=a7e67762b1c9d6c5&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "253", + "trackingParams": "CJ4BEMY0GEYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CKEBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CKEBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "p-Z3YrHJ1sU", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CKEBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "p-Z3YrHJ1sU" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "p-Z3YrHJ1sU" + ] + } + } + ] + } + }, + "trackingParams": "CKEBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CKABENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "p-Z3YrHJ1sU", + "onAddCommand": { + "clickTrackingParams": "CKABENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "p-Z3YrHJ1sU", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CKABENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CJ4BEMY0GEYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtwLVozWXJISjFzVQ%3D%3D", + "commands": [ + { + "clickTrackingParams": "CJ4BEMY0GEYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CJ8BEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CJ4BEMY0GEYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CJ4BEMY0GEYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 13 seconds" + } + }, + "simpleText": "4:13" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "671M views" + }, + { + "text": " • " + }, + { + "text": "15 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "mLxYzju_G88", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/mLxYzju_G88/hqdefault.jpg?sqp=-oaymwE1CKgBEF5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-BIAC4AOKAgwIABABGGUgZShlMA8=&rs=AOn4CLCf8dDCPboKZf3Su_VeG3s7rYb__g", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/mLxYzju_G88/hqdefault.jpg?sqp=-oaymwE1CMQBEG5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-BIAC4AOKAgwIABABGGUgZShlMA8=&rs=AOn4CLCXipaBMoF6pPuE9jkVY55zSso-4Q", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/mLxYzju_G88/hqdefault.jpg?sqp=-oaymwE2CPYBEIoBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gSAAuADigIMCAAQARhlIGUoZTAP&rs=AOn4CLBpRXW1Q8tCQ_2DHeZ-9GcLtYpCNw", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/mLxYzju_G88/hqdefault.jpg?sqp=-oaymwE2CNACELwBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gSAAuADigIMCAAQARhlIGUoZTAP&rs=AOn4CLDCH24UlbTQIdwsrdZX6BbnSnD9qw", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "SCHILLER - I'VE SEEN IT ALL (MIT MAYA SABAN)" + } + ], + "accessibility": { + "accessibilityData": { + "label": "SCHILLER - I'VE SEEN IT ALL (MIT MAYA SABAN) by ukasu 3,806,439 views 16 years ago 4 minutes, 2 seconds" + } + } + }, + "index": { + "simpleText": "72" + }, + "shortBylineText": { + "runs": [ + { + "text": "ukasu", + "navigationEndpoint": { + "clickTrackingParams": "CJoBEMY0GEciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/@ukasu", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCUUyi3ZKOX5JRftg38ZxFhQ", + "canonicalBaseUrl": "/@ukasu" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 2 seconds" + } + }, + "simpleText": "4:02" + }, + "navigationEndpoint": { + "clickTrackingParams": "CJoBEMY0GEciEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=mLxYzju_G88&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=72&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "mLxYzju_G88", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 71, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr5---sn-h0jeenl6.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=98bc58ce3bbf1bcf&ip=79.205.211.19&initcwndbps=2676250&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "242", + "trackingParams": "CJoBEMY0GEciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CJ0BEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CJ0BEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "mLxYzju_G88", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CJ0BEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "mLxYzju_G88" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "mLxYzju_G88" + ] + } + } + ] + } + }, + "trackingParams": "CJ0BEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CJwBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "mLxYzju_G88", + "onAddCommand": { + "clickTrackingParams": "CJwBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "mLxYzju_G88", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CJwBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CJoBEMY0GEciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgttTHhZemp1X0c4OA%3D%3D", + "commands": [ + { + "clickTrackingParams": "CJoBEMY0GEciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CJsBEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CJoBEMY0GEciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CJoBEMY0GEciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 2 seconds" + } + }, + "simpleText": "4:02" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "3.8M views" + }, + { + "text": " • " + }, + { + "text": "16 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "dQlxjSm0qU0", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/dQlxjSm0qU0/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDsc0fDYBvJZ0H3JX2qc4id6xGs1A", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/dQlxjSm0qU0/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDeg9yV_a_ihwSZx0RhErXzH2O13A", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/dQlxjSm0qU0/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCICmnt7t-QoZUpYOp_EFcuc0OiLw", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/dQlxjSm0qU0/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAdnE8UJYENbk0IqcyL00WPZWRxhA", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "SCHILLER: „I Feel You\" // with Heppner // Official Video" + } + ], + "accessibility": { + "accessibilityData": { + "label": "SCHILLER: „I Feel You\" // with Heppner // Official Video by SCHILLER official 39,486,270 views 16 years ago 3 minutes, 48 seconds" + } + } + }, + "index": { + "simpleText": "73" + }, + "shortBylineText": { + "runs": [ + { + "text": "SCHILLER official", + "navigationEndpoint": { + "clickTrackingParams": "CJYBEMY0GEgiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UCmM5xlAZDZ-h3bi6AXzDNKQ", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCmM5xlAZDZ-h3bi6AXzDNKQ", + "canonicalBaseUrl": "/channel/UCmM5xlAZDZ-h3bi6AXzDNKQ" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 48 seconds" + } + }, + "simpleText": "3:48" + }, + "navigationEndpoint": { + "clickTrackingParams": "CJYBEMY0GEgiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=dQlxjSm0qU0&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=73&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "dQlxjSm0qU0", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 72, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr5---sn-h0jelnes.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=7509718d29b4a94d&ip=79.205.211.19&initcwndbps=2676250&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "228", + "trackingParams": "CJYBEMY0GEgiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CJkBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CJkBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "dQlxjSm0qU0", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CJkBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "dQlxjSm0qU0" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "dQlxjSm0qU0" + ] + } + } + ] + } + }, + "trackingParams": "CJkBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CJgBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "dQlxjSm0qU0", + "onAddCommand": { + "clickTrackingParams": "CJgBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "dQlxjSm0qU0", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CJgBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CJYBEMY0GEgiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtkUWx4alNtMHFVMA%3D%3D", + "commands": [ + { + "clickTrackingParams": "CJYBEMY0GEgiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CJcBEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CJYBEMY0GEgiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CJYBEMY0GEgiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 48 seconds" + } + }, + "simpleText": "3:48" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "39M views" + }, + { + "text": " • " + }, + { + "text": "16 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "Jbt8oH5Lxto", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/Jbt8oH5Lxto/hqdefault.jpg?sqp=-oaymwE1CKgBEF5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-BIAC6AKKAgwIABABGGUgZShlMA8=&rs=AOn4CLASno47mz_ynIg_IiAlstSWVh9f8Q", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/Jbt8oH5Lxto/hqdefault.jpg?sqp=-oaymwE1CMQBEG5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-BIAC6AKKAgwIABABGGUgZShlMA8=&rs=AOn4CLBg8nOdMSj9QwH8kZPAGpjaWJdPtw", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/Jbt8oH5Lxto/hqdefault.jpg?sqp=-oaymwE2CPYBEIoBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gSAAugCigIMCAAQARhlIGUoZTAP&rs=AOn4CLDLVhWwsaSX4pk9XCyya4TJgLflcA", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/Jbt8oH5Lxto/hqdefault.jpg?sqp=-oaymwE2CNACELwBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gSAAugCigIMCAAQARhlIGUoZTAP&rs=AOn4CLAHm5wGZWv9WHcfQu4ipKfzbz5u8Q", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "The Beatles - Love me Do" + } + ], + "accessibility": { + "accessibilityData": { + "label": "The Beatles - Love me Do by HitboxAgs 14,924,184 views 12 years ago 2 minutes, 23 seconds" + } + } + }, + "index": { + "simpleText": "74" + }, + "shortBylineText": { + "runs": [ + { + "text": "HitboxAgs", + "navigationEndpoint": { + "clickTrackingParams": "CJIBEMY0GEkiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/@HitboxAgs", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCSu-uDw30vUo1p9uBk-w_Yw", + "canonicalBaseUrl": "/@HitboxAgs" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "2 minutes, 23 seconds" + } + }, + "simpleText": "2:23" + }, + "navigationEndpoint": { + "clickTrackingParams": "CJIBEMY0GEkiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=Jbt8oH5Lxto&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=74&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "Jbt8oH5Lxto", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 73, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr3---sn-h0jelne6.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=25bb7ca07e4bc6da&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "143", + "trackingParams": "CJIBEMY0GEkiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CJUBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CJUBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "Jbt8oH5Lxto", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CJUBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "Jbt8oH5Lxto" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "Jbt8oH5Lxto" + ] + } + } + ] + } + }, + "trackingParams": "CJUBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CJQBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "Jbt8oH5Lxto", + "onAddCommand": { + "clickTrackingParams": "CJQBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "Jbt8oH5Lxto", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CJQBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CJIBEMY0GEkiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtKYnQ4b0g1THh0bw%3D%3D", + "commands": [ + { + "clickTrackingParams": "CJIBEMY0GEkiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CJMBEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CJIBEMY0GEkiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CJIBEMY0GEkiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "2 minutes, 23 seconds" + } + }, + "simpleText": "2:23" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "14M views" + }, + { + "text": " • " + }, + { + "text": "12 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "3EBz2baAGHo", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/3EBz2baAGHo/hqdefault.jpg?sqp=-oaymwE1CKgBEF5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-BIAC4AOKAgwIABABGBMgMih_MA8=&rs=AOn4CLBI5yGjuPSvupdJ1iiknxfpr8Yg2g", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/3EBz2baAGHo/hqdefault.jpg?sqp=-oaymwE1CMQBEG5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-BIAC4AOKAgwIABABGBMgMih_MA8=&rs=AOn4CLDPXZZcDasKOg5yKp8HCzX5zFPkmw", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/3EBz2baAGHo/hqdefault.jpg?sqp=-oaymwE2CPYBEIoBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gSAAuADigIMCAAQARgTIDIofzAP&rs=AOn4CLDpmdk5uCUuQ5nQQ8Xfo7M8bvyW2g", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/3EBz2baAGHo/hqdefault.jpg?sqp=-oaymwE2CNACELwBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gSAAuADigIMCAAQARgTIDIofzAP&rs=AOn4CLCIWxiBJPp6Zbq1EJeyhWVZ0A5YNg", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Dirty South feat. Rudy - Phazing (Original Mix)" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Dirty South feat. Rudy - Phazing (Original Mix) by deltoeidis 437,109 views 14 years ago 7 minutes, 33 seconds" + } + } + }, + "index": { + "simpleText": "75" + }, + "shortBylineText": { + "runs": [ + { + "text": "deltoeidis", + "navigationEndpoint": { + "clickTrackingParams": "CI4BEMY0GEoiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/@deltoeidis", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCD0k_PDzp5JHi2a2MZA-AVg", + "canonicalBaseUrl": "/@deltoeidis" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "7 minutes, 33 seconds" + } + }, + "simpleText": "7:33" + }, + "navigationEndpoint": { + "clickTrackingParams": "CI4BEMY0GEoiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=3EBz2baAGHo&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=75&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "3EBz2baAGHo", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 74, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr1---sn-h0jeln7l.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=dc4073d9b680187a&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "453", + "trackingParams": "CI4BEMY0GEoiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CJEBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CJEBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "3EBz2baAGHo", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CJEBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "3EBz2baAGHo" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "3EBz2baAGHo" + ] + } + } + ] + } + }, + "trackingParams": "CJEBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CJABENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "3EBz2baAGHo", + "onAddCommand": { + "clickTrackingParams": "CJABENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "3EBz2baAGHo", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CJABENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CI4BEMY0GEoiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgszRUJ6MmJhQUdIbw%3D%3D", + "commands": [ + { + "clickTrackingParams": "CI4BEMY0GEoiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CI8BEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CI4BEMY0GEoiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CI4BEMY0GEoiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "7 minutes, 33 seconds" + } + }, + "simpleText": "7:33" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "437K views" + }, + { + "text": " • " + }, + { + "text": "14 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "J-gYJBsln-w", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/J-gYJBsln-w/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDfhQSAPLGNzG19EPS8TauB3RVnTA", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/J-gYJBsln-w/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBLMGjEU5-Nfj3-1UiqLdkpY_8W5w", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/J-gYJBsln-w/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDTHmbhRVTaG9Sl8gG-8VtE9rA0sQ", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/J-gYJBsln-w/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCtswxiGQ9Fccb1j51Fs3Hc2PTbsA", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Krewella - Alive (Video)" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Krewella - Alive (Video) by Krewella 114,307,203 views 12 years ago 3 minutes, 27 seconds" + } + } + }, + "index": { + "simpleText": "76" + }, + "shortBylineText": { + "runs": [ + { + "text": "Krewella", + "navigationEndpoint": { + "clickTrackingParams": "CIoBEMY0GEsiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UCDY_0WzkHyj0A1ev6RTql1Q", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCDY_0WzkHyj0A1ev6RTql1Q", + "canonicalBaseUrl": "/channel/UCDY_0WzkHyj0A1ev6RTql1Q" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 27 seconds" + } + }, + "simpleText": "3:27" + }, + "navigationEndpoint": { + "clickTrackingParams": "CIoBEMY0GEsiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=J-gYJBsln-w&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=76&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "J-gYJBsln-w", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 75, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr5---sn-h0jeenld.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=27e818241b259fec&ip=79.205.211.19&initcwndbps=2676250&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "207", + "trackingParams": "CIoBEMY0GEsiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CI0BEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CI0BEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "J-gYJBsln-w", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CI0BEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "J-gYJBsln-w" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "J-gYJBsln-w" + ] + } + } + ] + } + }, + "trackingParams": "CI0BEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CIwBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "J-gYJBsln-w", + "onAddCommand": { + "clickTrackingParams": "CIwBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "J-gYJBsln-w", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CIwBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CIoBEMY0GEsiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtKLWdZSkJzbG4tdw%3D%3D", + "commands": [ + { + "clickTrackingParams": "CIoBEMY0GEsiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CIsBEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CIoBEMY0GEsiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CIoBEMY0GEsiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 27 seconds" + } + }, + "simpleText": "3:27" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "114M views" + }, + { + "text": " • " + }, + { + "text": "12 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "q7yCLn-O-Y0", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/q7yCLn-O-Y0/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLANnYEVw6irRD-bIgs5Ecuw3M-VSw", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/q7yCLn-O-Y0/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCPDa15oP49C7l9JNNQcp5dVPAsdw", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/q7yCLn-O-Y0/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLC4L2CNkoMveWPEF-AX6oLFloFvKw", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/q7yCLn-O-Y0/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLD0prSGZWRnaEk19t2eNgoEEwGBIQ", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Fun.: Carry On [OFFICIAL VIDEO]" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Fun.: Carry On [OFFICIAL VIDEO] by Fueled By Ramen 115,900,816 views 12 years ago 5 minutes, 45 seconds" + } + } + }, + "index": { + "simpleText": "77" + }, + "shortBylineText": { + "runs": [ + { + "text": "Fueled By Ramen", + "navigationEndpoint": { + "clickTrackingParams": "CIYBEMY0GEwiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/@fueledbyramen", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UClVrJwcIy7saPcGc1nct80A", + "canonicalBaseUrl": "/@fueledbyramen" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "5 minutes, 45 seconds" + } + }, + "simpleText": "5:45" + }, + "navigationEndpoint": { + "clickTrackingParams": "CIYBEMY0GEwiEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=q7yCLn-O-Y0&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=77&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "q7yCLn-O-Y0", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 76, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr5---sn-h0jeenle.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=abbc822e7f8ef98d&ip=79.205.211.19&initcwndbps=2676250&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "345", + "trackingParams": "CIYBEMY0GEwiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CIkBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CIkBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "q7yCLn-O-Y0", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CIkBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "q7yCLn-O-Y0" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "q7yCLn-O-Y0" + ] + } + } + ] + } + }, + "trackingParams": "CIkBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CIgBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "q7yCLn-O-Y0", + "onAddCommand": { + "clickTrackingParams": "CIgBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "q7yCLn-O-Y0", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CIgBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CIYBEMY0GEwiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtxN3lDTG4tTy1ZMA%3D%3D", + "commands": [ + { + "clickTrackingParams": "CIYBEMY0GEwiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CIcBEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CIYBEMY0GEwiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CIYBEMY0GEwiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "5 minutes, 45 seconds" + } + }, + "simpleText": "5:45" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "115M views" + }, + { + "text": " • " + }, + { + "text": "12 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "bek1y2uiQGA", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/bek1y2uiQGA/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCszqGjdqkNE0jask-NzfJCgEYhIg", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/bek1y2uiQGA/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDYz6284MIvQcjDTpG6PldcpF_52A", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/bek1y2uiQGA/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLA55IbSmhmsCz5FYeDeUmOHV8N7iQ", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/bek1y2uiQGA/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCp10TFTKeaSWeuuUIfVpVjtg4zLw", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Avicii vs Nicky Romero - I Could Be The One (Nicktim)" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Avicii vs Nicky Romero - I Could Be The One (Nicktim) by Avicii 361,710,064 views 12 years ago 4 minutes, 46 seconds" + } + } + }, + "index": { + "simpleText": "78" + }, + "shortBylineText": { + "runs": [ + { + "text": "Avicii", + "navigationEndpoint": { + "clickTrackingParams": "CIIBEMY0GE0iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UCPHjpfnnGklkRBBTd0k6aHg", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCPHjpfnnGklkRBBTd0k6aHg", + "canonicalBaseUrl": "/channel/UCPHjpfnnGklkRBBTd0k6aHg" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 46 seconds" + } + }, + "simpleText": "4:46" + }, + "navigationEndpoint": { + "clickTrackingParams": "CIIBEMY0GE0iEwj0ytGJkI-MAxUW1EkHHSVYKUkyCnBscHBfdmlkZW9aJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBBwgMEPosGAE=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=bek1y2uiQGA&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=78&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "bek1y2uiQGA", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 77, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr3---sn-h0jeln7l.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=6de935cb6ba24060&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "286", + "trackingParams": "CIIBEMY0GE0iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CIUBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CIUBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "bek1y2uiQGA", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CIUBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "bek1y2uiQGA" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "bek1y2uiQGA" + ] + } + } + ] + } + }, + "trackingParams": "CIUBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CIQBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "bek1y2uiQGA", + "onAddCommand": { + "clickTrackingParams": "CIQBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "bek1y2uiQGA", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CIQBENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CIIBEMY0GE0iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtiZWsxeTJ1aVFHQQ%3D%3D", + "commands": [ + { + "clickTrackingParams": "CIIBEMY0GE0iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CIMBEI5iIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CIIBEMY0GE0iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "hasSeparator": true + } + } + ], + "trackingParams": "CIIBEMY0GE0iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 46 seconds" + } + }, + "simpleText": "4:46" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "361M views" + }, + { + "text": " • " + }, + { + "text": "12 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "EPHmUD0QfmM", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/EPHmUD0QfmM/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCMTUCf1tgENEfqBYNaNFfYpEtpyQ", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/EPHmUD0QfmM/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDPr6WD2eyXjF7UMuQ9fn5IgnYufA", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/EPHmUD0QfmM/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCPouV_5OMd6efgMwD_gq_Fb-yLfw", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/EPHmUD0QfmM/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCwdECiNS-l85ZxifBBD8XevLkv-g", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "John Mamann - Love Life ft. Kika" + } + ], + "accessibility": { + "accessibilityData": { + "label": "John Mamann - Love Life ft. Kika by John Mamann 31,338,323 views 11 years ago 2 minutes, 55 seconds" + } + } + }, + "index": { + "simpleText": "79" + }, + "shortBylineText": { + "runs": [ + { + "text": "John Mamann", + "navigationEndpoint": { + "clickTrackingParams": "CH4QxjQYTiITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UC5SfIg_4F6hl9krX3rebKzg", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UC5SfIg_4F6hl9krX3rebKzg", + "canonicalBaseUrl": "/channel/UC5SfIg_4F6hl9krX3rebKzg" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "2 minutes, 55 seconds" + } + }, + "simpleText": "2:55" + }, + "navigationEndpoint": { + "clickTrackingParams": "CH4QxjQYTiITCPTK0YmQj4wDFRbUSQcdJVgpSTIKcGxwcF92aWRlb1okVkxQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3FpmgEHCAwQ-iwYAQ==", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=EPHmUD0QfmM&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=79&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "EPHmUD0QfmM", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 78, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr3---sn-h0jeened.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=10f1e6503d107e63&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "175", + "trackingParams": "CH4QxjQYTiITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CIEBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CIEBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "EPHmUD0QfmM", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CIEBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "EPHmUD0QfmM" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "EPHmUD0QfmM" + ] + } + } + ] + } + }, + "trackingParams": "CIEBEP6YBBgGIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CIABENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "offlineVideoEndpoint": { + "videoId": "EPHmUD0QfmM", + "onAddCommand": { + "clickTrackingParams": "CIABENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "getDownloadActionCommand": { + "videoId": "EPHmUD0QfmM", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CIABENGqBRgHIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CH4QxjQYTiITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtFUEhtVUQwUWZtTQ%3D%3D", + "commands": [ + { + "clickTrackingParams": "CH4QxjQYTiITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CH8QjmIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CH4QxjQYTiITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "hasSeparator": true + } + } + ], + "trackingParams": "CH4QxjQYTiITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "2 minutes, 55 seconds" + } + }, + "simpleText": "2:55" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "31M views" + }, + { + "text": " • " + }, + { + "text": "11 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "jS8IZcx7tJY", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/jS8IZcx7tJY/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDEYK-5tJLmGVEJhNfaa-DJ7UZMyg", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/jS8IZcx7tJY/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAwMpf-VqumwE92X8Pue7PKtvl7Hg", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/jS8IZcx7tJY/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCovnREn7O4RU3FdqNTT0ldLD6ajg", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/jS8IZcx7tJY/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAxolzVpRXJMsyBeE59Dw7MQ69dig", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Snow Patrol - Run (official video)" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Snow Patrol - Run (official video) by Universal Music Nederland 13,607,284 views 15 years ago 4 minutes, 43 seconds" + } + } + }, + "index": { + "simpleText": "80" + }, + "shortBylineText": { + "runs": [ + { + "text": "Universal Music Nederland", + "navigationEndpoint": { + "clickTrackingParams": "CHoQxjQYTyITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "commandMetadata": { + "webCommandMetadata": { + "url": "/@umusicnederland", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UC3VFfBJe2he4XU1p7bhDiAg", + "canonicalBaseUrl": "/@umusicnederland" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 43 seconds" + } + }, + "simpleText": "4:43" + }, + "navigationEndpoint": { + "clickTrackingParams": "CHoQxjQYTyITCPTK0YmQj4wDFRbUSQcdJVgpSTIKcGxwcF92aWRlb1okVkxQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3FpmgEHCAwQ-iwYAQ==", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=jS8IZcx7tJY&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=80&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "jS8IZcx7tJY", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 79, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr2---sn-h0jeenl6.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=8d2f0865cc7bb496&ip=79.205.211.19&initcwndbps=2676250&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "283", + "trackingParams": "CHoQxjQYTyITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CH0Q_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CH0Q_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "jS8IZcx7tJY", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CH0Q_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "jS8IZcx7tJY" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "jS8IZcx7tJY" + ] + } + } + ] + } + }, + "trackingParams": "CH0Q_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CHwQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "offlineVideoEndpoint": { + "videoId": "jS8IZcx7tJY", + "onAddCommand": { + "clickTrackingParams": "CHwQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "getDownloadActionCommand": { + "videoId": "jS8IZcx7tJY", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CHwQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CHoQxjQYTyITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtqUzhJWmN4N3RKWQ%3D%3D", + "commands": [ + { + "clickTrackingParams": "CHoQxjQYTyITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CHsQjmIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CHoQxjQYTyITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "hasSeparator": true + } + } + ], + "trackingParams": "CHoQxjQYTyITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 43 seconds" + } + }, + "simpleText": "4:43" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "13M views" + }, + { + "text": " • " + }, + { + "text": "15 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "ghb6eDopW8I", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/ghb6eDopW8I/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCoNyV-ShyxkGZ4gUEsjzvYeYcrKg", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/ghb6eDopW8I/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBkcRNL1QY64i8CZ-hm3hW4pOk6jA", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/ghb6eDopW8I/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDTWN1V_VFA_HToKttZkM5XdyXJ4Q", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/ghb6eDopW8I/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDa3ukYowZBJjLw8wIVvAqedfJPxg", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Of Monsters and Men - Little Talks" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Of Monsters and Men - Little Talks by Of Monsters and Men 385,229,077 views 13 years ago 4 minutes, 15 seconds" + } + } + }, + "index": { + "simpleText": "81" + }, + "shortBylineText": { + "runs": [ + { + "text": "Of Monsters and Men", + "navigationEndpoint": { + "clickTrackingParams": "CHYQxjQYUCITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UC-hZDis8Dbfk8FotKkOXyQQ", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UC-hZDis8Dbfk8FotKkOXyQQ", + "canonicalBaseUrl": "/channel/UC-hZDis8Dbfk8FotKkOXyQQ" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 15 seconds" + } + }, + "simpleText": "4:15" + }, + "navigationEndpoint": { + "clickTrackingParams": "CHYQxjQYUCITCPTK0YmQj4wDFRbUSQcdJVgpSTIKcGxwcF92aWRlb1okVkxQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3FpmgEHCAwQ-iwYAQ==", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=ghb6eDopW8I&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=81&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "ghb6eDopW8I", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 80, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr4---sn-h0jeenl6.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=8216fa783a295bc2&ip=79.205.211.19&initcwndbps=2676250&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "255", + "trackingParams": "CHYQxjQYUCITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CHkQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CHkQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "ghb6eDopW8I", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CHkQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "ghb6eDopW8I" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "ghb6eDopW8I" + ] + } + } + ] + } + }, + "trackingParams": "CHkQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CHgQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "offlineVideoEndpoint": { + "videoId": "ghb6eDopW8I", + "onAddCommand": { + "clickTrackingParams": "CHgQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "getDownloadActionCommand": { + "videoId": "ghb6eDopW8I", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CHgQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CHYQxjQYUCITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtnaGI2ZURvcFc4SQ%3D%3D", + "commands": [ + { + "clickTrackingParams": "CHYQxjQYUCITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CHcQjmIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CHYQxjQYUCITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "hasSeparator": true + } + } + ], + "trackingParams": "CHYQxjQYUCITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 15 seconds" + } + }, + "simpleText": "4:15" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "385M views" + }, + { + "text": " • " + }, + { + "text": "13 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "Xmap94TcDNs", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/Xmap94TcDNs/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBjhdqhoiAbK6tcdMB6Z-UVgyXVWA", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/Xmap94TcDNs/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLD0tivAuj9ecb7IXxmGiJcb9JjmIw", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/Xmap94TcDNs/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCn_rA_GRfxLOIQJS-eBtgD2RWCfQ", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/Xmap94TcDNs/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCs0dMH2i_MZ1i8SI8FnYFekAjMAA", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Wisin & Yandel, Jennifer Lopez - Follow The Leader (Official Video) ft. Jennifer Lopez" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Wisin & Yandel, Jennifer Lopez - Follow The Leader (Official Video) ft. Jennifer Lopez by Wisin & Yandel 672,151,856 views 12 years ago 4 minutes, 59 seconds" + } + } + }, + "index": { + "simpleText": "82" + }, + "shortBylineText": { + "runs": [ + { + "text": "Wisin & Yandel", + "navigationEndpoint": { + "clickTrackingParams": "CHIQxjQYUSITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UCwR_LqB7g3-_J7p1nscCbEA", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCwR_LqB7g3-_J7p1nscCbEA", + "canonicalBaseUrl": "/channel/UCwR_LqB7g3-_J7p1nscCbEA" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 59 seconds" + } + }, + "simpleText": "4:59" + }, + "navigationEndpoint": { + "clickTrackingParams": "CHIQxjQYUSITCPTK0YmQj4wDFRbUSQcdJVgpSTIKcGxwcF92aWRlb1okVkxQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3FpmgEHCAwQ-iwYAQ==", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=Xmap94TcDNs&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=82&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "Xmap94TcDNs", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 81, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr4---sn-h0jelne6.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=5e66a9f784dc0cdb&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "299", + "trackingParams": "CHIQxjQYUSITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CHUQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CHUQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "Xmap94TcDNs", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CHUQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "Xmap94TcDNs" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "Xmap94TcDNs" + ] + } + } + ] + } + }, + "trackingParams": "CHUQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CHQQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "offlineVideoEndpoint": { + "videoId": "Xmap94TcDNs", + "onAddCommand": { + "clickTrackingParams": "CHQQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "getDownloadActionCommand": { + "videoId": "Xmap94TcDNs", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CHQQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CHIQxjQYUSITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtYbWFwOTRUY0ROcw%3D%3D", + "commands": [ + { + "clickTrackingParams": "CHIQxjQYUSITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CHMQjmIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CHIQxjQYUSITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "hasSeparator": true + } + } + ], + "trackingParams": "CHIQxjQYUSITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 59 seconds" + } + }, + "simpleText": "4:59" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "672M views" + }, + { + "text": " • " + }, + { + "text": "12 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "_gmtKSiJt2g", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/_gmtKSiJt2g/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAXK7Fov31GIRclBnJqwRoJ69o0Hw", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/_gmtKSiJt2g/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCcqW2viRHIbOYT6t03-mO5PoXrPg", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/_gmtKSiJt2g/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAEpVvuTBhKR24Zn5HAu-eQsZrZ5A", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/_gmtKSiJt2g/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCvyD0J84hXeJjirAsT9ahqoLpk8g", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Juan Magán - Mal De Amores" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Juan Magán - Mal De Amores by JuanMagan 127,356,186 views 11 years ago 3 minutes, 8 seconds" + } + } + }, + "index": { + "simpleText": "83" + }, + "shortBylineText": { + "runs": [ + { + "text": "JuanMagan", + "navigationEndpoint": { + "clickTrackingParams": "CG4QxjQYUiITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UCVpJ6eGdknSR4mlExF1bytA", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCVpJ6eGdknSR4mlExF1bytA", + "canonicalBaseUrl": "/channel/UCVpJ6eGdknSR4mlExF1bytA" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 8 seconds" + } + }, + "simpleText": "3:08" + }, + "navigationEndpoint": { + "clickTrackingParams": "CG4QxjQYUiITCPTK0YmQj4wDFRbUSQcdJVgpSTIKcGxwcF92aWRlb1okVkxQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3FpmgEHCAwQ-iwYAQ==", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=_gmtKSiJt2g&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=83&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "_gmtKSiJt2g", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 82, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr2---sn-h0jeened.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=fe09ad292889b768&ip=79.205.211.19&initcwndbps=2676250&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "188", + "trackingParams": "CG4QxjQYUiITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CHEQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CHEQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "_gmtKSiJt2g", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CHEQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "_gmtKSiJt2g" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "_gmtKSiJt2g" + ] + } + } + ] + } + }, + "trackingParams": "CHEQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CHAQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "offlineVideoEndpoint": { + "videoId": "_gmtKSiJt2g", + "onAddCommand": { + "clickTrackingParams": "CHAQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "getDownloadActionCommand": { + "videoId": "_gmtKSiJt2g", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CHAQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CG4QxjQYUiITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtfZ210S1NpSnQyZw%3D%3D", + "commands": [ + { + "clickTrackingParams": "CG4QxjQYUiITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CG8QjmIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CG4QxjQYUiITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "hasSeparator": true + } + } + ], + "trackingParams": "CG4QxjQYUiITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 8 seconds" + } + }, + "simpleText": "3:08" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "127M views" + }, + { + "text": " • " + }, + { + "text": "11 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "88dLLDrVOwg", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/88dLLDrVOwg/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLColV51m1JDZrHHxIO5fYuuk8X-cA", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/88dLLDrVOwg/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAQZimrA854o5Xrav550NWfmCybuQ", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/88dLLDrVOwg/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLA_9T2dFHpAPy37RqRpDkYYRW482w", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/88dLLDrVOwg/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDXQ05ExnEfhN1lMY2bcZU-pNEbbQ", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Nelly Furtado - Waiting For The Night" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Nelly Furtado - Waiting For The Night by Nelly Furtado 17,018,858 views 12 years ago 4 minutes, 31 seconds" + } + } + }, + "index": { + "simpleText": "84" + }, + "shortBylineText": { + "runs": [ + { + "text": "Nelly Furtado", + "navigationEndpoint": { + "clickTrackingParams": "CGoQxjQYUyITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UC5Y-gAeGpzgzu0ObzKnhPFA", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UC5Y-gAeGpzgzu0ObzKnhPFA", + "canonicalBaseUrl": "/channel/UC5Y-gAeGpzgzu0ObzKnhPFA" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 31 seconds" + } + }, + "simpleText": "4:31" + }, + "navigationEndpoint": { + "clickTrackingParams": "CGoQxjQYUyITCPTK0YmQj4wDFRbUSQcdJVgpSTIKcGxwcF92aWRlb1okVkxQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3FpmgEHCAwQ-iwYAQ==", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=88dLLDrVOwg&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=84&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "88dLLDrVOwg", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 83, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr3---sn-h0jelne7.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=f3c74b2c3ad53b08&ip=79.205.211.19&initcwndbps=2676250&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "271", + "trackingParams": "CGoQxjQYUyITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CG0Q_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CG0Q_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "88dLLDrVOwg", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CG0Q_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "88dLLDrVOwg" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "88dLLDrVOwg" + ] + } + } + ] + } + }, + "trackingParams": "CG0Q_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CGwQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "offlineVideoEndpoint": { + "videoId": "88dLLDrVOwg", + "onAddCommand": { + "clickTrackingParams": "CGwQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "getDownloadActionCommand": { + "videoId": "88dLLDrVOwg", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CGwQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CGoQxjQYUyITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "Cgs4OGRMTERyVk93Zw%3D%3D", + "commands": [ + { + "clickTrackingParams": "CGoQxjQYUyITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CGsQjmIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CGoQxjQYUyITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "hasSeparator": true + } + } + ], + "trackingParams": "CGoQxjQYUyITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 31 seconds" + } + }, + "simpleText": "4:31" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "17M views" + }, + { + "text": " • " + }, + { + "text": "12 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "Z9L5ni0Spgk", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/Z9L5ni0Spgk/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBKuaqxWwDzFueczUw-cXqjgfxMlw", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/Z9L5ni0Spgk/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDa8Tt8dbn3a_4KbDh1lK2swonb3w", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/Z9L5ni0Spgk/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDMZ2_QGC2n7rvUFR-U4HdYAeV05Q", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/Z9L5ni0Spgk/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCPb65_UkG90x3VmlUCJSU_-GImOw", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Fedo, Camurri & Marchesini - Babylon (Promo Video)" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Fedo, Camurri & Marchesini - Babylon (Promo Video) by Energy TV 154,546 views 14 years ago 3 minutes, 16 seconds" + } + } + }, + "index": { + "simpleText": "85" + }, + "shortBylineText": { + "runs": [ + { + "text": "Energy TV", + "navigationEndpoint": { + "clickTrackingParams": "CGYQxjQYVCITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "commandMetadata": { + "webCommandMetadata": { + "url": "/@EnergyProductionRec", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UC5eYHWDQqAsiKlnvLCz-ezg", + "canonicalBaseUrl": "/@EnergyProductionRec" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 16 seconds" + } + }, + "simpleText": "3:16" + }, + "navigationEndpoint": { + "clickTrackingParams": "CGYQxjQYVCITCPTK0YmQj4wDFRbUSQcdJVgpSTIKcGxwcF92aWRlb1okVkxQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3FpmgEHCAwQ-iwYAQ==", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=Z9L5ni0Spgk&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=85&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "Z9L5ni0Spgk", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 84, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr5---sn-h0jelnes.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=67d2f99e2d12a609&ip=79.205.211.19&initcwndbps=2676250&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "196", + "trackingParams": "CGYQxjQYVCITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CGkQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CGkQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "Z9L5ni0Spgk", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CGkQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "Z9L5ni0Spgk" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "Z9L5ni0Spgk" + ] + } + } + ] + } + }, + "trackingParams": "CGkQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CGgQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "offlineVideoEndpoint": { + "videoId": "Z9L5ni0Spgk", + "onAddCommand": { + "clickTrackingParams": "CGgQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "getDownloadActionCommand": { + "videoId": "Z9L5ni0Spgk", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CGgQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CGYQxjQYVCITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtaOUw1bmkwU3Bnaw%3D%3D", + "commands": [ + { + "clickTrackingParams": "CGYQxjQYVCITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CGcQjmIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CGYQxjQYVCITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "hasSeparator": true + } + } + ], + "trackingParams": "CGYQxjQYVCITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 16 seconds" + } + }, + "simpleText": "3:16" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "154K views" + }, + { + "text": " • " + }, + { + "text": "14 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "YgFyi74DVjc", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/YgFyi74DVjc/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLByMtQpF7fANZ3zoMljVbG5nHhUPA", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/YgFyi74DVjc/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCVFfPXqM2RO7WVfOx_DYtVdRYYWw", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/YgFyi74DVjc/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCLSc5vaBLxnPxMM3oIzs6oecOpqw", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/YgFyi74DVjc/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCtBz7EpKUPdU1dHYlXiB9eRaafSg", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Tinie Tempah - Written In The Stars ft. Eric Turner" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Tinie Tempah - Written In The Stars ft. Eric Turner by Tinie 328,556,317 views 14 years ago 3 minutes, 37 seconds" + } + } + }, + "index": { + "simpleText": "86" + }, + "shortBylineText": { + "runs": [ + { + "text": "Tinie", + "navigationEndpoint": { + "clickTrackingParams": "CGIQxjQYVSITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UCDSX4RQN7fzIlZ1nSubwCcQ", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCDSX4RQN7fzIlZ1nSubwCcQ", + "canonicalBaseUrl": "/channel/UCDSX4RQN7fzIlZ1nSubwCcQ" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 37 seconds" + } + }, + "simpleText": "3:37" + }, + "navigationEndpoint": { + "clickTrackingParams": "CGIQxjQYVSITCPTK0YmQj4wDFRbUSQcdJVgpSTIKcGxwcF92aWRlb1okVkxQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3FpmgEHCAwQ-iwYAQ==", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=YgFyi74DVjc&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=86&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "YgFyi74DVjc", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 85, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr5---sn-h0jelne6.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=6201728bbe035637&ip=79.205.211.19&initcwndbps=2676250&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "217", + "trackingParams": "CGIQxjQYVSITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CGUQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CGUQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "YgFyi74DVjc", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CGUQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "YgFyi74DVjc" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "YgFyi74DVjc" + ] + } + } + ] + } + }, + "trackingParams": "CGUQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CGQQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "offlineVideoEndpoint": { + "videoId": "YgFyi74DVjc", + "onAddCommand": { + "clickTrackingParams": "CGQQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "getDownloadActionCommand": { + "videoId": "YgFyi74DVjc", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CGQQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CGIQxjQYVSITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtZZ0Z5aTc0RFZqYw%3D%3D", + "commands": [ + { + "clickTrackingParams": "CGIQxjQYVSITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CGMQjmIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CGIQxjQYVSITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "hasSeparator": true + } + } + ], + "trackingParams": "CGIQxjQYVSITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 37 seconds" + } + }, + "simpleText": "3:37" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "328M views" + }, + { + "text": " • " + }, + { + "text": "14 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "yyDUC1LUXSU", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/yyDUC1LUXSU/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLB9ZvzaOQXpNngJbvS_GxgHXSnb7g", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/yyDUC1LUXSU/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLASDSqilwfjPklCMYS2SwMJ7gnO3A", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/yyDUC1LUXSU/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBpCcrhl4afQxrGpWfRl-5h9M1TVA", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/yyDUC1LUXSU/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAgJQ_cJ44xgi8y834WOT28RodN4Q", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Robin Thicke - Blurred Lines ft. T.I., Pharrell" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Robin Thicke - Blurred Lines ft. T.I., Pharrell by Robin Thicke 931,811,875 views 11 years ago 4 minutes, 32 seconds" + } + } + }, + "index": { + "simpleText": "87" + }, + "shortBylineText": { + "runs": [ + { + "text": "Robin Thicke", + "navigationEndpoint": { + "clickTrackingParams": "CF4QxjQYViITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UCFHZMfLTN8Zg2sUIrLJhRQQ", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCFHZMfLTN8Zg2sUIrLJhRQQ", + "canonicalBaseUrl": "/channel/UCFHZMfLTN8Zg2sUIrLJhRQQ" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 32 seconds" + } + }, + "simpleText": "4:32" + }, + "navigationEndpoint": { + "clickTrackingParams": "CF4QxjQYViITCPTK0YmQj4wDFRbUSQcdJVgpSTIKcGxwcF92aWRlb1okVkxQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3FpmgEHCAwQ-iwYAQ==", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=yyDUC1LUXSU&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=87&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "yyDUC1LUXSU", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 86, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr2---sn-h0jeener.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=cb20d40b52d45d25&ip=79.205.211.19&initcwndbps=2676250&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "272", + "trackingParams": "CF4QxjQYViITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CGEQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CGEQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "yyDUC1LUXSU", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CGEQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "yyDUC1LUXSU" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "yyDUC1LUXSU" + ] + } + } + ] + } + }, + "trackingParams": "CGEQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CGAQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "offlineVideoEndpoint": { + "videoId": "yyDUC1LUXSU", + "onAddCommand": { + "clickTrackingParams": "CGAQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "getDownloadActionCommand": { + "videoId": "yyDUC1LUXSU", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CGAQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CF4QxjQYViITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "Cgt5eURVQzFMVVhTVQ%3D%3D", + "commands": [ + { + "clickTrackingParams": "CF4QxjQYViITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CF8QjmIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CF4QxjQYViITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "hasSeparator": true + } + } + ], + "trackingParams": "CF4QxjQYViITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 32 seconds" + } + }, + "simpleText": "4:32" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "931M views" + }, + { + "text": " • " + }, + { + "text": "11 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "bnVUHWCynig", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/bnVUHWCynig/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDdVYpBllucka8OdmI4rYaxdDbwZQ", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/bnVUHWCynig/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDifNY6_xFI36yPGwpSlQcRRdq5dw", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/bnVUHWCynig/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAfrtQWKbvfqAIT5nlEP6oHpGwQnA", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/bnVUHWCynig/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLC_mAwlLPdy-eK1GFCDG1I-Uu_qVw", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Beyoncé - Halo" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Beyoncé - Halo by Beyoncé 1,661,221,752 views 15 years ago 3 minutes, 45 seconds" + } + } + }, + "index": { + "simpleText": "88" + }, + "shortBylineText": { + "runs": [ + { + "text": "Beyoncé", + "navigationEndpoint": { + "clickTrackingParams": "CFoQxjQYVyITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UCuHzBCaKmtaLcRAOoazhCPA", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCuHzBCaKmtaLcRAOoazhCPA", + "canonicalBaseUrl": "/channel/UCuHzBCaKmtaLcRAOoazhCPA" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 45 seconds" + } + }, + "simpleText": "3:45" + }, + "navigationEndpoint": { + "clickTrackingParams": "CFoQxjQYVyITCPTK0YmQj4wDFRbUSQcdJVgpSTIKcGxwcF92aWRlb1okVkxQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3FpmgEHCAwQ-iwYAQ==", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=bnVUHWCynig&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=88&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "bnVUHWCynig", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 87, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr2---sn-h0jeenl6.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=6e75541d60b29e28&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "225", + "trackingParams": "CFoQxjQYVyITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CF0Q_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CF0Q_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "bnVUHWCynig", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CF0Q_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "bnVUHWCynig" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "bnVUHWCynig" + ] + } + } + ] + } + }, + "trackingParams": "CF0Q_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CFwQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "offlineVideoEndpoint": { + "videoId": "bnVUHWCynig", + "onAddCommand": { + "clickTrackingParams": "CFwQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "getDownloadActionCommand": { + "videoId": "bnVUHWCynig", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CFwQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CFoQxjQYVyITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtiblZVSFdDeW5pZw%3D%3D", + "commands": [ + { + "clickTrackingParams": "CFoQxjQYVyITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CFsQjmIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CFoQxjQYVyITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "hasSeparator": true + } + } + ], + "trackingParams": "CFoQxjQYVyITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 45 seconds" + } + }, + "simpleText": "3:45" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "1.6B views" + }, + { + "text": " • " + }, + { + "text": "15 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "iRYvuS9OxdA", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/iRYvuS9OxdA/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAQ6tSfh29w-wLTG8eOYoR6ExueTQ", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/iRYvuS9OxdA/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLC_TGb7k7HHhnjgjKoucF2uxyY5eQ", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/iRYvuS9OxdA/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAU0YHCpj4Sl0p1nMnWJlQc9m0O7w", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/iRYvuS9OxdA/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBbZ3pXnK3rb_jAwDzhJUMxHBLCBA", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Amy Macdonald - This is the Life" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Amy Macdonald - This is the Life by Amy Macdonald 177,222,508 views 15 years ago 3 minutes, 8 seconds" + } + } + }, + "index": { + "simpleText": "89" + }, + "shortBylineText": { + "runs": [ + { + "text": "Amy Macdonald", + "navigationEndpoint": { + "clickTrackingParams": "CFYQxjQYWCITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UC4bQSvfzqx4r3YmPw3Osx3g", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UC4bQSvfzqx4r3YmPw3Osx3g", + "canonicalBaseUrl": "/channel/UC4bQSvfzqx4r3YmPw3Osx3g" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 8 seconds" + } + }, + "simpleText": "3:08" + }, + "navigationEndpoint": { + "clickTrackingParams": "CFYQxjQYWCITCPTK0YmQj4wDFRbUSQcdJVgpSTIKcGxwcF92aWRlb1okVkxQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3FpmgEHCAwQ-iwYAQ==", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=iRYvuS9OxdA&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=89&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "iRYvuS9OxdA", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 88, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr4---sn-h0jelnes.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=89162fb92f4ec5d0&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "188", + "trackingParams": "CFYQxjQYWCITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CFkQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CFkQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "iRYvuS9OxdA", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CFkQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "iRYvuS9OxdA" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "iRYvuS9OxdA" + ] + } + } + ] + } + }, + "trackingParams": "CFkQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CFgQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "offlineVideoEndpoint": { + "videoId": "iRYvuS9OxdA", + "onAddCommand": { + "clickTrackingParams": "CFgQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "getDownloadActionCommand": { + "videoId": "iRYvuS9OxdA", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CFgQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CFYQxjQYWCITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtpUll2dVM5T3hkQQ%3D%3D", + "commands": [ + { + "clickTrackingParams": "CFYQxjQYWCITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CFcQjmIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CFYQxjQYWCITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "hasSeparator": true + } + } + ], + "trackingParams": "CFYQxjQYWCITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 8 seconds" + } + }, + "simpleText": "3:08" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "177M views" + }, + { + "text": " • " + }, + { + "text": "15 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "RBumgq5yVrA", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/RBumgq5yVrA/hqdefault.jpg?sqp=-oaymwE1CKgBEF5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-CYAC0AWKAgwIABABGH8gPCglMA8=&rs=AOn4CLClTEuXGgPmtiTNzrUWRE03Rb5Mdg", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/RBumgq5yVrA/hqdefault.jpg?sqp=-oaymwE1CMQBEG5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AH-CYAC0AWKAgwIABABGH8gPCglMA8=&rs=AOn4CLChUhmw9GMq6pTC4nK4yZWlrW_QQQ", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/RBumgq5yVrA/hqdefault.jpg?sqp=-oaymwE2CPYBEIoBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gmAAtAFigIMCAAQARh_IDwoJTAP&rs=AOn4CLCVpX4xhA7l6u_lSdxZLUPOfe9u6w", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/RBumgq5yVrA/hqdefault.jpg?sqp=-oaymwE2CNACELwBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gmAAtAFigIMCAAQARh_IDwoJTAP&rs=AOn4CLCANoXn9hFhlZWlwzSiR0re3Oi0XQ", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Passenger | Let Her Go (Official Video)" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Passenger | Let Her Go (Official Video) by Passenger 3,792,177,526 views 12 years ago 4 minutes, 15 seconds" + } + } + }, + "index": { + "simpleText": "90" + }, + "shortBylineText": { + "runs": [ + { + "text": "Passenger", + "navigationEndpoint": { + "clickTrackingParams": "CFIQxjQYWSITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UCFHtCB_FWXQ8GpjgfYcD8-g", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCFHtCB_FWXQ8GpjgfYcD8-g", + "canonicalBaseUrl": "/channel/UCFHtCB_FWXQ8GpjgfYcD8-g" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 15 seconds" + } + }, + "simpleText": "4:15" + }, + "navigationEndpoint": { + "clickTrackingParams": "CFIQxjQYWSITCPTK0YmQj4wDFRbUSQcdJVgpSTIKcGxwcF92aWRlb1okVkxQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3FpmgEHCAwQ-iwYAQ==", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=RBumgq5yVrA&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=90&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "RBumgq5yVrA", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 89, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr5---sn-h0jeenl6.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=441ba682ae7256b0&ip=79.205.211.19&initcwndbps=2676250&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "255", + "trackingParams": "CFIQxjQYWSITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CFUQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CFUQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "RBumgq5yVrA", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CFUQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "RBumgq5yVrA" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "RBumgq5yVrA" + ] + } + } + ] + } + }, + "trackingParams": "CFUQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CFQQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "offlineVideoEndpoint": { + "videoId": "RBumgq5yVrA", + "onAddCommand": { + "clickTrackingParams": "CFQQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "getDownloadActionCommand": { + "videoId": "RBumgq5yVrA", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CFQQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CFIQxjQYWSITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtSQnVtZ3E1eVZyQQ%3D%3D", + "commands": [ + { + "clickTrackingParams": "CFIQxjQYWSITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CFMQjmIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CFIQxjQYWSITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "hasSeparator": true + } + } + ], + "trackingParams": "CFIQxjQYWSITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 15 seconds" + } + }, + "simpleText": "4:15" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "3.7B views" + }, + { + "text": " • " + }, + { + "text": "12 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "5NV6Rdv1a3I", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/5NV6Rdv1a3I/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLB8eQJ05B8xmUeTG2Qjv5ZTGV6GtQ", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/5NV6Rdv1a3I/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCYWE3tjuqA73Ghpo9Zx9YhQrPF8g", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/5NV6Rdv1a3I/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAYujREX1wWp6lqR-FxLTC3UoDBww", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/5NV6Rdv1a3I/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAec6mzXBkRvD7DZJQXZQAn-5DdYg", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Daft Punk - Get Lucky (Official Audio) ft. Pharrell Williams, Nile Rodgers" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Daft Punk - Get Lucky (Official Audio) ft. Pharrell Williams, Nile Rodgers by Daft Punk 798,016,435 views 11 years ago 4 minutes, 9 seconds" + } + } + }, + "index": { + "simpleText": "91" + }, + "shortBylineText": { + "runs": [ + { + "text": "Daft Punk", + "navigationEndpoint": { + "clickTrackingParams": "CE4QxjQYWiITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UC_kRDKYrUlrbtrSiyu5Tflg", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UC_kRDKYrUlrbtrSiyu5Tflg", + "canonicalBaseUrl": "/channel/UC_kRDKYrUlrbtrSiyu5Tflg" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 9 seconds" + } + }, + "simpleText": "4:09" + }, + "navigationEndpoint": { + "clickTrackingParams": "CE4QxjQYWiITCPTK0YmQj4wDFRbUSQcdJVgpSTIKcGxwcF92aWRlb1okVkxQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3FpmgEHCAwQ-iwYAQ==", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=5NV6Rdv1a3I&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=91&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "5NV6Rdv1a3I", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 90, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr5---sn-h0jeenle.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=e4d57a45dbf56b72&ip=79.205.211.19&initcwndbps=2676250&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "249", + "trackingParams": "CE4QxjQYWiITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CFEQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CFEQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "5NV6Rdv1a3I", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CFEQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "5NV6Rdv1a3I" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "5NV6Rdv1a3I" + ] + } + } + ] + } + }, + "trackingParams": "CFEQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CFAQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "offlineVideoEndpoint": { + "videoId": "5NV6Rdv1a3I", + "onAddCommand": { + "clickTrackingParams": "CFAQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "getDownloadActionCommand": { + "videoId": "5NV6Rdv1a3I", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CFAQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CE4QxjQYWiITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "Cgs1TlY2UmR2MWEzSQ%3D%3D", + "commands": [ + { + "clickTrackingParams": "CE4QxjQYWiITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CE8QjmIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CE4QxjQYWiITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "hasSeparator": true + } + } + ], + "trackingParams": "CE4QxjQYWiITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 9 seconds" + } + }, + "simpleText": "4:09" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "798M views" + }, + { + "text": " • " + }, + { + "text": "11 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "GbVxvITmwIc", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/GbVxvITmwIc/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBYlbB7MP7mlFPrvaaa8NgyZhhFMw", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/GbVxvITmwIc/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBTwvP-ZJmMyMrYfKAVUyra_X-uTA", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/GbVxvITmwIc/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLD796ZUIzn9jANidIPu15gHgkOGJQ", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/GbVxvITmwIc/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCwlEEFb5u_e5qpa9tSJ8UeOPHSpQ", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Nadia Ali - Rapture (Avicii Remix) [Official Music Video]" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Nadia Ali - Rapture (Avicii Remix) [Official Music Video] by Armada Music TV 71,774,695 views 14 years ago 4 minutes, 43 seconds" + } + } + }, + "index": { + "simpleText": "92" + }, + "shortBylineText": { + "runs": [ + { + "text": "Armada Music TV", + "navigationEndpoint": { + "clickTrackingParams": "CEoQxjQYWyITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "commandMetadata": { + "webCommandMetadata": { + "url": "/@armadamusictv", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCGZXYc32ri4D0gSLPf2pZXQ", + "canonicalBaseUrl": "/@armadamusictv" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 43 seconds" + } + }, + "simpleText": "4:43" + }, + "navigationEndpoint": { + "clickTrackingParams": "CEoQxjQYWyITCPTK0YmQj4wDFRbUSQcdJVgpSTIKcGxwcF92aWRlb1okVkxQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3FpmgEHCAwQ-iwYAQ==", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=GbVxvITmwIc&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=92&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "GbVxvITmwIc", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 91, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr3---sn-h0jelnes.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=19b571bc84e6c087&ip=79.205.211.19&initcwndbps=2676250&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "283", + "trackingParams": "CEoQxjQYWyITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CE0Q_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CE0Q_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "GbVxvITmwIc", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CE0Q_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "GbVxvITmwIc" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "GbVxvITmwIc" + ] + } + } + ] + } + }, + "trackingParams": "CE0Q_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CEwQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "offlineVideoEndpoint": { + "videoId": "GbVxvITmwIc", + "onAddCommand": { + "clickTrackingParams": "CEwQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "getDownloadActionCommand": { + "videoId": "GbVxvITmwIc", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CEwQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CEoQxjQYWyITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtHYlZ4dklUbXdJYw%3D%3D", + "commands": [ + { + "clickTrackingParams": "CEoQxjQYWyITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CEsQjmIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CEoQxjQYWyITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "hasSeparator": true + } + } + ], + "trackingParams": "CEoQxjQYWyITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 43 seconds" + } + }, + "simpleText": "4:43" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "71M views" + }, + { + "text": " • " + }, + { + "text": "14 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "_ovdm2yX4MA", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/_ovdm2yX4MA/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBJhG8-CbY_gMCDa0Othohpjp2-Sw", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/_ovdm2yX4MA/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCHpPr_9X0IOy9gsmtWlQkFT9GV3g", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/_ovdm2yX4MA/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDn3vMoIYvWmWMNFsgN8aTyC876QA", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/_ovdm2yX4MA/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCictkFhj6f0NLuvA-jBl0uIx9r1A", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Avicii - Levels" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Avicii - Levels by Avicii 739,233,356 views 13 years ago 3 minutes, 19 seconds" + } + } + }, + "index": { + "simpleText": "93" + }, + "shortBylineText": { + "runs": [ + { + "text": "Avicii", + "navigationEndpoint": { + "clickTrackingParams": "CEYQxjQYXCITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UCPHjpfnnGklkRBBTd0k6aHg", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCPHjpfnnGklkRBBTd0k6aHg", + "canonicalBaseUrl": "/channel/UCPHjpfnnGklkRBBTd0k6aHg" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 19 seconds" + } + }, + "simpleText": "3:19" + }, + "navigationEndpoint": { + "clickTrackingParams": "CEYQxjQYXCITCPTK0YmQj4wDFRbUSQcdJVgpSTIKcGxwcF92aWRlb1okVkxQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3FpmgEHCAwQ-iwYAQ==", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=_ovdm2yX4MA&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=93&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "_ovdm2yX4MA", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 92, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr4---sn-h0jelne6.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=fe8bdd9b6c97e0c0&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "199", + "trackingParams": "CEYQxjQYXCITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CEkQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CEkQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "_ovdm2yX4MA", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CEkQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "_ovdm2yX4MA" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "_ovdm2yX4MA" + ] + } + } + ] + } + }, + "trackingParams": "CEkQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CEgQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "offlineVideoEndpoint": { + "videoId": "_ovdm2yX4MA", + "onAddCommand": { + "clickTrackingParams": "CEgQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "getDownloadActionCommand": { + "videoId": "_ovdm2yX4MA", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CEgQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CEYQxjQYXCITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "Cgtfb3ZkbTJ5WDRNQQ%3D%3D", + "commands": [ + { + "clickTrackingParams": "CEYQxjQYXCITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CEcQjmIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CEYQxjQYXCITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "hasSeparator": true + } + } + ], + "trackingParams": "CEYQxjQYXCITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 19 seconds" + } + }, + "simpleText": "3:19" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "739M views" + }, + { + "text": " • " + }, + { + "text": "13 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "5y_KJAg8bHI", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/5y_KJAg8bHI/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCbQHhfWQkRu61QB_9f8c0luSDo-A", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/5y_KJAg8bHI/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAjMdoRGoRT5ed3VrlZ_j84fXehBg", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/5y_KJAg8bHI/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDOnvnv-RD8R5gyfB7llV53-gKDBg", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/5y_KJAg8bHI/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBA82_EAo1CRpHUnA2HIQHJ8DAT8w", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Avicii - Wake Me Up (Official Lyric Video)" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Avicii - Wake Me Up (Official Lyric Video) by Avicii 499,621,097 views 11 years ago 4 minutes, 12 seconds" + } + } + }, + "index": { + "simpleText": "94" + }, + "shortBylineText": { + "runs": [ + { + "text": "Avicii", + "navigationEndpoint": { + "clickTrackingParams": "CEIQxjQYXSITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UCPHjpfnnGklkRBBTd0k6aHg", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCPHjpfnnGklkRBBTd0k6aHg", + "canonicalBaseUrl": "/channel/UCPHjpfnnGklkRBBTd0k6aHg" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 12 seconds" + } + }, + "simpleText": "4:12" + }, + "navigationEndpoint": { + "clickTrackingParams": "CEIQxjQYXSITCPTK0YmQj4wDFRbUSQcdJVgpSTIKcGxwcF92aWRlb1okVkxQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3FpmgEHCAwQ-iwYAQ==", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=5y_KJAg8bHI&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=94&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "5y_KJAg8bHI", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 93, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr5---sn-h0jelne6.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=e72fca24083c6c72&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "252", + "trackingParams": "CEIQxjQYXSITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CEUQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CEUQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "5y_KJAg8bHI", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CEUQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "5y_KJAg8bHI" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "5y_KJAg8bHI" + ] + } + } + ] + } + }, + "trackingParams": "CEUQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CEQQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "offlineVideoEndpoint": { + "videoId": "5y_KJAg8bHI", + "onAddCommand": { + "clickTrackingParams": "CEQQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "getDownloadActionCommand": { + "videoId": "5y_KJAg8bHI", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CEQQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CEIQxjQYXSITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "Cgs1eV9LSkFnOGJISQ%3D%3D", + "commands": [ + { + "clickTrackingParams": "CEIQxjQYXSITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CEMQjmIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CEIQxjQYXSITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "hasSeparator": true + } + } + ], + "trackingParams": "CEIQxjQYXSITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 12 seconds" + } + }, + "simpleText": "4:12" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "499M views" + }, + { + "text": " • " + }, + { + "text": "11 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "6Mj8KDpoZnQ", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/6Mj8KDpoZnQ/hqdefault.jpg?sqp=-oaymwE1CKgBEF5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AG-AoAC8AGKAgwIABABGGkgaShpMA8=&rs=AOn4CLAai-jQB6NdIU65Ae_A2lVZyyrIhw", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/6Mj8KDpoZnQ/hqdefault.jpg?sqp=-oaymwE1CMQBEG5IVfKriqkDKAgBFQAAiEIYAXABwAEG8AEB-AG-AoAC8AGKAgwIABABGGkgaShpMA8=&rs=AOn4CLAUPD_EFn7JC4PrPCJREsc2Hk_NFA", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/6Mj8KDpoZnQ/hqdefault.jpg?sqp=-oaymwE2CPYBEIoBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgBvgKAAvABigIMCAAQARhpIGkoaTAP&rs=AOn4CLB-UUKz-dpXAAlZmvF2c1tseoZ8cA", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/6Mj8KDpoZnQ/hqdefault.jpg?sqp=-oaymwE2CNACELwBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgBvgKAAvABigIMCAAQARhpIGkoaTAP&rs=AOn4CLDtvT3HtJnCrtf3AMvEeSmKwsPyhA", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Del Amitri Driving with the Brakes on with lyrics" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Del Amitri Driving with the Brakes on with lyrics by Ziggy 291,143 views 15 years ago 4 minutes, 35 seconds" + } + } + }, + "index": { + "simpleText": "95" + }, + "shortBylineText": { + "runs": [ + { + "text": "Ziggy", + "navigationEndpoint": { + "clickTrackingParams": "CD4QxjQYXiITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "commandMetadata": { + "webCommandMetadata": { + "url": "/@jarny1969", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCu4v_9NAtKYVd8_sPh99h6A", + "canonicalBaseUrl": "/@jarny1969" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 35 seconds" + } + }, + "simpleText": "4:35" + }, + "navigationEndpoint": { + "clickTrackingParams": "CD4QxjQYXiITCPTK0YmQj4wDFRbUSQcdJVgpSTIKcGxwcF92aWRlb1okVkxQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3FpmgEHCAwQ-iwYAQ==", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=6Mj8KDpoZnQ&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=95&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "6Mj8KDpoZnQ", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 94, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr1---sn-h0jeenl6.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=e8c8fc283a686674&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "275", + "trackingParams": "CD4QxjQYXiITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CEEQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CEEQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "6Mj8KDpoZnQ", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CEEQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "6Mj8KDpoZnQ" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "6Mj8KDpoZnQ" + ] + } + } + ] + } + }, + "trackingParams": "CEEQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CEAQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "offlineVideoEndpoint": { + "videoId": "6Mj8KDpoZnQ", + "onAddCommand": { + "clickTrackingParams": "CEAQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "getDownloadActionCommand": { + "videoId": "6Mj8KDpoZnQ", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CEAQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CD4QxjQYXiITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "Cgs2TWo4S0Rwb1puUQ%3D%3D", + "commands": [ + { + "clickTrackingParams": "CD4QxjQYXiITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CD8QjmIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CD4QxjQYXiITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "hasSeparator": true + } + } + ], + "trackingParams": "CD4QxjQYXiITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 35 seconds" + } + }, + "simpleText": "4:35" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "291K views" + }, + { + "text": " • " + }, + { + "text": "15 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "rtOvBOTyX00", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/rtOvBOTyX00/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAiaq7QqeSdb9xU068ljYGiLtY1cA", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/rtOvBOTyX00/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCjTvxsN22M1eXwUuZR49bogXDbpA", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/rtOvBOTyX00/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDIWjGMXTDXcu3u_s0S8l0b9K-Tkg", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/rtOvBOTyX00/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCfknlSUb89kvv-vLPcKafCxp6gXA", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Christina Perri - A Thousand Years [Official Music Video]" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Christina Perri - A Thousand Years [Official Music Video] by Christina Perri 2,606,307,135 views 13 years ago 4 minutes, 48 seconds" + } + } + }, + "index": { + "simpleText": "96" + }, + "shortBylineText": { + "runs": [ + { + "text": "Christina Perri", + "navigationEndpoint": { + "clickTrackingParams": "CDoQxjQYXyITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UC2gMECGMn5TVbRN5S5tKb8Q", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UC2gMECGMn5TVbRN5S5tKb8Q", + "canonicalBaseUrl": "/channel/UC2gMECGMn5TVbRN5S5tKb8Q" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 48 seconds" + } + }, + "simpleText": "4:48" + }, + "navigationEndpoint": { + "clickTrackingParams": "CDoQxjQYXyITCPTK0YmQj4wDFRbUSQcdJVgpSTIKcGxwcF92aWRlb1okVkxQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3FpmgEHCAwQ-iwYAQ==", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=rtOvBOTyX00&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=96&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "rtOvBOTyX00", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 95, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr3---sn-h0jelnez.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=aed3af04e4f25f4d&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "288", + "trackingParams": "CDoQxjQYXyITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CD0Q_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CD0Q_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "rtOvBOTyX00", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CD0Q_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "rtOvBOTyX00" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "rtOvBOTyX00" + ] + } + } + ] + } + }, + "trackingParams": "CD0Q_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CDwQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "offlineVideoEndpoint": { + "videoId": "rtOvBOTyX00", + "onAddCommand": { + "clickTrackingParams": "CDwQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "getDownloadActionCommand": { + "videoId": "rtOvBOTyX00", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CDwQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CDoQxjQYXyITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtydE92Qk9UeVgwMA%3D%3D", + "commands": [ + { + "clickTrackingParams": "CDoQxjQYXyITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CDsQjmIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CDoQxjQYXyITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "hasSeparator": true + } + } + ], + "trackingParams": "CDoQxjQYXyITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "4 minutes, 48 seconds" + } + }, + "simpleText": "4:48" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "2.6B views" + }, + { + "text": " • " + }, + { + "text": "13 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "UggslfShToQ", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/UggslfShToQ/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAwL6RMQVmZwr5PwLtF5DvAEmpDAw", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/UggslfShToQ/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCNgWToeUKppaH5cbM63v0VblZrGA", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/UggslfShToQ/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAfsBFhkfeIi_9cTcew42dY2DBARw", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/UggslfShToQ/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAMtgf3RwJEymxxE9tEraM-Uh052Q", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "INNA - J'Adore | Lyrics Video" + } + ], + "accessibility": { + "accessibilityData": { + "label": "INNA - J'Adore | Lyrics Video by INNA 36,694,599 views 12 years ago 3 minutes, 16 seconds" + } + } + }, + "index": { + "simpleText": "97" + }, + "shortBylineText": { + "runs": [ + { + "text": "INNA", + "navigationEndpoint": { + "clickTrackingParams": "CDYQxjQYYCITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UCr8RbU-D7iSvpy0ZO-AasoQ", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCr8RbU-D7iSvpy0ZO-AasoQ", + "canonicalBaseUrl": "/channel/UCr8RbU-D7iSvpy0ZO-AasoQ" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 16 seconds" + } + }, + "simpleText": "3:16" + }, + "navigationEndpoint": { + "clickTrackingParams": "CDYQxjQYYCITCPTK0YmQj4wDFRbUSQcdJVgpSTIKcGxwcF92aWRlb1okVkxQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3FpmgEHCAwQ-iwYAQ==", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=UggslfShToQ&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=97&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "UggslfShToQ", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 96, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr3---sn-h0jeenl6.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=52082c95f4a14e84&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "196", + "trackingParams": "CDYQxjQYYCITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CDkQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CDkQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "UggslfShToQ", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CDkQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "UggslfShToQ" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "UggslfShToQ" + ] + } + } + ] + } + }, + "trackingParams": "CDkQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CDgQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "offlineVideoEndpoint": { + "videoId": "UggslfShToQ", + "onAddCommand": { + "clickTrackingParams": "CDgQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "getDownloadActionCommand": { + "videoId": "UggslfShToQ", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CDgQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CDYQxjQYYCITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtVZ2dzbGZTaFRvUQ%3D%3D", + "commands": [ + { + "clickTrackingParams": "CDYQxjQYYCITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CDcQjmIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CDYQxjQYYCITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "hasSeparator": true + } + } + ], + "trackingParams": "CDYQxjQYYCITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 16 seconds" + } + }, + "simpleText": "3:16" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "36M views" + }, + { + "text": " • " + }, + { + "text": "12 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "MORF_XGAfj0", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/MORF_XGAfj0/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLD4dJKhtTKudy14ZzzgTY9qzH4x8g", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/MORF_XGAfj0/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBSVafq7JdLyuoH10rl-wljo7NN_w", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/MORF_XGAfj0/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLB_aPn5MajbIR712uVfiXo8Fj-8qg", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/MORF_XGAfj0/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDE9J6brKvxld_oV3S9RzO83hA-IA", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Alex Mica - Breathe" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Alex Mica - Breathe by 1artistmusic 8,562,556 views 12 years ago 3 minutes, 42 seconds" + } + } + }, + "index": { + "simpleText": "98" + }, + "shortBylineText": { + "runs": [ + { + "text": "1artistmusic", + "navigationEndpoint": { + "clickTrackingParams": "CDIQxjQYYSITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "commandMetadata": { + "webCommandMetadata": { + "url": "/@1artistmusic", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCYM6H8mE3I8nTON-wMqg5Gg", + "canonicalBaseUrl": "/@1artistmusic" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 42 seconds" + } + }, + "simpleText": "3:42" + }, + "navigationEndpoint": { + "clickTrackingParams": "CDIQxjQYYSITCPTK0YmQj4wDFRbUSQcdJVgpSTIKcGxwcF92aWRlb1okVkxQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3FpmgEHCAwQ-iwYAQ==", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=MORF_XGAfj0&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=98&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "MORF_XGAfj0", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 97, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr3---sn-h0jeened.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=30e445fd71807e3d&ip=79.205.211.19&initcwndbps=2676250&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "222", + "trackingParams": "CDIQxjQYYSITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CDUQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CDUQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "MORF_XGAfj0", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CDUQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "MORF_XGAfj0" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "MORF_XGAfj0" + ] + } + } + ] + } + }, + "trackingParams": "CDUQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CDQQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "offlineVideoEndpoint": { + "videoId": "MORF_XGAfj0", + "onAddCommand": { + "clickTrackingParams": "CDQQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "getDownloadActionCommand": { + "videoId": "MORF_XGAfj0", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CDQQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CDIQxjQYYSITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgtNT1JGX1hHQWZqMA%3D%3D", + "commands": [ + { + "clickTrackingParams": "CDIQxjQYYSITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CDMQjmIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CDIQxjQYYSITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "hasSeparator": true + } + } + ], + "trackingParams": "CDIQxjQYYSITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 42 seconds" + } + }, + "simpleText": "3:42" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "8.5M views" + }, + { + "text": " • " + }, + { + "text": "12 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "-0Bwmmiat-o", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/-0Bwmmiat-o/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCGorDbo4abAT0S-MvD5hDsHJjXfA", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/-0Bwmmiat-o/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBa2y31Slz9APf2Dq25f1-01FxSUQ", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/-0Bwmmiat-o/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBEsFgAkX9q4DEsgHQkMc-2mcfTug", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/-0Bwmmiat-o/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAWxu7pswYn23AmmMQVXggP2z29Rw", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Vlegel - After Night in Ibiza (Official Video)" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Vlegel - After Night in Ibiza (Official Video) by Vlegel & Bluesolar 27,252,848 views 13 years ago 3 minutes, 48 seconds" + } + } + }, + "index": { + "simpleText": "99" + }, + "shortBylineText": { + "runs": [ + { + "text": "Vlegel & Bluesolar", + "navigationEndpoint": { + "clickTrackingParams": "CC4QxjQYYiITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UCfS8AVoT4NgwXqPEau_Dx6A", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCfS8AVoT4NgwXqPEau_Dx6A", + "canonicalBaseUrl": "/channel/UCfS8AVoT4NgwXqPEau_Dx6A" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 48 seconds" + } + }, + "simpleText": "3:48" + }, + "navigationEndpoint": { + "clickTrackingParams": "CC4QxjQYYiITCPTK0YmQj4wDFRbUSQcdJVgpSTIKcGxwcF92aWRlb1okVkxQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3FpmgEHCAwQ-iwYAQ==", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=-0Bwmmiat-o&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=99&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "-0Bwmmiat-o", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 98, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr3---sn-h0jeener.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=fb40709a689ab7ea&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "228", + "trackingParams": "CC4QxjQYYiITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CDEQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CDEQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "-0Bwmmiat-o", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CDEQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "-0Bwmmiat-o" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "-0Bwmmiat-o" + ] + } + } + ] + } + }, + "trackingParams": "CDEQ_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CDAQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "offlineVideoEndpoint": { + "videoId": "-0Bwmmiat-o", + "onAddCommand": { + "clickTrackingParams": "CDAQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "getDownloadActionCommand": { + "videoId": "-0Bwmmiat-o", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CDAQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CC4QxjQYYiITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgstMEJ3bW1pYXQtbw%3D%3D", + "commands": [ + { + "clickTrackingParams": "CC4QxjQYYiITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CC8QjmIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CC4QxjQYYiITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "hasSeparator": true + } + } + ], + "trackingParams": "CC4QxjQYYiITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 48 seconds" + } + }, + "simpleText": "3:48" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "27M views" + }, + { + "text": " • " + }, + { + "text": "13 years ago" + } + ] + } + } + }, + { + "playlistVideoRenderer": { + "videoId": "mME-URRbak8", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/mME-URRbak8/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCRsCb3kityamG2pLkdboBA7yUbUA", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/mME-URRbak8/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBQgg21dw9tKDOyOGeayYmM4ttyrg", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/mME-URRbak8/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCBVsxiVCXqgoHpTPBc28mtnmN7qw", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/mME-URRbak8/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAAdUUW53TO_rbaF8jm47Y8mk0U0g", + "width": 336, + "height": 188 + } + ] + }, + "title": { + "runs": [ + { + "text": "Carlos Baute - Quien te quiere como yo (Videoclip oficial)" + } + ], + "accessibility": { + "accessibilityData": { + "label": "Carlos Baute - Quien te quiere como yo (Videoclip oficial) by Carlos Baute 101,202,662 views 14 years ago 3 minutes, 48 seconds" + } + } + }, + "index": { + "simpleText": "100" + }, + "shortBylineText": { + "runs": [ + { + "text": "Carlos Baute", + "navigationEndpoint": { + "clickTrackingParams": "CCoQxjQYYyITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/UC2e1yIHI-WdrbGx1CZvRYMA", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UC2e1yIHI-WdrbGx1CZvRYMA", + "canonicalBaseUrl": "/channel/UC2e1yIHI-WdrbGx1CZvRYMA" + } + } + } + ] + }, + "lengthText": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 48 seconds" + } + }, + "simpleText": "3:48" + }, + "navigationEndpoint": { + "clickTrackingParams": "CCoQxjQYYyITCPTK0YmQj4wDFRbUSQcdJVgpSTIKcGxwcF92aWRlb1okVkxQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3FpmgEHCAwQ-iwYAQ==", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=mME-URRbak8&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&index=100&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "mME-URRbak8", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "index": 99, + "params": "OAI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr3---sn-h0jelnez.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=98c13e51145b6a4f&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "lengthSeconds": "228", + "trackingParams": "CCoQxjQYYyITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "isPlayable": true, + "menu": { + "menuRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_QUEUE_TAIL" + }, + "serviceEndpoint": { + "clickTrackingParams": "CC0Q_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CC0Q_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "addToPlaylistCommand": { + "openMiniplayer": true, + "videoId": "mME-URRbak8", + "listType": "PLAYLIST_EDIT_LIST_TYPE_QUEUE", + "onCreateListCommand": { + "clickTrackingParams": "CC0Q_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/playlist/create" + } + }, + "createPlaylistServiceEndpoint": { + "videoIds": [ + "mME-URRbak8" + ], + "params": "CAQ%3D" + } + }, + "videoIds": [ + "mME-URRbak8" + ] + } + } + ] + } + }, + "trackingParams": "CC0Q_pgEGAYiEwj0ytGJkI-MAxUW1EkHHSVYKUk=" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CCwQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "offlineVideoEndpoint": { + "videoId": "mME-URRbak8", + "onAddCommand": { + "clickTrackingParams": "CCwQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "getDownloadActionCommand": { + "videoId": "mME-URRbak8", + "params": "CAIQAA%3D%3D" + } + } + } + }, + "trackingParams": "CCwQ0aoFGAciEwj0ytGJkI-MAxUW1EkHHSVYKUk=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CCoQxjQYYyITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "CgttTUUtVVJSYmFrOA%3D%3D", + "commands": [ + { + "clickTrackingParams": "CCoQxjQYYyITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CCsQjmIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CCoQxjQYYyITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "hasSeparator": true + } + } + ], + "trackingParams": "CCoQxjQYYyITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlayTimeStatusRenderer": { + "text": { + "accessibility": { + "accessibilityData": { + "label": "3 minutes, 48 seconds" + } + }, + "simpleText": "3:48" + }, + "style": "DEFAULT" + } + }, + { + "thumbnailOverlayNowPlayingRenderer": { + "text": { + "runs": [ + { + "text": "Now playing" + } + ] + } + } + } + ], + "videoInfo": { + "runs": [ + { + "text": "101M views" + }, + { + "text": " • " + }, + { + "text": "14 years ago" + } + ] + } + } + }, + { + "continuationItemRenderer": { + "trigger": "CONTINUATION_TRIGGER_ON_ITEM_SHOWN", + "continuationEndpoint": { + "clickTrackingParams": "CCcQ7zsYACITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "commandExecutorCommand": { + "commands": [ + { + "clickTrackingParams": "CCcQ7zsYACITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "playlistVotingRefreshPopupCommand": { + "command": { + "clickTrackingParams": "CCcQ7zsYACITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "openPopupAction": { + "popup": { + "notificationActionRenderer": { + "responseText": { + "simpleText": "Reload for updates" + }, + "actionButton": { + "buttonRenderer": { + "style": "STYLE_BLUE_TEXT", + "size": "SIZE_DEFAULT", + "isDisabled": false, + "text": { + "simpleText": "Reload" + }, + "trackingParams": "CCkQ8FsiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "command": { + "clickTrackingParams": "CCkQ8FsiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "signalAction": { + "signal": "SOFT_RELOAD_PAGE" + } + } + } + }, + "trackingParams": "CCgQuWoiEwj0ytGJkI-MAxUW1EkHHSVYKUk=" + } + }, + "popupType": "TOAST" + } + } + } + }, + { + "clickTrackingParams": "CCcQ7zsYACITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/browse" + } + }, + "continuationCommand": { + "token": "4qmFsgKBARIkVkxQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3FpGjRDQUY2SGxCVU9rTklTV2xGUkVreVVtdEZOVTVFU1hsU2FrWkRVa1JKZWs1NldRJTNEJTNEmgIiUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaQ%3D%3D", + "request": "CONTINUATION_REQUEST_TYPE_BROWSE" + } + } + ] + } + } + } + } + ], + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "isEditable": false, + "canReorder": false, + "trackingParams": "CCcQ7zsYACITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "targetId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi" + } + } + ], + "trackingParams": "CCYQuy8YACITCPTK0YmQj4wDFRbUSQcdJVgpSQ==" + } + }, + { + "continuationItemRenderer": { + "trigger": "CONTINUATION_TRIGGER_ON_ITEM_SHOWN", + "continuationEndpoint": { + "clickTrackingParams": "CCUQui8iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/browse" + } + }, + "continuationCommand": { + "token": "4qmFsgJXEiRWTFBMYlpJUHkyMC0xcE43bXFqY2tlcFdGNzhuZGI2Y2lfcWkaCGtnRURDT01JmgIkVkxQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp", + "request": "CONTINUATION_REQUEST_TYPE_BROWSE" + } + } + } + } + ], + "trackingParams": "CCUQui8iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "targetId": "VLPLbZIPy20-1pN7mqjckepWF78ndb6ci_qi" + } + }, + "trackingParams": "CCQQ8JMBGAUiEwj0ytGJkI-MAxUW1EkHHSVYKUk=" + } + } + ] + } + }, + "header": { + "pageHeaderRenderer": { + "pageTitle": "Best Playlist Ever", + "content": { + "pageHeaderViewModel": { + "title": { + "dynamicTextViewModel": { + "text": { + "content": "Best Playlist Ever" + }, + "rendererContext": { + "loggingContext": { + "loggingDirectives": { + "trackingParams": "CCMQj-QKIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "visibility": { + "types": "12" + }, + "clientVeSpec": { + "uiType": 176655, + "veCounter": 756702802 + } + } + } + } + } + }, + "metadata": { + "contentMetadataViewModel": { + "metadataRows": [ + { + "metadataParts": [ + { + "avatarStack": { + "avatarStackViewModel": { + "avatars": [ + { + "avatarViewModel": { + "image": { + "sources": [ + { + "url": "https://yt3.ggpht.com/ytc/AIdro_lnbL6YypBNVFyLten4oxg0kqn4v8PKdy3hT-iTVnMhewU=s48-c-k-c0x00ffffff-no-rj", + "width": 48, + "height": 48 + } + ], + "processor": { + "borderImageProcessor": { + "circular": true + } + } + }, + "avatarImageSize": "AVATAR_SIZE_XS" + } + } + ], + "text": { + "content": "by Sérgio Cabral", + "commandRuns": [ + { + "startIndex": 0, + "length": 16, + "onTap": { + "innertubeCommand": { + "clickTrackingParams": "CCIQi6ULIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "url": "/@sergiocabral9103", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCzMzwgvr4KncCyY-BsiH2fw", + "canonicalBaseUrl": "/@sergiocabral9103" + } + } + } + } + ], + "styleRuns": [ + { + "startIndex": 0, + "length": 16, + "fontColor": 4294967295, + "weightLabel": "FONT_WEIGHT_NORMAL" + } + ] + }, + "rendererContext": { + "loggingContext": { + "loggingDirectives": { + "trackingParams": "CCIQi6ULIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "visibility": { + "types": "12" + }, + "clientVeSpec": { + "uiType": 184971, + "veCounter": 756702801 + } + } + }, + "accessibilityContext": { + "label": "by Sérgio Cabral" + }, + "commandContext": { + "onTap": { + "innertubeCommand": { + "clickTrackingParams": "CCIQi6ULIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "url": "/@sergiocabral9103", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCzMzwgvr4KncCyY-BsiH2fw", + "canonicalBaseUrl": "/@sergiocabral9103" + } + } + } + } + } + } + } + } + ] + }, + { + "metadataParts": [ + { + "text": { + "content": "Playlist" + } + }, + { + "text": { + "content": "178 videos" + } + }, + { + "text": { + "content": "8,564,258 views" + } + } + ] + } + ], + "delimiter": "•", + "rendererContext": { + "loggingContext": { + "loggingDirectives": { + "trackingParams": "CCEQ9eQKIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "visibility": { + "types": "12" + }, + "clientVeSpec": { + "uiType": 176757, + "veCounter": 756702800 + } + } + } + } + } + }, + "actions": { + "flexibleActionsViewModel": { + "actionsRows": [ + { + "actions": [ + { + "buttonViewModel": { + "iconName": "PLAY_ARROW", + "title": "Play all", + "onTap": { + "innertubeCommand": { + "clickTrackingParams": "CCAQ2M8CGAEiEwj0ytGJkI-MAxUW1EkHHSVYKUlaJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBAxD6LA==", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=dvgZkm1xWPE&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "dvgZkm1xWPE", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr4---sn-h0jeln7l.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=76f819926d7158f1&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + } + }, + "accessibilityText": "Play all", + "style": "BUTTON_VIEW_MODEL_STYLE_OVERLAY", + "trackingParams": "CCAQ2M8CGAEiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "isFullWidth": false, + "type": "BUTTON_VIEW_MODEL_TYPE_FILLED", + "buttonSize": "BUTTON_VIEW_MODEL_SIZE_DEFAULT" + } + }, + { + "toggleButtonViewModel": { + "defaultButtonViewModel": { + "buttonViewModel": { + "iconName": "PLAYLIST_ADD", + "onTap": { + "innertubeCommand": { + "clickTrackingParams": "CBwQjqULIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "ignoreNavigation": true + } + }, + "modalEndpoint": { + "modal": { + "modalWithTitleAndButtonRenderer": { + "title": { + "simpleText": "Want to save this playlist?" + }, + "content": { + "simpleText": "Sign in to save this playlist." + }, + "button": { + "buttonRenderer": { + "style": "STYLE_BLUE_TEXT", + "size": "SIZE_DEFAULT", + "isDisabled": false, + "text": { + "simpleText": "Sign in" + }, + "navigationEndpoint": { + "clickTrackingParams": "CB8Q_IYEIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "url": "https://accounts.google.com/ServiceLogin?service=youtube&uilel=3&passive=true&continue=https%3A%2F%2Fwww.youtube.com%2Fsignin%3Faction_handle_signin%3Dtrue%26app%3Ddesktop%26hl%3Den%26next%3D%252Fplaylist%253Flist%253DPLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&hl=en&ec=66428", + "webPageType": "WEB_PAGE_TYPE_UNKNOWN", + "rootVe": 83769 + } + }, + "signInEndpoint": { + "nextEndpoint": { + "clickTrackingParams": "CB8Q_IYEIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "url": "/playlist?list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "webPageType": "WEB_PAGE_TYPE_PLAYLIST", + "rootVe": 5754, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "VLPLbZIPy20-1pN7mqjckepWF78ndb6ci_qi" + } + }, + "idamTag": "66428" + } + }, + "trackingParams": "CB8Q_IYEIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + } + } + } + } + } + }, + "accessibilityText": "Save playlist", + "style": "BUTTON_VIEW_MODEL_STYLE_OVERLAY", + "trackingParams": "CBwQjqULIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "isFullWidth": false, + "type": "BUTTON_VIEW_MODEL_TYPE_TONAL", + "buttonSize": "BUTTON_VIEW_MODEL_SIZE_DEFAULT", + "tooltip": "Save playlist" + } + }, + "toggledButtonViewModel": { + "buttonViewModel": { + "iconName": "PLAYLIST_ADD_CHECK", + "accessibilityText": "Remove from Library", + "style": "BUTTON_VIEW_MODEL_STYLE_OVERLAY", + "trackingParams": "CBwQjqULIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "isFullWidth": false, + "type": "BUTTON_VIEW_MODEL_TYPE_TONAL", + "buttonSize": "BUTTON_VIEW_MODEL_SIZE_DEFAULT", + "tooltip": "Remove from Library" + } + }, + "isToggled": false, + "identifier": "", + "trackingParams": "CBwQjqULIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "buttonViewModel": { + "iconName": "SHARE", + "onTap": { + "innertubeCommand": { + "clickTrackingParams": "CBwQjqULIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "EiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp", + "commands": [ + { + "clickTrackingParams": "CBwQjqULIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CB4QjmIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + } + }, + "accessibilityText": "Share", + "style": "BUTTON_VIEW_MODEL_STYLE_OVERLAY", + "trackingParams": "CBwQjqULIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "isFullWidth": false, + "type": "BUTTON_VIEW_MODEL_TYPE_TONAL", + "buttonSize": "BUTTON_VIEW_MODEL_SIZE_DEFAULT", + "tooltip": "Share" + } + }, + { + "buttonViewModel": { + "iconName": "MORE_VERT", + "onTap": { + "innertubeCommand": { + "clickTrackingParams": "CBwQjqULIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "showSheetCommand": { + "panelLoadingStrategy": { + "inlineContent": { + "sheetViewModel": { + "content": { + "listViewModel": { + "listItems": [ + { + "listItemViewModel": { + "title": { + "content": "Shuffle" + }, + "leadingImage": { + "sources": [ + { + "clientResource": { + "imageName": "SHUFFLE" + } + } + ] + }, + "rendererContext": { + "loggingContext": { + "loggingDirectives": { + "trackingParams": "CB0QsssCGAUiEwj0ytGJkI-MAxUW1EkHHSVYKUk=" + } + }, + "commandContext": { + "onTap": { + "innertubeCommand": { + "clickTrackingParams": "CB0QsssCGAUiEwj0ytGJkI-MAxUW1EkHHSVYKUlaJFZMUExiWklQeTIwLTFwTjdtcWpja2VwV0Y3OG5kYjZjaV9xaZoBAxD6LA==", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=3EBz2baAGHo&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "3EBz2baAGHo", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "params": "CN0_IEo%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr1---sn-h0jeln7l.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=dc4073d9b680187a&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + } + } + } + } + } + }, + { + "listItemViewModel": { + "title": { + "content": "Show unavailable videos" + }, + "leadingImage": { + "sources": [ + { + "clientResource": { + "imageName": "VISIBILITY" + } + } + ] + }, + "rendererContext": { + "commandContext": { + "onTap": { + "innertubeCommand": { + "clickTrackingParams": "CBwQjqULIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "url": "/playlist?list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "webPageType": "WEB_PAGE_TYPE_PLAYLIST", + "rootVe": 5754, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "VLPLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "params": "wgYCCAA%3D", + "nofollow": true, + "navigationType": "BROWSE_NAVIGATION_TYPE_LOAD_IN_PLACE" + } + } + } + } + } + } + } + ] + } + } + } + } + } + } + } + }, + "accessibilityText": "More actions", + "style": "BUTTON_VIEW_MODEL_STYLE_OVERLAY", + "trackingParams": "CBwQjqULIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "isFullWidth": false, + "type": "BUTTON_VIEW_MODEL_TYPE_TONAL", + "buttonSize": "BUTTON_VIEW_MODEL_SIZE_DEFAULT", + "state": "BUTTON_VIEW_MODEL_STATE_ACTIVE", + "enableIconButton": true + } + } + ] + } + ], + "minimumRowHeight": 44, + "rendererContext": { + "loggingContext": { + "loggingDirectives": { + "trackingParams": "CBwQjqULIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "visibility": { + "types": "12" + }, + "clientVeSpec": { + "uiType": 184974, + "veCounter": 756702799 + } + } + } + } + } + }, + "description": { + "descriptionPreviewViewModel": { + "truncationText": { + "content": "...more", + "styleRuns": [ + { + "startIndex": 0, + "length": 7, + "weight": 500 + } + ] + }, + "rendererContext": { + "loggingContext": { + "loggingDirectives": { + "trackingParams": "CBsQr_4KIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "visibility": { + "types": "12" + }, + "clientVeSpec": { + "uiType": 180015, + "veCounter": 756702798 + } + } + } + } + } + }, + "heroImage": { + "contentPreviewImageViewModel": { + "image": { + "sources": [ + { + "url": "https://i.ytimg.com/vi/dvgZkm1xWPE/hqdefault.jpg?sqp=-oaymwEWCKgBEF5IWvKriqkDCQgBFQAAiEIYAQ==&rs=AOn4CLBa5-Dz5la0fxHv3a4MwFR7DIYJoA", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/dvgZkm1xWPE/hqdefault.jpg?sqp=-oaymwEWCMQBEG5IWvKriqkDCQgBFQAAiEIYAQ==&rs=AOn4CLAxCkSRDuuvRO6BrdC3iHNiDbu3Jg", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/dvgZkm1xWPE/hqdefault.jpg?sqp=-oaymwEXCPYBEIoBSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLDraZ8FZUZsrqXXxwMErPyqS-dEqg", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/dvgZkm1xWPE/hqdefault.jpg?sqp=-oaymwEXCNACELwBSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLAHTfmPcI3oRi3eFeNejHBCi1KKrw", + "width": 336, + "height": 188 + } + ] + }, + "style": "CONTENT_PREVIEW_IMAGE_STYLE_HORIZONTAL_RECTANGLE_16_BY_9", + "layoutMode": "CONTENT_PREVIEW_IMAGE_LAYOUT_MODE_FULL_WIDTH", + "overlays": [ + { + "thumbnailHoverOverlayViewModel": { + "icon": { + "sources": [ + { + "clientResource": { + "imageName": "PLAY_ALL" + } + } + ] + }, + "text": { + "content": "Play all", + "styleRuns": [ + { + "startIndex": 0, + "length": 8 + } + ] + }, + "style": "THUMBNAIL_HOVER_OVERLAY_STYLE_COVER", + "rendererContext": { + "commandContext": { + "onTap": { + "innertubeCommand": { + "clickTrackingParams": "CBoQiqULIhMI9MrRiZCPjAMVFtRJBx0lWClJWiRWTFBMYlpJUHkyMC0xcE43bXFqY2tlcFdGNzhuZGI2Y2lfcWmaAQMQ-iw=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=dvgZkm1xWPE&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "dvgZkm1xWPE", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr4---sn-h0jeln7l.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=76f819926d7158f1&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + } + } + } + } + } + } + ], + "rendererContext": { + "loggingContext": { + "loggingDirectives": { + "trackingParams": "CBoQiqULIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "visibility": { + "types": "12" + }, + "clientVeSpec": { + "uiType": 184970, + "veCounter": 756702797 + } + } + }, + "accessibilityContext": { + "label": "Play all" + } + } + } + }, + "background": { + "cinematicContainerViewModel": { + "backgroundImageConfig": { + "image": { + "sources": [ + { + "url": "https://i.ytimg.com/vi/dvgZkm1xWPE/hqdefault.jpg?sqp=-oaymwEWCKgBEF5IWvKriqkDCQgBFQAAiEIYAQ==&rs=AOn4CLBa5-Dz5la0fxHv3a4MwFR7DIYJoA", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/dvgZkm1xWPE/hqdefault.jpg?sqp=-oaymwEWCMQBEG5IWvKriqkDCQgBFQAAiEIYAQ==&rs=AOn4CLAxCkSRDuuvRO6BrdC3iHNiDbu3Jg", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/dvgZkm1xWPE/hqdefault.jpg?sqp=-oaymwEXCPYBEIoBSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLDraZ8FZUZsrqXXxwMErPyqS-dEqg", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/dvgZkm1xWPE/hqdefault.jpg?sqp=-oaymwEXCNACELwBSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLAHTfmPcI3oRi3eFeNejHBCi1KKrw", + "width": 336, + "height": 188 + } + ] + } + }, + "gradientColorConfig": [ + { + "lightThemeColor": 3430039843, + "darkThemeColor": 3430039843, + "startLocation": 0 + }, + { + "lightThemeColor": 1282556195, + "darkThemeColor": 1282556195, + "startLocation": 0.33 + }, + { + "lightThemeColor": 3430039843, + "darkThemeColor": 4279176975, + "startLocation": 1 + } + ], + "config": { + "lightThemeBackgroundColor": 4285677859, + "darkThemeBackgroundColor": 4285677859, + "colorSourceSizeMultiplier": 2, + "applyClientImageBlur": true + } + } + }, + "hasTopbarAnimation": true, + "enableFlexibleActionsButtonsWrapper": false, + "rendererContext": { + "loggingContext": { + "loggingDirectives": { + "trackingParams": "CBkQot8KIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "visibility": { + "types": "12" + }, + "clientVeSpec": { + "uiType": 176034, + "veCounter": 756702796 + } + } + } + } + } + }, + "enableSidebarView": true + } + }, + "alerts": [ + { + "alertWithButtonRenderer": { + "type": "INFO", + "text": { + "simpleText": "Unavailable videos are hidden" + }, + "dismissButton": { + "buttonRenderer": { + "style": "STYLE_DEFAULT", + "size": "SIZE_DEFAULT", + "isDisabled": false, + "icon": { + "iconType": "CLOSE" + }, + "trackingParams": "CBgQ8FsiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibilityData": { + "accessibilityData": { + "label": "Dismiss" + } + } + } + } + } + } + ], + "metadata": { + "playlistMetadataRenderer": { + "title": "Best Playlist Ever", + "androidAppindexingLink": "android-app://com.google.android.youtube/http/www.youtube.com/playlist?list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "iosAppindexingLink": "ios-app://544007664/vnd.youtube/www.youtube.com/playlist?list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi" + } + }, + "trackingParams": "CAAQhGciEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "topbar": { + "desktopTopbarRenderer": { + "logo": { + "topbarLogoRenderer": { + "iconImage": { + "iconType": "YOUTUBE_LOGO" + }, + "tooltipText": { + "runs": [ + { + "text": "YouTube Home" + } + ] + }, + "endpoint": { + "clickTrackingParams": "CBcQsV4iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/", + "webPageType": "WEB_PAGE_TYPE_BROWSE", + "rootVe": 3854, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "FEwhat_to_watch" + } + }, + "trackingParams": "CBcQsV4iEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "overrideEntityKey": "EgZ0b3BiYXIg9QEoAQ%3D%3D" + } + }, + "searchbox": { + "fusionSearchboxRenderer": { + "icon": { + "iconType": "SEARCH" + }, + "placeholderText": { + "runs": [ + { + "text": "Search" + } + ] + }, + "config": { + "webSearchboxConfig": { + "requestLanguage": "en", + "requestDomain": "us", + "hasOnscreenKeyboard": false, + "focusSearchbox": true + } + }, + "trackingParams": "CBUQ7VAiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "searchEndpoint": { + "clickTrackingParams": "CBUQ7VAiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/results?search_query=", + "webPageType": "WEB_PAGE_TYPE_SEARCH", + "rootVe": 4724 + } + }, + "searchEndpoint": { + "query": "" + } + }, + "clearButton": { + "buttonRenderer": { + "style": "STYLE_DEFAULT", + "size": "SIZE_DEFAULT", + "isDisabled": false, + "icon": { + "iconType": "CLOSE" + }, + "trackingParams": "CBYQ8FsiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibilityData": { + "accessibilityData": { + "label": "Clear search query" + } + } + } + } + } + }, + "trackingParams": "CAwQq6wBIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "topbarButtons": [ + { + "topbarMenuButtonRenderer": { + "icon": { + "iconType": "MORE_VERT" + }, + "menuRequest": { + "clickTrackingParams": "CBMQ_qsBGAAiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/account/account_menu" + } + }, + "signalServiceEndpoint": { + "signal": "GET_ACCOUNT_MENU", + "actions": [ + { + "clickTrackingParams": "CBMQ_qsBGAAiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "openPopupAction": { + "popup": { + "multiPageMenuRenderer": { + "trackingParams": "CBQQ_6sBIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "style": "MULTI_PAGE_MENU_STYLE_TYPE_SYSTEM", + "showLoadingSpinner": true + } + }, + "popupType": "DROPDOWN", + "beReused": true + } + } + ] + } + }, + "trackingParams": "CBMQ_qsBGAAiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "accessibility": { + "accessibilityData": { + "label": "Settings" + } + }, + "tooltip": "Settings", + "style": "STYLE_DEFAULT" + } + }, + { + "buttonRenderer": { + "style": "STYLE_SUGGESTIVE", + "size": "SIZE_SMALL", + "text": { + "runs": [ + { + "text": "Sign in" + } + ] + }, + "icon": { + "iconType": "AVATAR_LOGGED_OUT" + }, + "navigationEndpoint": { + "clickTrackingParams": "CBIQ1IAEGAEiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "https://accounts.google.com/ServiceLogin?service=youtube&uilel=3&passive=true&continue=https%3A%2F%2Fwww.youtube.com%2Fsignin%3Faction_handle_signin%3Dtrue%26app%3Ddesktop%26hl%3Den%26next%3Dhttps%253A%252F%252Fwww.youtube.com%252Fyoutubei%252Fv1%252Fbrowse%253FprettyPrint%253Dfalse&hl=en&ec=65620", + "webPageType": "WEB_PAGE_TYPE_UNKNOWN", + "rootVe": 83769 + } + }, + "signInEndpoint": { + "idamTag": "65620" + } + }, + "trackingParams": "CBIQ1IAEGAEiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "targetId": "topbar-signin" + } + } + ], + "hotkeyDialog": { + "hotkeyDialogRenderer": { + "title": { + "runs": [ + { + "text": "Keyboard shortcuts" + } + ] + }, + "sections": [ + { + "hotkeyDialogSectionRenderer": { + "title": { + "runs": [ + { + "text": "Playback" + } + ] + }, + "options": [ + { + "hotkeyDialogSectionOptionRenderer": { + "label": { + "runs": [ + { + "text": "Toggle play/pause" + } + ] + }, + "hotkey": "k" + } + }, + { + "hotkeyDialogSectionOptionRenderer": { + "label": { + "runs": [ + { + "text": "Rewind 10 seconds" + } + ] + }, + "hotkey": "j" + } + }, + { + "hotkeyDialogSectionOptionRenderer": { + "label": { + "runs": [ + { + "text": "Fast forward 10 seconds" + } + ] + }, + "hotkey": "l" + } + }, + { + "hotkeyDialogSectionOptionRenderer": { + "label": { + "runs": [ + { + "text": "Previous video" + } + ] + }, + "hotkey": "P (SHIFT+p)" + } + }, + { + "hotkeyDialogSectionOptionRenderer": { + "label": { + "runs": [ + { + "text": "Next video" + } + ] + }, + "hotkey": "N (SHIFT+n)" + } + }, + { + "hotkeyDialogSectionOptionRenderer": { + "label": { + "runs": [ + { + "text": "Previous frame (while paused)" + } + ] + }, + "hotkey": ",", + "hotkeyAccessibilityLabel": { + "accessibilityData": { + "label": "Comma" + } + } + } + }, + { + "hotkeyDialogSectionOptionRenderer": { + "label": { + "runs": [ + { + "text": "Next frame (while paused)" + } + ] + }, + "hotkey": ".", + "hotkeyAccessibilityLabel": { + "accessibilityData": { + "label": "Period" + } + } + } + }, + { + "hotkeyDialogSectionOptionRenderer": { + "label": { + "runs": [ + { + "text": "Decrease playback rate" + } + ] + }, + "hotkey": "< (SHIFT+,)", + "hotkeyAccessibilityLabel": { + "accessibilityData": { + "label": "Less than or SHIFT + comma" + } + } + } + }, + { + "hotkeyDialogSectionOptionRenderer": { + "label": { + "runs": [ + { + "text": "Increase playback rate" + } + ] + }, + "hotkey": "> (SHIFT+.)", + "hotkeyAccessibilityLabel": { + "accessibilityData": { + "label": "Greater than or SHIFT + period" + } + } + } + }, + { + "hotkeyDialogSectionOptionRenderer": { + "label": { + "runs": [ + { + "text": "Seek to specific point in the video (7 advances to 70% of duration)" + } + ] + }, + "hotkey": "0..9" + } + }, + { + "hotkeyDialogSectionOptionRenderer": { + "label": { + "runs": [ + { + "text": "Seek to previous chapter" + } + ] + }, + "hotkey": "CONTROL + ←" + } + }, + { + "hotkeyDialogSectionOptionRenderer": { + "label": { + "runs": [ + { + "text": "Seek to next chapter" + } + ] + }, + "hotkey": "CONTROL + →" + } + } + ] + } + }, + { + "hotkeyDialogSectionRenderer": { + "title": { + "runs": [ + { + "text": "General" + } + ] + }, + "options": [ + { + "hotkeyDialogSectionOptionRenderer": { + "label": { + "runs": [ + { + "text": "Toggle full screen" + } + ] + }, + "hotkey": "f" + } + }, + { + "hotkeyDialogSectionOptionRenderer": { + "label": { + "runs": [ + { + "text": "Toggle theater mode" + } + ] + }, + "hotkey": "t" + } + }, + { + "hotkeyDialogSectionOptionRenderer": { + "label": { + "runs": [ + { + "text": "Toggle miniplayer" + } + ] + }, + "hotkey": "i" + } + }, + { + "hotkeyDialogSectionOptionRenderer": { + "label": { + "runs": [ + { + "text": "Close miniplayer or current dialog" + } + ] + }, + "hotkey": "ESCAPE" + } + }, + { + "hotkeyDialogSectionOptionRenderer": { + "label": { + "runs": [ + { + "text": "Toggle mute" + } + ] + }, + "hotkey": "m" + } + } + ] + } + }, + { + "hotkeyDialogSectionRenderer": { + "title": { + "runs": [ + { + "text": "Subtitles and closed captions" + } + ] + }, + "options": [ + { + "hotkeyDialogSectionOptionRenderer": { + "label": { + "runs": [ + { + "text": "If the video supports captions, toggle captions ON/OFF" + } + ] + }, + "hotkey": "c" + } + }, + { + "hotkeyDialogSectionOptionRenderer": { + "label": { + "runs": [ + { + "text": "Rotate through different text opacity levels" + } + ] + }, + "hotkey": "o" + } + }, + { + "hotkeyDialogSectionOptionRenderer": { + "label": { + "runs": [ + { + "text": "Rotate through different window opacity levels" + } + ] + }, + "hotkey": "w" + } + }, + { + "hotkeyDialogSectionOptionRenderer": { + "label": { + "runs": [ + { + "text": "Rotate through font sizes (increasing)" + } + ] + }, + "hotkey": "+" + } + }, + { + "hotkeyDialogSectionOptionRenderer": { + "label": { + "runs": [ + { + "text": "Rotate through font sizes (decreasing)" + } + ] + }, + "hotkey": "-", + "hotkeyAccessibilityLabel": { + "accessibilityData": { + "label": "Minus" + } + } + } + } + ] + } + }, + { + "hotkeyDialogSectionRenderer": { + "title": { + "runs": [ + { + "text": "Spherical Videos" + } + ] + }, + "options": [ + { + "hotkeyDialogSectionOptionRenderer": { + "label": { + "runs": [ + { + "text": "Pan up" + } + ] + }, + "hotkey": "w" + } + }, + { + "hotkeyDialogSectionOptionRenderer": { + "label": { + "runs": [ + { + "text": "Pan left" + } + ] + }, + "hotkey": "a" + } + }, + { + "hotkeyDialogSectionOptionRenderer": { + "label": { + "runs": [ + { + "text": "Pan down" + } + ] + }, + "hotkey": "s" + } + }, + { + "hotkeyDialogSectionOptionRenderer": { + "label": { + "runs": [ + { + "text": "Pan right" + } + ] + }, + "hotkey": "d" + } + }, + { + "hotkeyDialogSectionOptionRenderer": { + "label": { + "runs": [ + { + "text": "Zoom in" + } + ] + }, + "hotkey": "+ on numpad or ]", + "hotkeyAccessibilityLabel": { + "accessibilityData": { + "label": "Plus on number pad or right bracket" + } + } + } + }, + { + "hotkeyDialogSectionOptionRenderer": { + "label": { + "runs": [ + { + "text": "Zoom out" + } + ] + }, + "hotkey": "- on numpad or [", + "hotkeyAccessibilityLabel": { + "accessibilityData": { + "label": "Minus on number pad or left bracket" + } + } + } + } + ] + } + } + ], + "dismissButton": { + "buttonRenderer": { + "style": "STYLE_BLUE_TEXT", + "size": "SIZE_DEFAULT", + "isDisabled": false, + "text": { + "runs": [ + { + "text": "Dismiss" + } + ] + }, + "trackingParams": "CBEQ8FsiEwj0ytGJkI-MAxUW1EkHHSVYKUk=" + } + }, + "trackingParams": "CBAQteYDIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + "backButton": { + "buttonRenderer": { + "trackingParams": "CA8QvIYDIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "command": { + "clickTrackingParams": "CA8QvIYDIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CA8QvIYDIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "signalAction": { + "signal": "HISTORY_BACK" + } + } + ] + } + } + } + }, + "forwardButton": { + "buttonRenderer": { + "trackingParams": "CA4QvYYDIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "command": { + "clickTrackingParams": "CA4QvYYDIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CA4QvYYDIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "signalAction": { + "signal": "HISTORY_FORWARD" + } + } + ] + } + } + } + }, + "a11ySkipNavigationButton": { + "buttonRenderer": { + "style": "STYLE_DEFAULT", + "size": "SIZE_DEFAULT", + "isDisabled": false, + "text": { + "runs": [ + { + "text": "Skip navigation" + } + ] + }, + "trackingParams": "CA0Q8FsiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "command": { + "clickTrackingParams": "CA0Q8FsiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "signal": "CLIENT_SIGNAL", + "actions": [ + { + "clickTrackingParams": "CA0Q8FsiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "signalAction": { + "signal": "SKIP_NAVIGATION" + } + } + ] + } + } + } + } + } + }, + "microformat": { + "microformatDataRenderer": { + "urlCanonical": "http://www.youtube.com/playlist?list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "title": "Best Playlist Ever", + "description": "", + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/dvgZkm1xWPE/hqdefault.jpg?sqp=-oaymwEXCOADEI4CSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLDiH5aMif3GJkOv27DWLoiU_TQKUg&days_since_epoch=20163", + "width": 480, + "height": 270 + } + ], + "sampledThumbnailColor": { + "red": 114, + "green": 65, + "blue": 35 + }, + "darkColorPalette": { + "section2Color": 3349775, + "iconInactiveColor": 9666934, + "iconDisabledColor": 6312521 + }, + "vibrantColorPalette": { + "iconInactiveColor": 10058859 + } + }, + "siteName": "YouTube", + "appName": "YouTube", + "androidPackage": "com.google.android.youtube", + "iosAppStoreId": "544007664", + "iosAppArguments": "http://www.youtube.com/playlist?list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "ogType": "website", + "urlApplinksWeb": "http://www.youtube.com/playlist?list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&feature=applinks", + "urlApplinksIos": "http://www.youtube.com/playlist?list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&feature=applinks", + "urlApplinksAndroid": "http://www.youtube.com/playlist?list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&feature=applinks", + "urlTwitterIos": "http://www.youtube.com/playlist?list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&feature=twitter-deep-link", + "urlTwitterAndroid": "http://www.youtube.com/playlist?list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&feature=twitter-deep-link", + "twitterCardType": "summary", + "twitterSiteHandle": "@YouTube", + "schemaDotOrgType": "http://schema.org/WebPage", + "noindex": false, + "unlisted": false, + "linkAlternates": [ + { + "hrefUrl": "http://www.youtube.com/playlist?list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi" + }, + { + "hrefUrl": "android-app://com.google.android.youtube/http/youtube.comhttp://www.youtube.com/playlist?list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi" + }, + { + "hrefUrl": "ios-app://544007664/http/youtube.comhttp://www.youtube.com/playlist?list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi" + } + ] + } + }, + "sidebar": { + "playlistSidebarRenderer": { + "items": [ + { + "playlistSidebarPrimaryInfoRenderer": { + "thumbnailRenderer": { + "playlistVideoThumbnailRenderer": { + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/dvgZkm1xWPE/hqdefault.jpg?sqp=-oaymwEWCKgBEF5IWvKriqkDCQgBFQAAiEIYAQ==&rs=AOn4CLBa5-Dz5la0fxHv3a4MwFR7DIYJoA", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/dvgZkm1xWPE/hqdefault.jpg?sqp=-oaymwEWCMQBEG5IWvKriqkDCQgBFQAAiEIYAQ==&rs=AOn4CLAxCkSRDuuvRO6BrdC3iHNiDbu3Jg", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/dvgZkm1xWPE/hqdefault.jpg?sqp=-oaymwEXCPYBEIoBSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLDraZ8FZUZsrqXXxwMErPyqS-dEqg", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/dvgZkm1xWPE/hqdefault.jpg?sqp=-oaymwEXCNACELwBSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLAHTfmPcI3oRi3eFeNejHBCi1KKrw", + "width": 336, + "height": 188 + } + ] + }, + "trackingParams": "CAsQy-wJIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + "title": { + "runs": [ + { + "text": "Best Playlist Ever", + "navigationEndpoint": { + "clickTrackingParams": "CAEQk-8CIhMI9MrRiZCPjAMVFtRJBx0lWClJWiRWTFBMYlpJUHkyMC0xcE43bXFqY2tlcFdGNzhuZGI2Y2lfcWmaAQMQ-iw=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=dvgZkm1xWPE&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "dvgZkm1xWPE", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr4---sn-h0jeln7l.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=76f819926d7158f1&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + } + } + ] + }, + "stats": [ + { + "runs": [ + { + "text": "178" + }, + { + "text": " videos" + } + ] + }, + { + "simpleText": "8,564,258 views" + }, + { + "runs": [ + { + "text": "Last updated on " + }, + { + "text": "Oct 11, 2024" + } + ] + } + ], + "menu": { + "menuRenderer": { + "items": [ + { + "menuNavigationItemRenderer": { + "text": { + "simpleText": "Show unavailable videos" + }, + "icon": { + "iconType": "VISIBILITY" + }, + "navigationEndpoint": { + "clickTrackingParams": "CAEQk-8CIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "url": "/playlist?list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "webPageType": "WEB_PAGE_TYPE_PLAYLIST", + "rootVe": 5754, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "VLPLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "params": "wgYCCAA%3D", + "nofollow": true, + "navigationType": "BROWSE_NAVIGATION_TYPE_LOAD_IN_PLACE" + } + }, + "trackingParams": "CAEQk-8CIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "simpleText": "Report playlist" + }, + "icon": { + "iconType": "FLAG" + }, + "navigationEndpoint": { + "clickTrackingParams": "CAEQk-8CIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "ignoreNavigation": true + } + }, + "modalEndpoint": { + "modal": { + "modalWithTitleAndButtonRenderer": { + "title": { + "simpleText": "Need to report the playlist?" + }, + "content": { + "simpleText": "Sign in to report inappropriate content." + }, + "button": { + "buttonRenderer": { + "style": "STYLE_BRAND", + "size": "SIZE_DEFAULT", + "isDisabled": false, + "text": { + "runs": [ + { + "text": "Sign in" + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CAoQ8FsiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "https://accounts.google.com/ServiceLogin?service=youtube&uilel=3&passive=true&continue=https%3A%2F%2Fwww.youtube.com%2Fsignin%3Faction_handle_signin%3Dtrue%26app%3Ddesktop%26hl%3Den%26next%3D%252Fchannel%252FPLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&hl=en", + "webPageType": "WEB_PAGE_TYPE_UNKNOWN", + "rootVe": 83769 + } + }, + "signInEndpoint": { + "nextEndpoint": { + "clickTrackingParams": "CAoQ8FsiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/channel/PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "webPageType": "WEB_PAGE_TYPE_BROWSE", + "rootVe": 6827, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi" + } + } + } + }, + "trackingParams": "CAoQ8FsiEwj0ytGJkI-MAxUW1EkHHSVYKUk=" + } + } + } + } + } + }, + "trackingParams": "CAEQk-8CIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + } + ], + "trackingParams": "CAEQk-8CIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "topLevelButtons": [ + { + "toggleButtonRenderer": { + "style": { + "styleType": "STYLE_TEXT" + }, + "size": { + "sizeType": "SIZE_DEFAULT" + }, + "isToggled": false, + "isDisabled": false, + "defaultIcon": { + "iconType": "PLAYLIST_ADD" + }, + "toggledIcon": { + "iconType": "PLAYLIST_ADD_CHECK" + }, + "trackingParams": "CAgQmE0YCSITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "defaultTooltip": "Save playlist", + "toggledTooltip": "Remove from Library", + "defaultNavigationEndpoint": { + "clickTrackingParams": "CAgQmE0YCSITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "commandMetadata": { + "webCommandMetadata": { + "ignoreNavigation": true + } + }, + "modalEndpoint": { + "modal": { + "modalWithTitleAndButtonRenderer": { + "title": { + "simpleText": "Want to save this playlist?" + }, + "content": { + "simpleText": "Sign in to save this playlist." + }, + "button": { + "buttonRenderer": { + "style": "STYLE_BLUE_TEXT", + "size": "SIZE_DEFAULT", + "isDisabled": false, + "text": { + "simpleText": "Sign in" + }, + "navigationEndpoint": { + "clickTrackingParams": "CAkQ_IYEIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "url": "https://accounts.google.com/ServiceLogin?service=youtube&uilel=3&passive=true&continue=https%3A%2F%2Fwww.youtube.com%2Fsignin%3Faction_handle_signin%3Dtrue%26app%3Ddesktop%26hl%3Den%26next%3D%252Fplaylist%253Flist%253DPLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&hl=en&ec=66428", + "webPageType": "WEB_PAGE_TYPE_UNKNOWN", + "rootVe": 83769 + } + }, + "signInEndpoint": { + "nextEndpoint": { + "clickTrackingParams": "CAkQ_IYEIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "url": "/playlist?list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "webPageType": "WEB_PAGE_TYPE_PLAYLIST", + "rootVe": 5754, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "VLPLbZIPy20-1pN7mqjckepWF78ndb6ci_qi" + } + }, + "idamTag": "66428" + } + }, + "trackingParams": "CAkQ_IYEIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + } + } + } + } + }, + "accessibilityData": { + "accessibilityData": { + "label": "Save playlist" + } + }, + "toggledAccessibilityData": { + "accessibilityData": { + "label": "Remove from Library" + } + } + } + }, + { + "buttonRenderer": { + "style": "STYLE_TEXT", + "size": "SIZE_DEFAULT", + "isDisabled": false, + "icon": { + "iconType": "SHUFFLE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CAcQ8FsYCiITCPTK0YmQj4wDFRbUSQcdJVgpSVokVkxQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3FpmgEDEPos", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=6_5D4y6x-oo&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "6_5D4y6x-oo", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "params": "CKslIEI%3D", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr1---sn-h0jelne7.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=ebfe43e32eb1fa8a&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "accessibility": { + "label": "Shuffle play" + }, + "tooltip": "Shuffle play", + "trackingParams": "CAcQ8FsYCiITCPTK0YmQj4wDFRbUSQcdJVgpSQ==" + } + }, + { + "buttonRenderer": { + "style": "STYLE_DEFAULT", + "size": "SIZE_DEFAULT", + "isDisabled": false, + "serviceEndpoint": { + "clickTrackingParams": "CAUQ8FsYCyITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true, + "apiUrl": "/youtubei/v1/share/get_share_panel" + } + }, + "shareEntityServiceEndpoint": { + "serializedShareEntity": "EiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp", + "commands": [ + { + "clickTrackingParams": "CAUQ8FsYCyITCPTK0YmQj4wDFRbUSQcdJVgpSQ==", + "openPopupAction": { + "popup": { + "unifiedSharePanelRenderer": { + "trackingParams": "CAYQjmIiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "showLoadingSpinner": true + } + }, + "popupType": "DIALOG", + "beReused": true + } + } + ] + } + }, + "icon": { + "iconType": "SHARE" + }, + "accessibility": { + "label": "Share" + }, + "tooltip": "Share", + "trackingParams": "CAUQ8FsYCyITCPTK0YmQj4wDFRbUSQcdJVgpSQ==" + } + } + ], + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + }, + "targetId": "playlist-browse-action-menu" + } + }, + "thumbnailOverlays": [ + { + "thumbnailOverlaySidePanelRenderer": { + "text": { + "simpleText": "PLAY ALL" + }, + "icon": { + "iconType": "PLAY_ALL" + } + } + } + ], + "navigationEndpoint": { + "clickTrackingParams": "CAEQk-8CIhMI9MrRiZCPjAMVFtRJBx0lWClJWiRWTFBMYlpJUHkyMC0xcE43bXFqY2tlcFdGNzhuZGI2Y2lfcWmaAQMQ-iw=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=dvgZkm1xWPE&list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi&pp=iAQB8AUB", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "dvgZkm1xWPE", + "playlistId": "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "playerParams": "iAQB8AUB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GiJQTGJaSVB5MjAtMXBON21xamNrZXBXRjc4bmRiNmNpX3Fp" + } + }, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr4---sn-h0jeln7l.googlevideo.com/initplayback?source=youtube&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odepv=1&id=76f819926d7158f1&ip=79.205.211.19&initcwndbps=2672500&mt=1742145895&oweuc=" + } + } + } + } + }, + "description": {}, + "showMoreText": { + "runs": [ + { + "text": "Show more" + } + ] + } + } + }, + { + "playlistSidebarSecondaryInfoRenderer": { + "videoOwner": { + "videoOwnerRenderer": { + "thumbnail": { + "thumbnails": [ + { + "url": "https://yt3.ggpht.com/ytc/AIdro_lnbL6YypBNVFyLten4oxg0kqn4v8PKdy3hT-iTVnMhewU=s48-c-k-c0x00ffffff-no-rj", + "width": 48, + "height": 48 + }, + { + "url": "https://yt3.ggpht.com/ytc/AIdro_lnbL6YypBNVFyLten4oxg0kqn4v8PKdy3hT-iTVnMhewU=s88-c-k-c0x00ffffff-no-rj", + "width": 88, + "height": 88 + }, + { + "url": "https://yt3.ggpht.com/ytc/AIdro_lnbL6YypBNVFyLten4oxg0kqn4v8PKdy3hT-iTVnMhewU=s176-c-k-c0x00ffffff-no-rj", + "width": 176, + "height": 176 + } + ] + }, + "title": { + "runs": [ + { + "text": "Sérgio Cabral", + "navigationEndpoint": { + "clickTrackingParams": "CAQQ4TkiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/@sergiocabral9103", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCzMzwgvr4KncCyY-BsiH2fw", + "canonicalBaseUrl": "/@sergiocabral9103" + } + } + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CAQQ4TkiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "url": "/@sergiocabral9103", + "webPageType": "WEB_PAGE_TYPE_CHANNEL", + "rootVe": 3611, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "UCzMzwgvr4KncCyY-BsiH2fw", + "canonicalBaseUrl": "/@sergiocabral9103" + } + }, + "trackingParams": "CAQQ4TkiEwj0ytGJkI-MAxUW1EkHHSVYKUk=" + } + }, + "button": { + "buttonRenderer": { + "style": "STYLE_DESTRUCTIVE", + "size": "SIZE_DEFAULT", + "isDisabled": false, + "text": { + "runs": [ + { + "text": "Subscribe" + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CAIQ8FsiEwj0ytGJkI-MAxUW1EkHHSVYKUk=", + "commandMetadata": { + "webCommandMetadata": { + "ignoreNavigation": true + } + }, + "modalEndpoint": { + "modal": { + "modalWithTitleAndButtonRenderer": { + "title": { + "simpleText": "Want to subscribe to this channel?" + }, + "content": { + "simpleText": "Sign in to subscribe to this channel." + }, + "button": { + "buttonRenderer": { + "style": "STYLE_BLUE_TEXT", + "size": "SIZE_DEFAULT", + "isDisabled": false, + "text": { + "simpleText": "Sign in" + }, + "navigationEndpoint": { + "clickTrackingParams": "CAMQ_YYEIhMI9MrRiZCPjAMVFtRJBx0lWClJMglzdWJzY3JpYmU=", + "commandMetadata": { + "webCommandMetadata": { + "url": "https://accounts.google.com/ServiceLogin?service=youtube&uilel=3&passive=true&continue=https%3A%2F%2Fwww.youtube.com%2Fsignin%3Faction_handle_signin%3Dtrue%26app%3Ddesktop%26hl%3Den%26next%3D%252Fplaylist%253Flist%253DPLbZIPy20-1pN7mqjckepWF78ndb6ci_qi%26continue_action%3DQUFFLUhqbHo0a21pLXdBQmdNNU9xYjNtaEFXYUxQRXlTUXxBQ3Jtc0ttRVpzeV9iVnpCa0x1bTZxS2ZHNGFtRDZLeVVDT0xGM3pTU1hpN2dwdUFaSVFoQXh5V3VVbEdDTXRDSDVET2dNVzBqSGVBc08zUkd1RTdOMGFyMlY5b1F6RllCQTcxSDNMaTl0TkQtVzFDMU5WYlhFTVZNbjJ4dlQyWWwyV1l0aU9WSGpDYmk5R294ZElCUGp3SVg2SEdzbTJualFFTjRwZEtwQ09wZFZfX2pWNWhpdGg4NGRuZnFBaG53LWQ1ZG42N2ZjbzE&hl=en&ec=66429", + "webPageType": "WEB_PAGE_TYPE_UNKNOWN", + "rootVe": 83769 + } + }, + "signInEndpoint": { + "nextEndpoint": { + "clickTrackingParams": "CAMQ_YYEIhMI9MrRiZCPjAMVFtRJBx0lWClJ", + "commandMetadata": { + "webCommandMetadata": { + "url": "/playlist?list=PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi", + "webPageType": "WEB_PAGE_TYPE_PLAYLIST", + "rootVe": 5754, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "VLPLbZIPy20-1pN7mqjckepWF78ndb6ci_qi" + } + }, + "continueAction": "QUFFLUhqbHo0a21pLXdBQmdNNU9xYjNtaEFXYUxQRXlTUXxBQ3Jtc0ttRVpzeV9iVnpCa0x1bTZxS2ZHNGFtRDZLeVVDT0xGM3pTU1hpN2dwdUFaSVFoQXh5V3VVbEdDTXRDSDVET2dNVzBqSGVBc08zUkd1RTdOMGFyMlY5b1F6RllCQTcxSDNMaTl0TkQtVzFDMU5WYlhFTVZNbjJ4dlQyWWwyV1l0aU9WSGpDYmk5R294ZElCUGp3SVg2SEdzbTJualFFTjRwZEtwQ09wZFZfX2pWNWhpdGg4NGRuZnFBaG53LWQ1ZG42N2ZjbzE", + "idamTag": "66429" + } + }, + "trackingParams": "CAMQ_YYEIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + } + } + } + } + }, + "trackingParams": "CAIQ8FsiEwj0ytGJkI-MAxUW1EkHHSVYKUk=" + } + } + } + } + ], + "trackingParams": "CAEQk-8CIhMI9MrRiZCPjAMVFtRJBx0lWClJ" + } + } +} diff --git a/testfiles/history/history.json b/testfiles/userdata/history.json similarity index 100% rename from testfiles/history/history.json rename to testfiles/userdata/history.json diff --git a/testfiles/history/subscription_feed.json b/testfiles/userdata/subscription_feed.json similarity index 100% rename from testfiles/history/subscription_feed.json rename to testfiles/userdata/subscription_feed.json diff --git a/testfiles/history/subscriptions.json b/testfiles/userdata/subscriptions.json similarity index 100% rename from testfiles/history/subscriptions.json rename to testfiles/userdata/subscriptions.json diff --git a/tests/snapshots/youtube__music_album_audiobook.snap b/tests/snapshots/youtube__music_album_audiobook.snap index a1f0632..7c5ce80 100644 --- a/tests/snapshots/youtube__music_album_audiobook.snap +++ b/tests/snapshots/youtube__music_album_audiobook.snap @@ -18,6 +18,7 @@ MusicAlbum( album_type: audiobook, year: Some(2022), by_va: false, + track_count: 319, tracks: [ TrackItem( id: "F28BV_Y-970", @@ -34,6 +35,7 @@ MusicAlbum( track_type: track, track_nr: Some(1), by_va: false, + unavailable: false, ), TrackItem( id: "B12pddzDBAs", @@ -50,6 +52,7 @@ MusicAlbum( track_type: track, track_nr: Some(2), by_va: false, + unavailable: false, ), TrackItem( id: "J4jGyX1f998", @@ -66,6 +69,7 @@ MusicAlbum( track_type: track, track_nr: Some(3), by_va: false, + unavailable: false, ), TrackItem( id: "xSwgv3_59Jg", @@ -82,6 +86,7 @@ MusicAlbum( track_type: track, track_nr: Some(4), by_va: false, + unavailable: false, ), TrackItem( id: "WzmdYCTH-ZI", @@ -98,6 +103,7 @@ MusicAlbum( track_type: track, track_nr: Some(5), by_va: false, + unavailable: false, ), TrackItem( id: "5OQfpOqbaY8", @@ -114,6 +120,7 @@ MusicAlbum( track_type: track, track_nr: Some(6), by_va: false, + unavailable: false, ), TrackItem( id: "7UeTt_0QS1M", @@ -130,6 +137,7 @@ MusicAlbum( track_type: track, track_nr: Some(7), by_va: false, + unavailable: false, ), TrackItem( id: "2RP6xm9TWPA", @@ -146,6 +154,7 @@ MusicAlbum( track_type: track, track_nr: Some(8), by_va: false, + unavailable: false, ), TrackItem( id: "4EiyZzC98vA", @@ -162,6 +171,7 @@ MusicAlbum( track_type: track, track_nr: Some(9), by_va: false, + unavailable: false, ), TrackItem( id: "d7c18oVKGuw", @@ -178,6 +188,7 @@ MusicAlbum( track_type: track, track_nr: Some(10), by_va: false, + unavailable: false, ), TrackItem( id: "bKCEe30O-9E", @@ -194,6 +205,7 @@ MusicAlbum( track_type: track, track_nr: Some(11), by_va: false, + unavailable: false, ), TrackItem( id: "jzZVXzd-IgI", @@ -210,6 +222,7 @@ MusicAlbum( track_type: track, track_nr: Some(12), by_va: false, + unavailable: false, ), TrackItem( id: "A5GNL_YP6rc", @@ -226,6 +239,7 @@ MusicAlbum( track_type: track, track_nr: Some(13), by_va: false, + unavailable: false, ), TrackItem( id: "TihFSZ8IZHo", @@ -242,6 +256,7 @@ MusicAlbum( track_type: track, track_nr: Some(14), by_va: false, + unavailable: false, ), TrackItem( id: "1QfMUYC9BR8", @@ -258,6 +273,7 @@ MusicAlbum( track_type: track, track_nr: Some(15), by_va: false, + unavailable: false, ), TrackItem( id: "AhuZlNLGQK0", @@ -274,6 +290,7 @@ MusicAlbum( track_type: track, track_nr: Some(16), by_va: false, + unavailable: false, ), TrackItem( id: "Twrr-ReUadg", @@ -290,6 +307,7 @@ MusicAlbum( track_type: track, track_nr: Some(17), by_va: false, + unavailable: false, ), TrackItem( id: "F6JJmeRk3NY", @@ -306,6 +324,7 @@ MusicAlbum( track_type: track, track_nr: Some(18), by_va: false, + unavailable: false, ), TrackItem( id: "bERcihhazVQ", @@ -322,6 +341,7 @@ MusicAlbum( track_type: track, track_nr: Some(19), by_va: false, + unavailable: false, ), TrackItem( id: "zmsB0ixj4L8", @@ -338,6 +358,7 @@ MusicAlbum( track_type: track, track_nr: Some(20), by_va: false, + unavailable: false, ), TrackItem( id: "_AeZoRyNZ0Q", @@ -354,6 +375,7 @@ MusicAlbum( track_type: track, track_nr: Some(21), by_va: false, + unavailable: false, ), TrackItem( id: "iX_GlsDkgSs", @@ -370,6 +392,7 @@ MusicAlbum( track_type: track, track_nr: Some(22), by_va: false, + unavailable: false, ), TrackItem( id: "TdR76HsPNZI", @@ -386,6 +409,7 @@ MusicAlbum( track_type: track, track_nr: Some(23), by_va: false, + unavailable: false, ), TrackItem( id: "gz6e4SE3L_8", @@ -402,6 +426,7 @@ MusicAlbum( track_type: track, track_nr: Some(24), by_va: false, + unavailable: false, ), TrackItem( id: "jrZYEoLg1lY", @@ -418,6 +443,7 @@ MusicAlbum( track_type: track, track_nr: Some(25), by_va: false, + unavailable: false, ), TrackItem( id: "z4CRs-_heos", @@ -434,6 +460,7 @@ MusicAlbum( track_type: track, track_nr: Some(26), by_va: false, + unavailable: false, ), TrackItem( id: "RM8Jk0AhLNY", @@ -450,6 +477,7 @@ MusicAlbum( track_type: track, track_nr: Some(27), by_va: false, + unavailable: false, ), TrackItem( id: "mICWuD7UbpE", @@ -466,6 +494,7 @@ MusicAlbum( track_type: track, track_nr: Some(28), by_va: false, + unavailable: false, ), TrackItem( id: "ieJk5E2FrTQ", @@ -482,6 +511,7 @@ MusicAlbum( track_type: track, track_nr: Some(29), by_va: false, + unavailable: false, ), TrackItem( id: "DWa2LY_SXyQ", @@ -498,6 +528,7 @@ MusicAlbum( track_type: track, track_nr: Some(30), by_va: false, + unavailable: false, ), TrackItem( id: "vBzgEusfeIU", @@ -514,6 +545,7 @@ MusicAlbum( track_type: track, track_nr: Some(31), by_va: false, + unavailable: false, ), TrackItem( id: "t3U95rPrFrY", @@ -530,6 +562,7 @@ MusicAlbum( track_type: track, track_nr: Some(32), by_va: false, + unavailable: false, ), TrackItem( id: "F0HVKbHFXOA", @@ -546,6 +579,7 @@ MusicAlbum( track_type: track, track_nr: Some(33), by_va: false, + unavailable: false, ), TrackItem( id: "VB6RraDXSEM", @@ -562,6 +596,7 @@ MusicAlbum( track_type: track, track_nr: Some(34), by_va: false, + unavailable: false, ), TrackItem( id: "tqi9j41-xhU", @@ -578,6 +613,7 @@ MusicAlbum( track_type: track, track_nr: Some(35), by_va: false, + unavailable: false, ), TrackItem( id: "tyCtChD9gNY", @@ -594,6 +630,7 @@ MusicAlbum( track_type: track, track_nr: Some(36), by_va: false, + unavailable: false, ), TrackItem( id: "fn2pYeEM288", @@ -610,6 +647,7 @@ MusicAlbum( track_type: track, track_nr: Some(37), by_va: false, + unavailable: false, ), TrackItem( id: "1hphnoWnbFM", @@ -626,6 +664,7 @@ MusicAlbum( track_type: track, track_nr: Some(38), by_va: false, + unavailable: false, ), TrackItem( id: "cnige70U6nw", @@ -642,6 +681,7 @@ MusicAlbum( track_type: track, track_nr: Some(39), by_va: false, + unavailable: false, ), TrackItem( id: "N_DmWGxuDg8", @@ -658,6 +698,7 @@ MusicAlbum( track_type: track, track_nr: Some(40), by_va: false, + unavailable: false, ), TrackItem( id: "v536-IdXIqc", @@ -674,6 +715,7 @@ MusicAlbum( track_type: track, track_nr: Some(41), by_va: false, + unavailable: false, ), TrackItem( id: "ZkFmAt8MS90", @@ -690,6 +732,7 @@ MusicAlbum( track_type: track, track_nr: Some(42), by_va: false, + unavailable: false, ), TrackItem( id: "tzCu8HlkxDE", @@ -706,6 +749,7 @@ MusicAlbum( track_type: track, track_nr: Some(43), by_va: false, + unavailable: false, ), TrackItem( id: "mJGIaHm03Tc", @@ -722,6 +766,7 @@ MusicAlbum( track_type: track, track_nr: Some(44), by_va: false, + unavailable: false, ), TrackItem( id: "qsZee8A6QB0", @@ -738,6 +783,7 @@ MusicAlbum( track_type: track, track_nr: Some(45), by_va: false, + unavailable: false, ), TrackItem( id: "8Wpxs6QRqu4", @@ -754,6 +800,7 @@ MusicAlbum( track_type: track, track_nr: Some(46), by_va: false, + unavailable: false, ), TrackItem( id: "82eUY70WLqE", @@ -770,6 +817,7 @@ MusicAlbum( track_type: track, track_nr: Some(47), by_va: false, + unavailable: false, ), TrackItem( id: "03KktUmXdMg", @@ -786,6 +834,7 @@ MusicAlbum( track_type: track, track_nr: Some(48), by_va: false, + unavailable: false, ), TrackItem( id: "ki5f2zgRAjI", @@ -802,6 +851,7 @@ MusicAlbum( track_type: track, track_nr: Some(49), by_va: false, + unavailable: false, ), TrackItem( id: "O05G6kmQW2g", @@ -818,6 +868,7 @@ MusicAlbum( track_type: track, track_nr: Some(50), by_va: false, + unavailable: false, ), TrackItem( id: "Dayba7Kf90U", @@ -834,6 +885,7 @@ MusicAlbum( track_type: track, track_nr: Some(51), by_va: false, + unavailable: false, ), TrackItem( id: "V1G2tVnsyfU", @@ -850,6 +902,7 @@ MusicAlbum( track_type: track, track_nr: Some(52), by_va: false, + unavailable: false, ), TrackItem( id: "ugegWLyUGjg", @@ -866,6 +919,7 @@ MusicAlbum( track_type: track, track_nr: Some(53), by_va: false, + unavailable: false, ), TrackItem( id: "o0OY_x2Sb1E", @@ -882,6 +936,7 @@ MusicAlbum( track_type: track, track_nr: Some(54), by_va: false, + unavailable: false, ), TrackItem( id: "aefFzoIlJZY", @@ -898,6 +953,7 @@ MusicAlbum( track_type: track, track_nr: Some(55), by_va: false, + unavailable: false, ), TrackItem( id: "Wp6E3VPS2mM", @@ -914,6 +970,7 @@ MusicAlbum( track_type: track, track_nr: Some(56), by_va: false, + unavailable: false, ), TrackItem( id: "tLuYgcr6Dpg", @@ -930,6 +987,7 @@ MusicAlbum( track_type: track, track_nr: Some(57), by_va: false, + unavailable: false, ), TrackItem( id: "375_yqG6YbI", @@ -946,6 +1004,7 @@ MusicAlbum( track_type: track, track_nr: Some(58), by_va: false, + unavailable: false, ), TrackItem( id: "ANqW0THg1Pw", @@ -962,6 +1021,7 @@ MusicAlbum( track_type: track, track_nr: Some(59), by_va: false, + unavailable: false, ), TrackItem( id: "3qfEL7ZCgL8", @@ -978,6 +1038,7 @@ MusicAlbum( track_type: track, track_nr: Some(60), by_va: false, + unavailable: false, ), TrackItem( id: "_G8r-gk0msY", @@ -994,6 +1055,7 @@ MusicAlbum( track_type: track, track_nr: Some(61), by_va: false, + unavailable: false, ), TrackItem( id: "whI1u7a_rSU", @@ -1010,6 +1072,7 @@ MusicAlbum( track_type: track, track_nr: Some(62), by_va: false, + unavailable: false, ), TrackItem( id: "X2swFoUEp30", @@ -1026,6 +1089,7 @@ MusicAlbum( track_type: track, track_nr: Some(63), by_va: false, + unavailable: false, ), TrackItem( id: "5nXXHqVDIqY", @@ -1042,6 +1106,7 @@ MusicAlbum( track_type: track, track_nr: Some(64), by_va: false, + unavailable: false, ), TrackItem( id: "AgT-3d32lkQ", @@ -1058,6 +1123,7 @@ MusicAlbum( track_type: track, track_nr: Some(65), by_va: false, + unavailable: false, ), TrackItem( id: "NvR28TRH1Kc", @@ -1074,6 +1140,7 @@ MusicAlbum( track_type: track, track_nr: Some(66), by_va: false, + unavailable: false, ), TrackItem( id: "218UZATQgwY", @@ -1090,6 +1157,7 @@ MusicAlbum( track_type: track, track_nr: Some(67), by_va: false, + unavailable: false, ), TrackItem( id: "rCUpwhyh7ag", @@ -1106,6 +1174,7 @@ MusicAlbum( track_type: track, track_nr: Some(68), by_va: false, + unavailable: false, ), TrackItem( id: "FseNJJS42Wk", @@ -1122,6 +1191,7 @@ MusicAlbum( track_type: track, track_nr: Some(69), by_va: false, + unavailable: false, ), TrackItem( id: "ahufTwdimiY", @@ -1138,6 +1208,7 @@ MusicAlbum( track_type: track, track_nr: Some(70), by_va: false, + unavailable: false, ), TrackItem( id: "w_hYzT2BSz0", @@ -1154,6 +1225,7 @@ MusicAlbum( track_type: track, track_nr: Some(71), by_va: false, + unavailable: false, ), TrackItem( id: "L8bxsR6xR8Y", @@ -1170,6 +1242,7 @@ MusicAlbum( track_type: track, track_nr: Some(72), by_va: false, + unavailable: false, ), TrackItem( id: "StCyrfSVKRA", @@ -1186,6 +1259,7 @@ MusicAlbum( track_type: track, track_nr: Some(73), by_va: false, + unavailable: false, ), TrackItem( id: "bfb0z96jjDw", @@ -1202,6 +1276,7 @@ MusicAlbum( track_type: track, track_nr: Some(74), by_va: false, + unavailable: false, ), TrackItem( id: "_Cs_HEjIxE4", @@ -1218,6 +1293,7 @@ MusicAlbum( track_type: track, track_nr: Some(75), by_va: false, + unavailable: false, ), TrackItem( id: "rlZTCrB9DUY", @@ -1234,6 +1310,7 @@ MusicAlbum( track_type: track, track_nr: Some(76), by_va: false, + unavailable: false, ), TrackItem( id: "0gXRizztpCE", @@ -1250,6 +1327,7 @@ MusicAlbum( track_type: track, track_nr: Some(77), by_va: false, + unavailable: false, ), TrackItem( id: "U3gNQeexaFA", @@ -1266,6 +1344,7 @@ MusicAlbum( track_type: track, track_nr: Some(78), by_va: false, + unavailable: false, ), TrackItem( id: "SDVj1LdZAWs", @@ -1282,6 +1361,7 @@ MusicAlbum( track_type: track, track_nr: Some(79), by_va: false, + unavailable: false, ), TrackItem( id: "aStx8DVBL4w", @@ -1298,6 +1378,7 @@ MusicAlbum( track_type: track, track_nr: Some(80), by_va: false, + unavailable: false, ), TrackItem( id: "39HPvtWzT5w", @@ -1314,6 +1395,7 @@ MusicAlbum( track_type: track, track_nr: Some(81), by_va: false, + unavailable: false, ), TrackItem( id: "KDpAcnRvf98", @@ -1330,6 +1412,7 @@ MusicAlbum( track_type: track, track_nr: Some(82), by_va: false, + unavailable: false, ), TrackItem( id: "Qg7M-RQatI8", @@ -1346,6 +1429,7 @@ MusicAlbum( track_type: track, track_nr: Some(83), by_va: false, + unavailable: false, ), TrackItem( id: "V35JMnicqpE", @@ -1362,6 +1446,7 @@ MusicAlbum( track_type: track, track_nr: Some(84), by_va: false, + unavailable: false, ), TrackItem( id: "fqVlv9bXo38", @@ -1378,6 +1463,7 @@ MusicAlbum( track_type: track, track_nr: Some(85), by_va: false, + unavailable: false, ), TrackItem( id: "zcv2WC4ccCM", @@ -1394,6 +1480,7 @@ MusicAlbum( track_type: track, track_nr: Some(86), by_va: false, + unavailable: false, ), TrackItem( id: "Em3S3CXYgsc", @@ -1410,6 +1497,7 @@ MusicAlbum( track_type: track, track_nr: Some(87), by_va: false, + unavailable: false, ), TrackItem( id: "Pru_NJ16FX8", @@ -1426,6 +1514,24 @@ MusicAlbum( track_type: track, track_nr: Some(88), by_va: false, + unavailable: false, + ), + TrackItem( + id: "2klbe4CmXaQ", + name: "Kapitel 7.14 - 1984", + duration: Some(129), + cover: [], + artists: [], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(89), + by_va: false, + unavailable: false, ), TrackItem( id: "qePq7ltD6j4", @@ -1442,6 +1548,7 @@ MusicAlbum( track_type: track, track_nr: Some(90), by_va: false, + unavailable: false, ), TrackItem( id: "oBiS9b_v4wM", @@ -1458,6 +1565,7 @@ MusicAlbum( track_type: track, track_nr: Some(91), by_va: false, + unavailable: false, ), TrackItem( id: "g2_3XksRrek", @@ -1474,6 +1582,7 @@ MusicAlbum( track_type: track, track_nr: Some(92), by_va: false, + unavailable: false, ), TrackItem( id: "-eW-lGQghx8", @@ -1490,6 +1599,7 @@ MusicAlbum( track_type: track, track_nr: Some(93), by_va: false, + unavailable: false, ), TrackItem( id: "adRnRqIr19Q", @@ -1506,6 +1616,7 @@ MusicAlbum( track_type: track, track_nr: Some(94), by_va: false, + unavailable: false, ), TrackItem( id: "C1fvUpxJ8G0", @@ -1522,6 +1633,7 @@ MusicAlbum( track_type: track, track_nr: Some(95), by_va: false, + unavailable: false, ), TrackItem( id: "MgkJ7uW13hM", @@ -1538,6 +1650,7 @@ MusicAlbum( track_type: track, track_nr: Some(96), by_va: false, + unavailable: false, ), TrackItem( id: "pB22pN3oudY", @@ -1554,6 +1667,7 @@ MusicAlbum( track_type: track, track_nr: Some(97), by_va: false, + unavailable: false, ), TrackItem( id: "d4JvNP7oR4g", @@ -1570,6 +1684,7 @@ MusicAlbum( track_type: track, track_nr: Some(98), by_va: false, + unavailable: false, ), TrackItem( id: "FfUZhLb3L1A", @@ -1586,6 +1701,7 @@ MusicAlbum( track_type: track, track_nr: Some(99), by_va: false, + unavailable: false, ), TrackItem( id: "pGdz8B_V9vs", @@ -1602,6 +1718,7 @@ MusicAlbum( track_type: track, track_nr: Some(100), by_va: false, + unavailable: false, ), TrackItem( id: "wWzLLDr7VZY", @@ -1618,6 +1735,7 @@ MusicAlbum( track_type: track, track_nr: Some(101), by_va: false, + unavailable: false, ), TrackItem( id: "sjwsqR7A-nI", @@ -1634,6 +1752,7 @@ MusicAlbum( track_type: track, track_nr: Some(102), by_va: false, + unavailable: false, ), TrackItem( id: "ZBxtouT9Rpo", @@ -1650,6 +1769,7 @@ MusicAlbum( track_type: track, track_nr: Some(103), by_va: false, + unavailable: false, ), TrackItem( id: "Ym_pEJYSd1Y", @@ -1666,6 +1786,7 @@ MusicAlbum( track_type: track, track_nr: Some(104), by_va: false, + unavailable: false, ), TrackItem( id: "48rzTOM0u5g", @@ -1682,6 +1803,7 @@ MusicAlbum( track_type: track, track_nr: Some(105), by_va: false, + unavailable: false, ), TrackItem( id: "KGN_cz6acJg", @@ -1698,6 +1820,7 @@ MusicAlbum( track_type: track, track_nr: Some(106), by_va: false, + unavailable: false, ), TrackItem( id: "JPYOtU69FBI", @@ -1714,6 +1837,7 @@ MusicAlbum( track_type: track, track_nr: Some(107), by_va: false, + unavailable: false, ), TrackItem( id: "UKJsludf1ME", @@ -1730,6 +1854,7 @@ MusicAlbum( track_type: track, track_nr: Some(108), by_va: false, + unavailable: false, ), TrackItem( id: "aO0GCv90tok", @@ -1746,6 +1871,7 @@ MusicAlbum( track_type: track, track_nr: Some(109), by_va: false, + unavailable: false, ), TrackItem( id: "yqLiNPBAIF4", @@ -1762,6 +1888,7 @@ MusicAlbum( track_type: track, track_nr: Some(110), by_va: false, + unavailable: false, ), TrackItem( id: "Wm71AIJ08ss", @@ -1778,6 +1905,7 @@ MusicAlbum( track_type: track, track_nr: Some(111), by_va: false, + unavailable: false, ), TrackItem( id: "LxSyUI2fjzM", @@ -1794,6 +1922,7 @@ MusicAlbum( track_type: track, track_nr: Some(112), by_va: false, + unavailable: false, ), TrackItem( id: "4SVHRTay_PU", @@ -1810,6 +1939,7 @@ MusicAlbum( track_type: track, track_nr: Some(113), by_va: false, + unavailable: false, ), TrackItem( id: "zhrqkGwyk4o", @@ -1826,6 +1956,7 @@ MusicAlbum( track_type: track, track_nr: Some(114), by_va: false, + unavailable: false, ), TrackItem( id: "2YuvSWutjbY", @@ -1842,6 +1973,7 @@ MusicAlbum( track_type: track, track_nr: Some(115), by_va: false, + unavailable: false, ), TrackItem( id: "QT-BvFEO3ho", @@ -1858,6 +1990,7 @@ MusicAlbum( track_type: track, track_nr: Some(116), by_va: false, + unavailable: false, ), TrackItem( id: "27rrlVQ7D4M", @@ -1874,6 +2007,7 @@ MusicAlbum( track_type: track, track_nr: Some(117), by_va: false, + unavailable: false, ), TrackItem( id: "7m0EEXEBRo4", @@ -1890,6 +2024,7 @@ MusicAlbum( track_type: track, track_nr: Some(118), by_va: false, + unavailable: false, ), TrackItem( id: "34H2shrx38w", @@ -1906,6 +2041,7 @@ MusicAlbum( track_type: track, track_nr: Some(119), by_va: false, + unavailable: false, ), TrackItem( id: "yCuI-ii6dLA", @@ -1922,6 +2058,7 @@ MusicAlbum( track_type: track, track_nr: Some(120), by_va: false, + unavailable: false, ), TrackItem( id: "E6Uzcr7zwoQ", @@ -1938,6 +2075,7 @@ MusicAlbum( track_type: track, track_nr: Some(121), by_va: false, + unavailable: false, ), TrackItem( id: "gpL45b1fugI", @@ -1954,6 +2092,7 @@ MusicAlbum( track_type: track, track_nr: Some(122), by_va: false, + unavailable: false, ), TrackItem( id: "ZHGQcDZ2lDo", @@ -1970,6 +2109,7 @@ MusicAlbum( track_type: track, track_nr: Some(123), by_va: false, + unavailable: false, ), TrackItem( id: "EkVfn3H1YNw", @@ -1986,6 +2126,7 @@ MusicAlbum( track_type: track, track_nr: Some(124), by_va: false, + unavailable: false, ), TrackItem( id: "iqh3t9ScmdM", @@ -2002,6 +2143,7 @@ MusicAlbum( track_type: track, track_nr: Some(125), by_va: false, + unavailable: false, ), TrackItem( id: "lfdocX0dHjo", @@ -2018,6 +2160,7 @@ MusicAlbum( track_type: track, track_nr: Some(126), by_va: false, + unavailable: false, ), TrackItem( id: "LBz5HWuwICc", @@ -2034,6 +2177,7 @@ MusicAlbum( track_type: track, track_nr: Some(127), by_va: false, + unavailable: false, ), TrackItem( id: "DLiAozDSkn4", @@ -2050,6 +2194,7 @@ MusicAlbum( track_type: track, track_nr: Some(128), by_va: false, + unavailable: false, ), TrackItem( id: "1oAe6NOWODM", @@ -2066,6 +2211,7 @@ MusicAlbum( track_type: track, track_nr: Some(129), by_va: false, + unavailable: false, ), TrackItem( id: "CpEo9pBL9cw", @@ -2082,6 +2228,7 @@ MusicAlbum( track_type: track, track_nr: Some(130), by_va: false, + unavailable: false, ), TrackItem( id: "DioQU4tkLZQ", @@ -2098,6 +2245,7 @@ MusicAlbum( track_type: track, track_nr: Some(131), by_va: false, + unavailable: false, ), TrackItem( id: "aShFQKy3Z8M", @@ -2114,6 +2262,7 @@ MusicAlbum( track_type: track, track_nr: Some(132), by_va: false, + unavailable: false, ), TrackItem( id: "RgZACT1rJ4A", @@ -2130,6 +2279,7 @@ MusicAlbum( track_type: track, track_nr: Some(133), by_va: false, + unavailable: false, ), TrackItem( id: "Vqg-K1lFtf4", @@ -2146,6 +2296,7 @@ MusicAlbum( track_type: track, track_nr: Some(134), by_va: false, + unavailable: false, ), TrackItem( id: "FgzKDQ-KvkQ", @@ -2162,6 +2313,7 @@ MusicAlbum( track_type: track, track_nr: Some(135), by_va: false, + unavailable: false, ), TrackItem( id: "q6qGmT7z_mk", @@ -2178,6 +2330,7 @@ MusicAlbum( track_type: track, track_nr: Some(136), by_va: false, + unavailable: false, ), TrackItem( id: "BSEUTCp4JzQ", @@ -2194,6 +2347,7 @@ MusicAlbum( track_type: track, track_nr: Some(137), by_va: false, + unavailable: false, ), TrackItem( id: "GorIwpkX6bk", @@ -2210,6 +2364,7 @@ MusicAlbum( track_type: track, track_nr: Some(138), by_va: false, + unavailable: false, ), TrackItem( id: "NYiNrt7VMzA", @@ -2226,6 +2381,7 @@ MusicAlbum( track_type: track, track_nr: Some(139), by_va: false, + unavailable: false, ), TrackItem( id: "9pPalZZsIlQ", @@ -2242,6 +2398,7 @@ MusicAlbum( track_type: track, track_nr: Some(140), by_va: false, + unavailable: false, ), TrackItem( id: "GUPplhf2Wts", @@ -2258,6 +2415,7 @@ MusicAlbum( track_type: track, track_nr: Some(141), by_va: false, + unavailable: false, ), TrackItem( id: "sUc4pA09dMA", @@ -2274,6 +2432,7 @@ MusicAlbum( track_type: track, track_nr: Some(142), by_va: false, + unavailable: false, ), TrackItem( id: "ykieQtMZjgI", @@ -2290,6 +2449,7 @@ MusicAlbum( track_type: track, track_nr: Some(143), by_va: false, + unavailable: false, ), TrackItem( id: "P_aAJjwygaA", @@ -2306,6 +2466,7 @@ MusicAlbum( track_type: track, track_nr: Some(144), by_va: false, + unavailable: false, ), TrackItem( id: "d2QMPdcl7YM", @@ -2322,6 +2483,7 @@ MusicAlbum( track_type: track, track_nr: Some(145), by_va: false, + unavailable: false, ), TrackItem( id: "V0gQO8dH6b4", @@ -2338,6 +2500,7 @@ MusicAlbum( track_type: track, track_nr: Some(146), by_va: false, + unavailable: false, ), TrackItem( id: "cgOzxcg52v8", @@ -2354,6 +2517,7 @@ MusicAlbum( track_type: track, track_nr: Some(147), by_va: false, + unavailable: false, ), TrackItem( id: "rjTEyuRGrYY", @@ -2370,6 +2534,7 @@ MusicAlbum( track_type: track, track_nr: Some(148), by_va: false, + unavailable: false, ), TrackItem( id: "6DwpgjU82ww", @@ -2386,6 +2551,7 @@ MusicAlbum( track_type: track, track_nr: Some(149), by_va: false, + unavailable: false, ), TrackItem( id: "dwk9eQZse6E", @@ -2402,6 +2568,7 @@ MusicAlbum( track_type: track, track_nr: Some(150), by_va: false, + unavailable: false, ), TrackItem( id: "zmM1aeBv_mo", @@ -2418,6 +2585,7 @@ MusicAlbum( track_type: track, track_nr: Some(151), by_va: false, + unavailable: false, ), TrackItem( id: "QL1HMAEp21k", @@ -2434,6 +2602,7 @@ MusicAlbum( track_type: track, track_nr: Some(152), by_va: false, + unavailable: false, ), TrackItem( id: "rtzG_mr5q-c", @@ -2450,6 +2619,7 @@ MusicAlbum( track_type: track, track_nr: Some(153), by_va: false, + unavailable: false, ), TrackItem( id: "Eg2WlrlzO8Y", @@ -2466,6 +2636,7 @@ MusicAlbum( track_type: track, track_nr: Some(154), by_va: false, + unavailable: false, ), TrackItem( id: "QMXkBa6exqA", @@ -2482,6 +2653,7 @@ MusicAlbum( track_type: track, track_nr: Some(155), by_va: false, + unavailable: false, ), TrackItem( id: "n0dStgWvR08", @@ -2498,6 +2670,7 @@ MusicAlbum( track_type: track, track_nr: Some(156), by_va: false, + unavailable: false, ), TrackItem( id: "FxslNrm_3jU", @@ -2514,6 +2687,7 @@ MusicAlbum( track_type: track, track_nr: Some(157), by_va: false, + unavailable: false, ), TrackItem( id: "rlJXZLKXjyM", @@ -2530,6 +2704,7 @@ MusicAlbum( track_type: track, track_nr: Some(158), by_va: false, + unavailable: false, ), TrackItem( id: "RQ6lvrVddyk", @@ -2546,6 +2721,7 @@ MusicAlbum( track_type: track, track_nr: Some(159), by_va: false, + unavailable: false, ), TrackItem( id: "LCLBV5T8s5k", @@ -2562,6 +2738,7 @@ MusicAlbum( track_type: track, track_nr: Some(160), by_va: false, + unavailable: false, ), TrackItem( id: "bNigSN7siMU", @@ -2578,6 +2755,7 @@ MusicAlbum( track_type: track, track_nr: Some(161), by_va: false, + unavailable: false, ), TrackItem( id: "KFBydJkaTD4", @@ -2594,6 +2772,7 @@ MusicAlbum( track_type: track, track_nr: Some(162), by_va: false, + unavailable: false, ), TrackItem( id: "1PUlvwOASBw", @@ -2610,6 +2789,7 @@ MusicAlbum( track_type: track, track_nr: Some(163), by_va: false, + unavailable: false, ), TrackItem( id: "pyvOIiyn5JY", @@ -2626,6 +2806,7 @@ MusicAlbum( track_type: track, track_nr: Some(164), by_va: false, + unavailable: false, ), TrackItem( id: "eQKlU7pzFRw", @@ -2642,6 +2823,7 @@ MusicAlbum( track_type: track, track_nr: Some(165), by_va: false, + unavailable: false, ), TrackItem( id: "pbROCT8IwDs", @@ -2658,6 +2840,7 @@ MusicAlbum( track_type: track, track_nr: Some(166), by_va: false, + unavailable: false, ), TrackItem( id: "6eklRsup2Cg", @@ -2674,6 +2857,7 @@ MusicAlbum( track_type: track, track_nr: Some(167), by_va: false, + unavailable: false, ), TrackItem( id: "Sx047sHMOV8", @@ -2690,6 +2874,7 @@ MusicAlbum( track_type: track, track_nr: Some(168), by_va: false, + unavailable: false, ), TrackItem( id: "uIhFD_Y1RM8", @@ -2706,6 +2891,7 @@ MusicAlbum( track_type: track, track_nr: Some(169), by_va: false, + unavailable: false, ), TrackItem( id: "OdiW4u-MJWk", @@ -2722,6 +2908,7 @@ MusicAlbum( track_type: track, track_nr: Some(170), by_va: false, + unavailable: false, ), TrackItem( id: "IQQ4H5wKhqw", @@ -2738,6 +2925,7 @@ MusicAlbum( track_type: track, track_nr: Some(171), by_va: false, + unavailable: false, ), TrackItem( id: "heJoxdCFgXE", @@ -2754,6 +2942,7 @@ MusicAlbum( track_type: track, track_nr: Some(172), by_va: false, + unavailable: false, ), TrackItem( id: "k7Vhuh9N7hg", @@ -2770,6 +2959,7 @@ MusicAlbum( track_type: track, track_nr: Some(173), by_va: false, + unavailable: false, ), TrackItem( id: "0Aeaczuom_0", @@ -2786,6 +2976,7 @@ MusicAlbum( track_type: track, track_nr: Some(174), by_va: false, + unavailable: false, ), TrackItem( id: "5sJd3YkpnNg", @@ -2802,6 +2993,7 @@ MusicAlbum( track_type: track, track_nr: Some(175), by_va: false, + unavailable: false, ), TrackItem( id: "K3xED9BLZ0g", @@ -2818,6 +3010,7 @@ MusicAlbum( track_type: track, track_nr: Some(176), by_va: false, + unavailable: false, ), TrackItem( id: "wxBk25H3Zw4", @@ -2834,6 +3027,7 @@ MusicAlbum( track_type: track, track_nr: Some(177), by_va: false, + unavailable: false, ), TrackItem( id: "Gxdv90qTiBA", @@ -2850,6 +3044,7 @@ MusicAlbum( track_type: track, track_nr: Some(178), by_va: false, + unavailable: false, ), TrackItem( id: "ewUX4G705t0", @@ -2866,6 +3061,7 @@ MusicAlbum( track_type: track, track_nr: Some(179), by_va: false, + unavailable: false, ), TrackItem( id: "fIAs-O1seGs", @@ -2882,6 +3078,7 @@ MusicAlbum( track_type: track, track_nr: Some(180), by_va: false, + unavailable: false, ), TrackItem( id: "CLmbiozyb3g", @@ -2898,6 +3095,7 @@ MusicAlbum( track_type: track, track_nr: Some(181), by_va: false, + unavailable: false, ), TrackItem( id: "cZqX4kRFrls", @@ -2914,6 +3112,7 @@ MusicAlbum( track_type: track, track_nr: Some(182), by_va: false, + unavailable: false, ), TrackItem( id: "GzKlXy_klc0", @@ -2930,6 +3129,7 @@ MusicAlbum( track_type: track, track_nr: Some(183), by_va: false, + unavailable: false, ), TrackItem( id: "N9TK0-c90NQ", @@ -2946,6 +3146,7 @@ MusicAlbum( track_type: track, track_nr: Some(184), by_va: false, + unavailable: false, ), TrackItem( id: "AdmAEn7yJBg", @@ -2962,6 +3163,7 @@ MusicAlbum( track_type: track, track_nr: Some(185), by_va: false, + unavailable: false, ), TrackItem( id: "goV3qAE4nDo", @@ -2978,6 +3180,7 @@ MusicAlbum( track_type: track, track_nr: Some(186), by_va: false, + unavailable: false, ), TrackItem( id: "HpX-bfM-z8c", @@ -2994,6 +3197,7 @@ MusicAlbum( track_type: track, track_nr: Some(187), by_va: false, + unavailable: false, ), TrackItem( id: "GT5EGpOqAeM", @@ -3010,6 +3214,7 @@ MusicAlbum( track_type: track, track_nr: Some(188), by_va: false, + unavailable: false, ), TrackItem( id: "M8cQ5zntKks", @@ -3026,6 +3231,7 @@ MusicAlbum( track_type: track, track_nr: Some(189), by_va: false, + unavailable: false, ), TrackItem( id: "EDdwfxA88RQ", @@ -3042,6 +3248,7 @@ MusicAlbum( track_type: track, track_nr: Some(190), by_va: false, + unavailable: false, ), TrackItem( id: "deQx4nzAHvI", @@ -3058,6 +3265,7 @@ MusicAlbum( track_type: track, track_nr: Some(191), by_va: false, + unavailable: false, ), TrackItem( id: "-TYmP5BWkZA", @@ -3074,6 +3282,7 @@ MusicAlbum( track_type: track, track_nr: Some(192), by_va: false, + unavailable: false, ), TrackItem( id: "NKWffyEyvvQ", @@ -3090,6 +3299,7 @@ MusicAlbum( track_type: track, track_nr: Some(193), by_va: false, + unavailable: false, ), TrackItem( id: "5SQgoPx88Xk", @@ -3106,6 +3316,7 @@ MusicAlbum( track_type: track, track_nr: Some(194), by_va: false, + unavailable: false, ), TrackItem( id: "8MmcjOWCXcI", @@ -3122,6 +3333,7 @@ MusicAlbum( track_type: track, track_nr: Some(195), by_va: false, + unavailable: false, ), TrackItem( id: "Cs8eNJJsOwg", @@ -3138,6 +3350,7 @@ MusicAlbum( track_type: track, track_nr: Some(196), by_va: false, + unavailable: false, ), TrackItem( id: "u9ulcct7UW8", @@ -3154,6 +3367,7 @@ MusicAlbum( track_type: track, track_nr: Some(197), by_va: false, + unavailable: false, ), TrackItem( id: "_Q3Ybt6A0A4", @@ -3170,6 +3384,7 @@ MusicAlbum( track_type: track, track_nr: Some(198), by_va: false, + unavailable: false, ), TrackItem( id: "OwLevpAaw50", @@ -3186,6 +3401,7 @@ MusicAlbum( track_type: track, track_nr: Some(199), by_va: false, + unavailable: false, ), TrackItem( id: "wKg1h1i_pLk", @@ -3202,13 +3418,30 @@ MusicAlbum( track_type: track, track_nr: Some(200), by_va: false, + unavailable: false, ), TrackItem( id: "svY6h_e3LYI", name: "Kapitel 17.5 - 1984", duration: Some(128), - cover: [], - artists: [], + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), album: Some(AlbumId( id: "MPREb_gaoNzsQHedo", @@ -3218,6 +3451,3901 @@ MusicAlbum( track_type: track, track_nr: Some(201), by_va: false, + unavailable: false, + ), + TrackItem( + id: "Hir7IMW_37k", + name: "Kapitel 17.6 - 1984", + duration: Some(203), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(202), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "wrp-KxyqmKs", + name: "Kapitel 17.7 - 1984", + duration: Some(185), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(203), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "tFQF6fw09ec", + name: "Kapitel 17.8 - 1984", + duration: Some(127), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(204), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "tzlG81GlTXQ", + name: "Kapitel 17.9 - 1984", + duration: Some(212), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(205), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "Vno9w1ba-C0", + name: "Kapitel 17.10 - 1984", + duration: Some(152), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(206), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "Ve19y3AhLBk", + name: "Kapitel 17.11 - 1984", + duration: Some(143), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(207), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "8oHasQ_tiuI", + name: "Kapitel 17.12 - 1984", + duration: Some(171), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(208), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "Ap42W06bL2c", + name: "Kapitel 17.13 - 1984", + duration: Some(174), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(209), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "qmiLwRF0fOs", + name: "Kapitel 17.14 - 1984", + duration: Some(173), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(210), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "BdiOwfRyToY", + name: "Kapitel 17.15 - 1984", + duration: Some(192), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(211), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "PlBZ0cGf5DE", + name: "Kapitel 17.16 - 1984", + duration: Some(214), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(212), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "v9MgxVJWCow", + name: "Kapitel 17.17 - 1984", + duration: Some(367), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(213), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "5nwe4RMmA8s", + name: "Kapitel 17.18 & Kapitel 18.1 - 1984", + duration: Some(137), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(214), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "6ZP4rXcPFd0", + name: "Kapitel 18.2 - 1984", + duration: Some(141), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(215), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "eVhWJKVdo40", + name: "Kapitel 18.3 - 1984", + duration: Some(230), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(216), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "Vt7keSTK0No", + name: "Kapitel 18.4 - 1984", + duration: Some(180), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(217), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "Ff3SyoUlcyY", + name: "Kapitel 18.5 - 1984", + duration: Some(234), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(218), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "gMTJQzds2ac", + name: "Kapitel 18.6 - 1984", + duration: Some(199), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(219), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "UgAOUifyrqc", + name: "Kapitel 18.7 - 1984", + duration: Some(138), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(220), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "IGZoSexffaY", + name: "Kapitel 18.8 - 1984", + duration: Some(261), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(221), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "_yk6rIXnfyw", + name: "Kapitel 18.9 - 1984", + duration: Some(375), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(222), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "nhznAYDKokI", + name: "Kapitel 18.10 - 1984", + duration: Some(171), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(223), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "xxcWex5wCpc", + name: "Kapitel 18.11 - 1984", + duration: Some(126), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(224), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "bHuVgebOTtY", + name: "Kapitel 18.12 - 1984", + duration: Some(409), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(225), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "4dSMRBLFXE8", + name: "Kapitel 18.13 - 1984", + duration: Some(126), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(226), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "7nrceuJOGrQ", + name: "Kapitel 18.14 & Kapitel 19.1 - 1984", + duration: Some(152), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(227), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "rs_bvUV0-ZE", + name: "Kapitel 19.2 - 1984", + duration: Some(194), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(228), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "SjDAX5b1sCA", + name: "Kapitel 19.3 - 1984", + duration: Some(127), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(229), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "9LPuIbBxM_4", + name: "Kapitel 19.4 - 1984", + duration: Some(126), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(230), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "xoTJCozaeFw", + name: "Kapitel 19.5 - 1984", + duration: Some(134), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(231), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "o9R4zEStCg0", + name: "Kapitel 19.6 - 1984", + duration: Some(127), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(232), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "v9aTac8EXeU", + name: "Kapitel 19.7 - 1984", + duration: Some(144), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(233), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "Q6LQBbg9OFg", + name: "Kapitel 19.8 & Kapitel 20.1 - 1984", + duration: Some(130), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(234), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "m3uHhmbvtLQ", + name: "Kapitel 20.2 - 1984", + duration: Some(149), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(235), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "6Q6paXKnxN4", + name: "Kapitel 20.3 - 1984", + duration: Some(134), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(236), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "bZmfzI9OhCs", + name: "Kapitel 20.4 - 1984", + duration: Some(173), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(237), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "LywfUGAGUPc", + name: "Kapitel 20.5 - 1984", + duration: Some(134), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(238), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "r3vVFZ3zl94", + name: "Kapitel 20.6 - 1984", + duration: Some(161), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(239), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "Qenx-MfJ9mw", + name: "Kapitel 20.7 - 1984", + duration: Some(138), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(240), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "vl_qPscUgdQ", + name: "Kapitel 20.8 - 1984", + duration: Some(137), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(241), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "FQwclGtvT8A", + name: "Kapitel 20.9 - 1984", + duration: Some(130), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(242), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "XfZemPEMHYM", + name: "Kapitel 20.10 - 1984", + duration: Some(137), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(243), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "tXEWSfM5jBI", + name: "Kapitel 20.11 - 1984", + duration: Some(134), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(244), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "CyYeGELAYks", + name: "Kapitel 20.12 - 1984", + duration: Some(132), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(245), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "V4crS8euIlY", + name: "Kapitel 20.13 - 1984", + duration: Some(126), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(246), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "6wkfFwX8hEk", + name: "Kapitel 20.14 - 1984", + duration: Some(127), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(247), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "7BrXtew4Xf8", + name: "Kapitel 20.15 - 1984", + duration: Some(125), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(248), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "zBOsHSF010g", + name: "Kapitel 20.16 - 1984", + duration: Some(129), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(249), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "5hY-Mmqfg-U", + name: "Kapitel 20.17 - 1984", + duration: Some(137), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(250), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "GWsWxGtQG2U", + name: "Kapitel 20.18 & Kapitel 21.1 - 1984", + duration: Some(178), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(251), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "CS61jsoqGxM", + name: "Kapitel 21.2 - 1984", + duration: Some(201), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(252), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "--MDZ6MoFOk", + name: "Kapitel 21.3 - 1984", + duration: Some(126), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(253), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "APxYXEvS1gI", + name: "Kapitel 21.4 - 1984", + duration: Some(147), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(254), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "hTZCV0xIaNo", + name: "Kapitel 21.5 - 1984", + duration: Some(147), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(255), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "fUyVsvSLXAA", + name: "Kapitel 21.6 - 1984", + duration: Some(129), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(256), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "Ex8KXjkzH6U", + name: "Kapitel 21.7 - 1984", + duration: Some(129), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(257), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "Jq9_Roh-_qQ", + name: "Kapitel 21.8 - 1984", + duration: Some(138), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(258), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "O-k4WTkVF_Y", + name: "Kapitel 21.9 - 1984", + duration: Some(125), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(259), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "e0VydtqA7zA", + name: "Kapitel 21.10 - 1984", + duration: Some(129), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(260), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "tYHQ1jqyY04", + name: "Kapitel 21.11 - 1984", + duration: Some(126), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(261), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "uJdxfG7mtxg", + name: "Kapitel 21.12 - 1984", + duration: Some(130), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(262), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "y9WgL5asujI", + name: "Kapitel 21.13 - 1984", + duration: Some(134), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(263), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "M2_kYfPFD_o", + name: "Kapitel 21.14 - 1984", + duration: Some(148), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(264), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "mMk8rWLu2kQ", + name: "Kapitel 21.15 - 1984", + duration: Some(144), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(265), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "CdlO0Z_uhbM", + name: "Kapitel 21.16 - 1984", + duration: Some(129), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(266), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "5loS8hlMQ7U", + name: "Kapitel 21.17 - 1984", + duration: Some(138), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(267), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "2db5x8VGr8A", + name: "Kapitel 21.18 - 1984", + duration: Some(128), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(268), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "cTRGKM8Jsgc", + name: "Kapitel 21.19 - 1984", + duration: Some(160), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(269), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "nrfztfR0soo", + name: "Kapitel 21.20 - 1984", + duration: Some(127), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(270), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "3om6N_pNGZA", + name: "Kapitel 21.21 - 1984", + duration: Some(181), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(271), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "VN1KvIPeJ00", + name: "Kapitel 21.22 - 1984", + duration: Some(129), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(272), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "LRuhIRN5d1U", + name: "Kapitel 21.23 - 1984", + duration: Some(134), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(273), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "dE8U1hliRr4", + name: "Kapitel 21.24 - 1984", + duration: Some(134), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(274), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "vjIb2Klunv0", + name: "Kapitel 21.25 - 1984", + duration: Some(134), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(275), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "h8BydzKZOtI", + name: "Kapitel 21.26 & Kapitel 22.1 - 1984", + duration: Some(130), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(276), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "ADwyhkSHBVM", + name: "Kapitel 22.2 - 1984", + duration: Some(135), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(277), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "6cDrKGImmQk", + name: "Kapitel 22.3 - 1984", + duration: Some(130), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(278), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "CdrnLzIJGdk", + name: "Kapitel 22.4 - 1984", + duration: Some(162), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(279), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "N-ZzOlAX43w", + name: "Kapitel 22.5 - 1984", + duration: Some(134), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(280), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "7MHmAXMX1F8", + name: "Kapitel 22.6 - 1984", + duration: Some(135), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(281), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "vSlyuw3eyeU", + name: "Kapitel 22.7 - 1984", + duration: Some(127), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(282), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "K8ez5KNbl-A", + name: "Kapitel 22.8 - 1984", + duration: Some(145), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(283), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "J9y2_6f5Dqc", + name: "Kapitel 22.9 - 1984", + duration: Some(155), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(284), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "d4Grp66WWsM", + name: "Kapitel 22.10 - 1984", + duration: Some(138), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(285), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "gYCKh7_DAAw", + name: "Kapitel 22.11 - 1984", + duration: Some(127), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(286), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "L59dwOH-nHQ", + name: "Kapitel 22.12 - 1984", + duration: Some(151), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(287), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "KS4nFrdUDS8", + name: "Kapitel 22.13 - 1984", + duration: Some(132), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(288), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "4bEhuh2DtBQ", + name: "Kapitel 22.14 - 1984", + duration: Some(128), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(289), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "76nvjlkt2xY", + name: "Kapitel 22.15 - 1984", + duration: Some(147), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(290), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "F7mUlqh-y04", + name: "Kapitel 22.16 - 1984", + duration: Some(145), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(291), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "KivOUvqJ2n4", + name: "Kapitel 22.17 - 1984", + duration: Some(126), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(292), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "EHzrgnOh5GA", + name: "Kapitel 22.18 & Kapitel 23.1 - 1984", + duration: Some(146), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(293), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "10xak85mCso", + name: "Kapitel 23.2 - 1984", + duration: Some(147), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(294), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "yDnNqeQnn3A", + name: "Kapitel 23.3 - 1984", + duration: Some(137), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(295), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "l7n3auySj4A", + name: "Kapitel 23.4 - 1984", + duration: Some(141), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(296), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "Ywtfz72Zywk", + name: "Kapitel 23.5 - 1984", + duration: Some(156), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(297), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "FZpI_baOd_s", + name: "Kapitel 23.6 - 1984", + duration: Some(130), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(298), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "8OXK57SjsL0", + name: "Kapitel 23.7 - 1984", + duration: Some(127), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(299), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "5M-AVirsHzY", + name: "Kapitel 23.8 - 1984", + duration: Some(143), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(300), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "4BQlY5tiXqY", + name: "Kapitel 23.9 & Kapitel 24.1 - 1984", + duration: Some(165), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(301), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "1n-_LCwDMUg", + name: "Kapitel 24.2 - 1984", + duration: Some(134), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(302), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "V-DyXyW8UI4", + name: "Kapitel 24.3 - 1984", + duration: Some(145), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(303), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "GygcLOKL8B4", + name: "Kapitel 24.4 - 1984", + duration: Some(133), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(304), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "S78K3PuQ-GM", + name: "Kapitel 24.5 - 1984", + duration: Some(130), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(305), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "HcbO6kTLRZo", + name: "Kapitel 24.6 - 1984", + duration: Some(132), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(306), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "-MCqkAaGfl0", + name: "Kapitel 24.7 & Kapitel 25.1 - 1984", + duration: Some(127), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(307), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "G4edEm1rbeo", + name: "Kapitel 25.2 - 1984", + duration: Some(126), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(308), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "KA26JvGwM28", + name: "Kapitel 25.3 - 1984", + duration: Some(133), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(309), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "9GR32DB5RwY", + name: "Kapitel 25.4 - 1984", + duration: Some(131), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(310), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "06rRLhqrcTk", + name: "Kapitel 25.5 - 1984", + duration: Some(133), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(311), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "gw2h1uGGwak", + name: "Kapitel 25.6 - 1984", + duration: Some(137), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(312), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "U1OnhVQHw4c", + name: "Kapitel 25.7 - 1984", + duration: Some(126), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(313), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "C8UAKN2G0R8", + name: "Kapitel 25.8 - 1984", + duration: Some(133), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(314), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "-q-TeXqQ9AA", + name: "Kapitel 25.9 - 1984", + duration: Some(128), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(315), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "r77eoDVeFh0", + name: "Kapitel 25.10 - 1984", + duration: Some(128), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(316), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "g8RfSPyjiXc", + name: "Kapitel 25.11 - 1984", + duration: Some(130), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(317), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "au27GX2h7Zc", + name: "Kapitel 25.12 - 1984", + duration: Some(130), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(318), + by_va: false, + unavailable: false, + ), + TrackItem( + id: "hGHRyXDMR0M", + name: "Kapitel 25.13 - 1984", + duration: Some(138), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/wKdD-SHqfdz6FzU3vyq-je-yqJ2DrRqbwmLxbK0OjpP55RF0Uh1LvtkLiypabLL5oSUWW7YEWxmpw7s=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: None, + name: "George Orwell & Dirk Jacobs", + ), + ], + artist_id: Some("UCTlkMP4GiGuhOiBdcmI65kg"), + album: Some(AlbumId( + id: "MPREb_gaoNzsQHedo", + name: "1984", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(319), + by_va: false, + unavailable: false, ), ], variants: [], diff --git a/tests/snapshots/youtube__music_album_ep.snap b/tests/snapshots/youtube__music_album_ep.snap index 92e2f4d..fcf693f 100644 --- a/tests/snapshots/youtube__music_album_ep.snap +++ b/tests/snapshots/youtube__music_album_ep.snap @@ -18,6 +18,7 @@ MusicAlbum( album_type: ep, year: Some(2016), by_va: false, + track_count: 5, tracks: [ TrackItem( id: "aGd3VKSOTxY", @@ -39,6 +40,7 @@ MusicAlbum( track_type: track, track_nr: Some(1), by_va: false, + unavailable: false, ), TrackItem( id: "Jz-26iiDuYs", @@ -60,6 +62,7 @@ MusicAlbum( track_type: track, track_nr: Some(2), by_va: false, + unavailable: false, ), TrackItem( id: "Bu26uFtpt58", @@ -81,6 +84,7 @@ MusicAlbum( track_type: track, track_nr: Some(3), by_va: false, + unavailable: false, ), TrackItem( id: "RgwNqqiVqdY", @@ -102,6 +106,7 @@ MusicAlbum( track_type: track, track_nr: Some(4), by_va: false, + unavailable: false, ), TrackItem( id: "2TuOh30XbCI", @@ -123,6 +128,7 @@ MusicAlbum( track_type: track, track_nr: Some(5), by_va: false, + unavailable: false, ), ], variants: [], diff --git a/tests/snapshots/youtube__music_album_no_artist.snap b/tests/snapshots/youtube__music_album_no_artist.snap index c4831dd..1939dd3 100644 --- a/tests/snapshots/youtube__music_album_no_artist.snap +++ b/tests/snapshots/youtube__music_album_no_artist.snap @@ -13,6 +13,7 @@ MusicAlbum( album_type: album, year: Some(2024), by_va: true, + track_count: 14, tracks: [ TrackItem( id: "ilNEztApdjI", @@ -38,6 +39,7 @@ MusicAlbum( track_type: track, track_nr: Some(1), by_va: false, + unavailable: false, ), TrackItem( id: "s-qSnZyyvzs", @@ -59,6 +61,7 @@ MusicAlbum( track_type: track, track_nr: Some(2), by_va: false, + unavailable: false, ), TrackItem( id: "4jXoRBcQ8PY", @@ -80,6 +83,7 @@ MusicAlbum( track_type: track, track_nr: Some(3), by_va: false, + unavailable: false, ), TrackItem( id: "DRES9S4VQI8", @@ -101,6 +105,7 @@ MusicAlbum( track_type: track, track_nr: Some(4), by_va: false, + unavailable: false, ), TrackItem( id: "yhZVimwD4B4", @@ -126,6 +131,7 @@ MusicAlbum( track_type: track, track_nr: Some(5), by_va: false, + unavailable: false, ), TrackItem( id: "5d6YiFkdzLM", @@ -147,6 +153,7 @@ MusicAlbum( track_type: track, track_nr: Some(6), by_va: false, + unavailable: false, ), TrackItem( id: "3Qe7-uN2PjU", @@ -172,6 +179,7 @@ MusicAlbum( track_type: track, track_nr: Some(7), by_va: false, + unavailable: false, ), TrackItem( id: "SKZ_MTsXFP4", @@ -193,6 +201,7 @@ MusicAlbum( track_type: track, track_nr: Some(8), by_va: false, + unavailable: false, ), TrackItem( id: "n5-ujUwazDA", @@ -214,6 +223,7 @@ MusicAlbum( track_type: track, track_nr: Some(9), by_va: false, + unavailable: false, ), TrackItem( id: "VaREivfDJeY", @@ -235,6 +245,7 @@ MusicAlbum( track_type: track, track_nr: Some(10), by_va: false, + unavailable: false, ), TrackItem( id: "cWcD0WIK2PA", @@ -260,6 +271,7 @@ MusicAlbum( track_type: track, track_nr: Some(11), by_va: false, + unavailable: false, ), TrackItem( id: "QRELvH564T4", @@ -281,6 +293,7 @@ MusicAlbum( track_type: track, track_nr: Some(12), by_va: false, + unavailable: false, ), TrackItem( id: "eCY0-GyG46s", @@ -302,6 +315,7 @@ MusicAlbum( track_type: track, track_nr: Some(13), by_va: false, + unavailable: false, ), TrackItem( id: "UIrHYTEyUfA", @@ -327,6 +341,7 @@ MusicAlbum( track_type: track, track_nr: Some(14), by_va: false, + unavailable: false, ), ], variants: [], diff --git a/tests/snapshots/youtube__music_album_no_year.snap b/tests/snapshots/youtube__music_album_no_year.snap index 44c8290..a4b2c2d 100644 --- a/tests/snapshots/youtube__music_album_no_year.snap +++ b/tests/snapshots/youtube__music_album_no_year.snap @@ -26,6 +26,7 @@ MusicAlbum( album_type: single, year: None, by_va: false, + track_count: 1, tracks: [ TrackItem( id: "1Sz3lUVGBSM", @@ -55,6 +56,7 @@ MusicAlbum( track_type: track, track_nr: Some(1), by_va: false, + unavailable: false, ), ], variants: [], diff --git a/tests/snapshots/youtube__music_album_one_artist.snap b/tests/snapshots/youtube__music_album_one_artist.snap index 20e8a9a..c092826 100644 --- a/tests/snapshots/youtube__music_album_one_artist.snap +++ b/tests/snapshots/youtube__music_album_one_artist.snap @@ -36,6 +36,7 @@ MusicAlbum( album_type: album, year: Some(2011), by_va: false, + track_count: 15, tracks: [ TrackItem( id: "js0moD0CIRQ", @@ -65,6 +66,7 @@ MusicAlbum( track_type: track, track_nr: Some(1), by_va: false, + unavailable: false, ), TrackItem( id: "-xFJfXE2Cms", @@ -90,6 +92,7 @@ MusicAlbum( track_type: track, track_nr: Some(2), by_va: false, + unavailable: false, ), TrackItem( id: "KWDAaQDq8CQ", @@ -115,6 +118,7 @@ MusicAlbum( track_type: track, track_nr: Some(3), by_va: false, + unavailable: false, ), TrackItem( id: "0bcovdD1gQo", @@ -140,6 +144,7 @@ MusicAlbum( track_type: track, track_nr: Some(4), by_va: false, + unavailable: false, ), TrackItem( id: "lJsqxERcxR8", @@ -161,6 +166,7 @@ MusicAlbum( track_type: track, track_nr: Some(5), by_va: false, + unavailable: false, ), TrackItem( id: "iLfB6-slQdc", @@ -182,6 +188,7 @@ MusicAlbum( track_type: track, track_nr: Some(6), by_va: false, + unavailable: false, ), TrackItem( id: "4DjGZIdMcZk", @@ -203,6 +210,7 @@ MusicAlbum( track_type: track, track_nr: Some(7), by_va: false, + unavailable: false, ), TrackItem( id: "hakoZyX4QIc", @@ -224,6 +232,7 @@ MusicAlbum( track_type: track, track_nr: Some(8), by_va: false, + unavailable: false, ), TrackItem( id: "GOh96GiHVgI", @@ -245,6 +254,7 @@ MusicAlbum( track_type: track, track_nr: Some(9), by_va: false, + unavailable: false, ), TrackItem( id: "ne_jRAHABx0", @@ -266,6 +276,7 @@ MusicAlbum( track_type: track, track_nr: Some(10), by_va: false, + unavailable: false, ), TrackItem( id: "g8oyC2g5V64", @@ -287,6 +298,7 @@ MusicAlbum( track_type: track, track_nr: Some(11), by_va: false, + unavailable: false, ), TrackItem( id: "RxTEv7wXvG0", @@ -308,6 +320,7 @@ MusicAlbum( track_type: track, track_nr: Some(12), by_va: false, + unavailable: false, ), TrackItem( id: "V8iVLlSZeNs", @@ -329,6 +342,7 @@ MusicAlbum( track_type: track, track_nr: Some(13), by_va: false, + unavailable: false, ), TrackItem( id: "OESslKlpao4", @@ -350,6 +364,7 @@ MusicAlbum( track_type: track, track_nr: Some(14), by_va: false, + unavailable: false, ), TrackItem( id: "ennw5cHAebo", @@ -371,6 +386,7 @@ MusicAlbum( track_type: track, track_nr: Some(15), by_va: false, + unavailable: false, ), ], variants: [], diff --git a/tests/snapshots/youtube__music_album_show.snap b/tests/snapshots/youtube__music_album_show.snap index b91af31..dbd2c04 100644 --- a/tests/snapshots/youtube__music_album_show.snap +++ b/tests/snapshots/youtube__music_album_show.snap @@ -22,6 +22,7 @@ MusicAlbum( album_type: show, year: Some(2015), by_va: false, + track_count: 27, tracks: [ TrackItem( id: "ZIjGPc6vG0Y", @@ -47,6 +48,7 @@ MusicAlbum( track_type: track, track_nr: Some(1), by_va: false, + unavailable: false, ), TrackItem( id: "Wqrg6ceVgK8", @@ -72,6 +74,7 @@ MusicAlbum( track_type: track, track_nr: Some(2), by_va: false, + unavailable: false, ), TrackItem( id: "oWlZR0mU3fQ", @@ -97,6 +100,7 @@ MusicAlbum( track_type: track, track_nr: Some(3), by_va: false, + unavailable: false, ), TrackItem( id: "pcdWTaNK_w4", @@ -122,6 +126,7 @@ MusicAlbum( track_type: track, track_nr: Some(4), by_va: false, + unavailable: false, ), TrackItem( id: "hJhcL8A4AEI", @@ -147,6 +152,7 @@ MusicAlbum( track_type: track, track_nr: Some(5), by_va: false, + unavailable: false, ), TrackItem( id: "ROwmS2PzXiE", @@ -172,6 +178,7 @@ MusicAlbum( track_type: track, track_nr: Some(6), by_va: false, + unavailable: false, ), TrackItem( id: "u5fduXogSKU", @@ -197,6 +204,7 @@ MusicAlbum( track_type: track, track_nr: Some(7), by_va: false, + unavailable: false, ), TrackItem( id: "37aeBkbW5Y4", @@ -222,6 +230,7 @@ MusicAlbum( track_type: track, track_nr: Some(8), by_va: false, + unavailable: false, ), TrackItem( id: "Hn2701yNst0", @@ -247,6 +256,7 @@ MusicAlbum( track_type: track, track_nr: Some(9), by_va: false, + unavailable: false, ), TrackItem( id: "dQiTv0BdwwA", @@ -272,6 +282,7 @@ MusicAlbum( track_type: track, track_nr: Some(10), by_va: false, + unavailable: false, ), TrackItem( id: "DXYXlAljscM", @@ -297,6 +308,7 @@ MusicAlbum( track_type: track, track_nr: Some(11), by_va: false, + unavailable: false, ), TrackItem( id: "mfbmff4MQ2M", @@ -322,6 +334,7 @@ MusicAlbum( track_type: track, track_nr: Some(12), by_va: false, + unavailable: false, ), TrackItem( id: "mHkR5PHlHpQ", @@ -347,6 +360,7 @@ MusicAlbum( track_type: track, track_nr: Some(13), by_va: false, + unavailable: false, ), TrackItem( id: "VBnKIZ1b5Cg", @@ -372,6 +386,7 @@ MusicAlbum( track_type: track, track_nr: Some(14), by_va: false, + unavailable: false, ), TrackItem( id: "1iOIPRlLFgM", @@ -397,6 +412,7 @@ MusicAlbum( track_type: track, track_nr: Some(15), by_va: false, + unavailable: false, ), TrackItem( id: "z1nDiIcnxoM", @@ -422,6 +438,7 @@ MusicAlbum( track_type: track, track_nr: Some(16), by_va: false, + unavailable: false, ), TrackItem( id: "TNpe9wfbW9U", @@ -447,6 +464,7 @@ MusicAlbum( track_type: track, track_nr: Some(17), by_va: false, + unavailable: false, ), TrackItem( id: "9FtXAfifarI", @@ -472,6 +490,7 @@ MusicAlbum( track_type: track, track_nr: Some(18), by_va: false, + unavailable: false, ), TrackItem( id: "bRG8YR7ZBtI", @@ -497,6 +516,7 @@ MusicAlbum( track_type: track, track_nr: Some(19), by_va: false, + unavailable: false, ), TrackItem( id: "wYV9GxkHdRE", @@ -522,6 +542,7 @@ MusicAlbum( track_type: track, track_nr: Some(20), by_va: false, + unavailable: false, ), TrackItem( id: "wbrz2yUKiwo", @@ -547,6 +568,7 @@ MusicAlbum( track_type: track, track_nr: Some(21), by_va: false, + unavailable: false, ), TrackItem( id: "_MUx8LqzuY8", @@ -572,6 +594,7 @@ MusicAlbum( track_type: track, track_nr: Some(22), by_va: false, + unavailable: false, ), TrackItem( id: "s0xXo8ftgCA", @@ -597,6 +620,7 @@ MusicAlbum( track_type: track, track_nr: Some(23), by_va: false, + unavailable: false, ), TrackItem( id: "6Q_etK9rgV8", @@ -622,6 +646,7 @@ MusicAlbum( track_type: track, track_nr: Some(24), by_va: false, + unavailable: false, ), TrackItem( id: "4pwRZBhZH6Y", @@ -647,6 +672,7 @@ MusicAlbum( track_type: track, track_nr: Some(25), by_va: false, + unavailable: false, ), TrackItem( id: "O75q5a1s02E", @@ -672,6 +698,7 @@ MusicAlbum( track_type: track, track_nr: Some(26), by_va: false, + unavailable: false, ), TrackItem( id: "KSD9dI_ZgPQ", @@ -697,6 +724,7 @@ MusicAlbum( track_type: track, track_nr: Some(27), by_va: false, + unavailable: false, ), ], variants: [], diff --git a/tests/snapshots/youtube__music_album_single.snap b/tests/snapshots/youtube__music_album_single.snap index e650e4c..570a89b 100644 --- a/tests/snapshots/youtube__music_album_single.snap +++ b/tests/snapshots/youtube__music_album_single.snap @@ -22,6 +22,7 @@ MusicAlbum( album_type: single, year: Some(2020), by_va: false, + track_count: 1, tracks: [ TrackItem( id: "VU6lEv0PKAo", @@ -47,6 +48,7 @@ MusicAlbum( track_type: track, track_nr: Some(1), by_va: false, + unavailable: false, ), ], variants: [], diff --git a/tests/snapshots/youtube__music_album_unavailable.snap b/tests/snapshots/youtube__music_album_unavailable.snap index 607c137..e80ce2b 100644 --- a/tests/snapshots/youtube__music_album_unavailable.snap +++ b/tests/snapshots/youtube__music_album_unavailable.snap @@ -26,6 +26,7 @@ MusicAlbum( album_type: album, year: Some(2019), by_va: false, + track_count: 18, tracks: [ TrackItem( id: "R3VIKRtzAdE", @@ -47,6 +48,7 @@ MusicAlbum( track_type: track, track_nr: Some(1), by_va: false, + unavailable: false, ), TrackItem( id: "t0v0UOgOt18", @@ -68,6 +70,7 @@ MusicAlbum( track_type: track, track_nr: Some(2), by_va: false, + unavailable: false, ), TrackItem( id: "HjJYAkUXrxI", @@ -89,10 +92,33 @@ MusicAlbum( track_type: track, track_nr: Some(3), by_va: false, + unavailable: false, + ), + TrackItem( + id: "d53Dhq4_VvA", + name: "Severed", + duration: Some(244), + cover: [], + artists: [ + ArtistId( + id: None, + name: "The Decemberists", + ), + ], + artist_id: None, + album: Some(AlbumId( + id: "MPREb_AzuWg8qAVVl", + name: "13 Reasons Why (Season 3)", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(4), + by_va: false, + unavailable: true, ), TrackItem( id: "Hg0KUOTL06I", - name: "Swim Home", + name: "SWIM HOME", duration: Some(187), cover: [], artists: [ @@ -110,6 +136,7 @@ MusicAlbum( track_type: track, track_nr: Some(5), by_va: false, + unavailable: false, ), TrackItem( id: "c8AfY6yhdkM", @@ -131,6 +158,7 @@ MusicAlbum( track_type: track, track_nr: Some(6), by_va: false, + unavailable: false, ), TrackItem( id: "_ZmdHjVvwhc", @@ -152,6 +180,7 @@ MusicAlbum( track_type: track, track_nr: Some(7), by_va: false, + unavailable: false, ), TrackItem( id: "wBe1Zi3q1n8", @@ -173,6 +202,7 @@ MusicAlbum( track_type: track, track_nr: Some(8), by_va: false, + unavailable: false, ), TrackItem( id: "l8Pj8s9uPGc", @@ -194,6 +224,29 @@ MusicAlbum( track_type: track, track_nr: Some(9), by_va: false, + unavailable: false, + ), + TrackItem( + id: "2ZbW3zfLfXo", + name: "Young Forever", + duration: Some(244), + cover: [], + artists: [ + ArtistId( + id: None, + name: "JR JR", + ), + ], + artist_id: None, + album: Some(AlbumId( + id: "MPREb_AzuWg8qAVVl", + name: "13 Reasons Why (Season 3)", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(10), + by_va: false, + unavailable: true, ), TrackItem( id: "Kn3cruxYj0c", @@ -215,6 +268,7 @@ MusicAlbum( track_type: track, track_nr: Some(11), by_va: false, + unavailable: false, ), TrackItem( id: "Sy1lIOl1YN0", @@ -236,6 +290,7 @@ MusicAlbum( track_type: track, track_nr: Some(12), by_va: false, + unavailable: false, ), TrackItem( id: "njdlNT1RRo4", @@ -257,6 +312,95 @@ MusicAlbum( track_type: track, track_nr: Some(13), by_va: false, + unavailable: false, + ), + TrackItem( + id: "bANUH8SNV4E", + name: "SLAVES OF FEAR", + duration: Some(294), + cover: [], + artists: [ + ArtistId( + id: None, + name: "HEALTH", + ), + ], + artist_id: None, + album: Some(AlbumId( + id: "MPREb_AzuWg8qAVVl", + name: "13 Reasons Why (Season 3)", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(14), + by_va: false, + unavailable: true, + ), + TrackItem( + id: "jn7fJSTUbUM", + name: "All Your Life", + duration: Some(266), + cover: [], + artists: [ + ArtistId( + id: None, + name: "Angelo De Augustine", + ), + ], + artist_id: None, + album: Some(AlbumId( + id: "MPREb_AzuWg8qAVVl", + name: "13 Reasons Why (Season 3)", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(15), + by_va: false, + unavailable: true, + ), + TrackItem( + id: "-MCzjr9LSIA", + name: "Culture", + duration: Some(194), + cover: [], + artists: [ + ArtistId( + id: None, + name: "Hembree", + ), + ], + artist_id: None, + album: Some(AlbumId( + id: "MPREb_AzuWg8qAVVl", + name: "13 Reasons Why (Season 3)", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(16), + by_va: false, + unavailable: true, + ), + TrackItem( + id: "StZKjRiFtOQ", + name: "Still Want To Be Here", + duration: Some(233), + cover: [], + artists: [ + ArtistId( + id: None, + name: "Frightened Rabbit", + ), + ], + artist_id: None, + album: Some(AlbumId( + id: "MPREb_AzuWg8qAVVl", + name: "13 Reasons Why (Season 3)", + )), + view_count: "[view_count]", + track_type: track, + track_nr: Some(17), + by_va: false, + unavailable: true, ), TrackItem( id: "Si-CXM8CHqQ", @@ -278,6 +422,7 @@ MusicAlbum( track_type: track, track_nr: Some(18), by_va: false, + unavailable: false, ), ], variants: [], diff --git a/tests/snapshots/youtube__music_album_various_artists.snap b/tests/snapshots/youtube__music_album_various_artists.snap index f3ab8f0..769dde5 100644 --- a/tests/snapshots/youtube__music_album_various_artists.snap +++ b/tests/snapshots/youtube__music_album_various_artists.snap @@ -13,6 +13,7 @@ MusicAlbum( album_type: single, year: Some(2022), by_va: true, + track_count: 6, tracks: [ TrackItem( id: "Tzai7JXo45w", @@ -34,6 +35,7 @@ MusicAlbum( track_type: track, track_nr: Some(1), by_va: false, + unavailable: false, ), TrackItem( id: "9WYpLYAEub0", @@ -55,6 +57,7 @@ MusicAlbum( track_type: track, track_nr: Some(2), by_va: false, + unavailable: false, ), TrackItem( id: "R48tE237bW4", @@ -76,6 +79,7 @@ MusicAlbum( track_type: track, track_nr: Some(3), by_va: false, + unavailable: false, ), TrackItem( id: "-UzsoR6z-vg", @@ -97,6 +101,7 @@ MusicAlbum( track_type: track, track_nr: Some(4), by_va: false, + unavailable: false, ), TrackItem( id: "kbNVyn8Ex28", @@ -118,6 +123,7 @@ MusicAlbum( track_type: track, track_nr: Some(5), by_va: false, + unavailable: false, ), TrackItem( id: "NJrQZUzWP5Y", @@ -139,6 +145,7 @@ MusicAlbum( track_type: track, track_nr: Some(6), by_va: false, + unavailable: false, ), ], variants: [], diff --git a/tests/snapshots/youtube__music_artist_basic.snap b/tests/snapshots/youtube__music_artist_basic.snap index e025c9d..d73c2a2 100644 --- a/tests/snapshots/youtube__music_artist_basic.snap +++ b/tests/snapshots/youtube__music_artist_basic.snap @@ -42,8 +42,8 @@ MusicArtist( by_va: false, ), AlbumItem( - id: "MPREb_6PEkIQE7sWY", - name: "An deiner Seite (Online Version)", + id: "MPREb_HrCgErOdgCv", + name: "Freiheit", cover: "[cover]", artists: [ ArtistId( @@ -52,8 +52,8 @@ MusicArtist( ), ], artist_id: Some("UC7cl4MmM6ZZ2TcFyMk_b4pg"), - album_type: ep, - year: Some(2008), + album_type: album, + year: Some(2004), by_va: false, ), AlbumItem( @@ -87,8 +87,8 @@ MusicArtist( by_va: false, ), AlbumItem( - id: "MPREb_QEClJsuO9xM", - name: "So wie Du warst", + id: "MPREb_Oq0WKqNwSVY", + name: "Das 2. Gebot", cover: "[cover]", artists: [ ArtistId( @@ -97,23 +97,8 @@ MusicArtist( ), ], artist_id: Some("UC7cl4MmM6ZZ2TcFyMk_b4pg"), - album_type: single, - year: Some(2012), - by_va: false, - ), - AlbumItem( - id: "MPREb_QyGCcLWExXj", - name: "Als wär\'s das erste Mal (Exklusive Piano Version)", - cover: "[cover]", - artists: [ - ArtistId( - id: Some("UC7cl4MmM6ZZ2TcFyMk_b4pg"), - name: "Unheilig", - ), - ], - artist_id: Some("UC7cl4MmM6ZZ2TcFyMk_b4pg"), - album_type: single, - year: Some(2014), + album_type: album, + year: Some(2003), by_va: false, ), AlbumItem( @@ -161,6 +146,21 @@ MusicArtist( year: Some(2017), by_va: false, ), + AlbumItem( + id: "MPREb_UA3c5UyVGYs", + name: "Geboren um zu leben", + cover: "[cover]", + artists: [ + ArtistId( + id: Some("UC7cl4MmM6ZZ2TcFyMk_b4pg"), + name: "Unheilig", + ), + ], + artist_id: Some("UC7cl4MmM6ZZ2TcFyMk_b4pg"), + album_type: single, + year: Some(2025), + by_va: false, + ), AlbumItem( id: "MPREb_V0FEmw2pj2u", name: "Sonnentag", @@ -251,6 +251,21 @@ MusicArtist( year: Some(2015), by_va: false, ), + AlbumItem( + id: "MPREb_ohcGTZrqKPZ", + name: "Zelluloid", + cover: "[cover]", + artists: [ + ArtistId( + id: Some("UC7cl4MmM6ZZ2TcFyMk_b4pg"), + name: "Unheilig", + ), + ], + artist_id: Some("UC7cl4MmM6ZZ2TcFyMk_b4pg"), + album_type: album, + year: Some(2004), + by_va: false, + ), AlbumItem( id: "MPREb_pWpeXxATZYb", name: "Wir sind alle wie eins", @@ -266,21 +281,6 @@ MusicArtist( year: Some(2014), by_va: false, ), - AlbumItem( - id: "MPREb_rHhaDLqalbT", - name: "Winter (EP)", - cover: "[cover]", - artists: [ - ArtistId( - id: Some("UC7cl4MmM6ZZ2TcFyMk_b4pg"), - name: "Unheilig", - ), - ], - artist_id: Some("UC7cl4MmM6ZZ2TcFyMk_b4pg"), - album_type: ep, - year: Some(2010), - by_va: false, - ), AlbumItem( id: "MPREb_saXgTKNPaSu", name: "Zeit zu gehen", diff --git a/tests/snapshots/youtube__music_artist_basic_all.snap b/tests/snapshots/youtube__music_artist_basic_all.snap index 2fd25a1..aef63a7 100644 --- a/tests/snapshots/youtube__music_artist_basic_all.snap +++ b/tests/snapshots/youtube__music_artist_basic_all.snap @@ -146,21 +146,6 @@ MusicArtist( year: Some(2015), by_va: false, ), - AlbumItem( - id: "MPREb_ghrNI6BJSM8", - name: "Friends And Family", - cover: "[cover]", - artists: [ - ArtistId( - id: Some("UCFKUUtHjT4iq3p0JJA13SOA"), - name: "Every Time I Die", - ), - ], - artist_id: Some("UCFKUUtHjT4iq3p0JJA13SOA"), - album_type: album, - year: Some(2017), - by_va: false, - ), AlbumItem( id: "MPREb_h0UZr2ALQXf", name: "From Parts Unknown (Deluxe Edition)", diff --git a/tests/snapshots/youtube__music_details_mv.snap b/tests/snapshots/youtube__music_details_mv.snap index afbd05f..8fa7abf 100644 --- a/tests/snapshots/youtube__music_details_mv.snap +++ b/tests/snapshots/youtube__music_details_mv.snap @@ -20,6 +20,7 @@ TrackDetails( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), lyrics_id: Some("MPLYt_wrKjTn9hmry"), related_id: Some("MPTRt_wrKjTn9hmry"), diff --git a/tests/snapshots/youtube__music_details_track.snap b/tests/snapshots/youtube__music_details_track.snap index 4d85918..ef6ff9c 100644 --- a/tests/snapshots/youtube__music_details_track.snap +++ b/tests/snapshots/youtube__music_details_track.snap @@ -27,6 +27,7 @@ TrackDetails( track_type: track, track_nr: None, by_va: false, + unavailable: false, ), lyrics_id: Some("MPLYt_cjEzeaBgZAq-2"), related_id: Some("MPTRt_cjEzeaBgZAq-2"), diff --git a/tests/snapshots/youtube__music_details_track_details.snap b/tests/snapshots/youtube__music_details_track_details.snap index e91052f..b506083 100644 --- a/tests/snapshots/youtube__music_details_track_details.snap +++ b/tests/snapshots/youtube__music_details_track_details.snap @@ -20,6 +20,7 @@ TrackDetails( track_type: video, track_nr: None, by_va: false, + unavailable: false, ), lyrics_id: None, related_id: None, diff --git a/tests/youtube.rs b/tests/youtube.rs index 140770a..d8e60f9 100644 --- a/tests/youtube.rs +++ b/tests/youtube.rs @@ -5,7 +5,7 @@ use std::fmt::Display; use std::str::FromStr; use rstest::{fixture, rstest}; -use rustypipe::model::{HistoryItem, TrackItem, TrackType, VideoItem}; +use rustypipe::model::TrackType; use rustypipe::param::{AlbumOrder, LANGUAGES}; use time::{macros::date, OffsetDateTime}; @@ -27,10 +27,10 @@ use rustypipe::validate; //#PLAYER #[rstest] -#[case::desktop(ClientType::Desktop)] +// #[case::desktop(ClientType::Desktop)] TODO: add SABR support #[case::tv(ClientType::Tv)] #[case::mobile(ClientType::Mobile)] -#[case::android(ClientType::Android)] +// #[case::android(ClientType::Android)] Removed since it requires Android device attestation #[case::ios(ClientType::Ios)] #[tokio::test] async fn get_player_from_client(#[case] client_type: ClientType, rp: RustyPipe) { @@ -40,8 +40,6 @@ async fn get_player_from_client(#[case] client_type: ClientType, rp: RustyPipe) .await .unwrap(); - // dbg!(&player_data); - assert_eq!(player_data.details.id, "n4tK7LYFxI0"); assert_eq!(player_data.details.duration, 259); assert!(!player_data.details.thumbnail.is_empty()); @@ -482,8 +480,6 @@ async fn playlist_not_found(rp: RustyPipe) { async fn get_video_details(rp: RustyPipe) { let details = rp.query().video_details("ZeerrnuLi5E").await.unwrap(); - // dbg!(&details); - assert_eq!(details.id, "ZeerrnuLi5E"); assert_eq!(details.name, "aespa 에스파 'Black Mamba' MV"); let desc = details.description.to_plaintext(); @@ -519,8 +515,6 @@ async fn get_video_details(rp: RustyPipe) { async fn get_video_details_music(rp: RustyPipe) { let details = rp.query().video_details("XuM2onMGvTI").await.unwrap(); - // dbg!(&details); - assert_eq!(details.id, "XuM2onMGvTI"); assert_eq!(details.name, "Gäa"); let desc = details.description.to_plaintext(); @@ -557,8 +551,6 @@ async fn get_video_details_music(rp: RustyPipe) { async fn get_video_details_ccommons(rp: RustyPipe) { let details = rp.query().video_details("0rb9CfOvojk").await.unwrap(); - // dbg!(&details); - assert_eq!(details.id, "0rb9CfOvojk"); assert_eq!( details.name, @@ -597,8 +589,6 @@ async fn get_video_details_ccommons(rp: RustyPipe) { async fn get_video_details_chapters(rp: RustyPipe) { let details = rp.query().video_details("nFDBxBUfE74").await.unwrap(); - // dbg!(&details); - assert_eq!(details.id, "nFDBxBUfE74"); assert_eq!(details.name, "The Prepper PC"); let desc = details.description.to_plaintext(); @@ -717,8 +707,6 @@ async fn get_video_details_chapters(rp: RustyPipe) { async fn get_video_details_live(rp: RustyPipe) { let details = rp.query().video_details("jfKfPfyJRdk").await.unwrap(); - // dbg!(&details); - assert_eq!(details.id, "jfKfPfyJRdk"); assert_eq!( details.name, @@ -733,7 +721,7 @@ async fn get_video_details_live(rp: RustyPipe) { assert_eq!(details.channel.id, "UCSJ4gkVC6NrvII8umztf0Ow"); assert_eq!(details.channel.name, "Lofi Girl"); assert!(!details.channel.avatar.is_empty(), "no channel avatars"); - assert_eq!(details.channel.verification, Verification::Verified); + assert_eq!(details.channel.verification, Verification::Artist); assert_gteo(details.channel.subscriber_count, 5_500_000, "subscribers"); assert_gte(details.view_count, 100, "views"); assert_gteo(details.like_count, 1_800_000, "likes"); @@ -759,8 +747,6 @@ async fn get_video_details_live(rp: RustyPipe) { async fn get_video_details_agelimit(rp: RustyPipe) { let details = rp.query().video_details("ZDKQmBWTRnw").await.unwrap(); - // dbg!(&details); - assert_eq!(details.id, "ZDKQmBWTRnw"); assert_eq!( details.name, @@ -864,7 +850,6 @@ async fn channel_videos(rp: RustyPipe) { .await .unwrap(); - // dbg!(&channel); assert_channel_eevblog(&channel); assert!( @@ -890,7 +875,6 @@ async fn channel_shorts(rp: RustyPipe) { .await .unwrap(); - // dbg!(&channel); assert_eq!(channel.id, "UCh8gHdtzO2tXd593_bjErWg"); assert_eq!(channel.name, "Doobydobap"); assert_eq!(channel.handle.as_deref(), Some("@Doobydobap")); @@ -919,7 +903,6 @@ async fn channel_livestreams(rp: RustyPipe) { .await .unwrap(); - // dbg!(&channel); assert_channel_eevblog(&channel); assert!( @@ -2136,10 +2119,12 @@ async fn music_search_artists(rp: RustyPipe, unlocalized: bool) { #[rstest] #[tokio::test] async fn music_search_artists_cont(rp: RustyPipe) { - let res = rp.query().music_search_artists("boys").await.unwrap(); + let res = rp.query().music_search_artists("girls").await.unwrap(); assert_eq!(res.corrected_query, None); - assert_next(res.items, rp.query(), 15, 2, true).await; + if !res.items.is_exhausted() { + assert_next(res.items, rp.query(), 15, 2, true).await; + } } #[rstest] @@ -2522,17 +2507,17 @@ async fn music_radio_not_found(rp: RustyPipe) { #[tokio::test] async fn music_charts( #[case] country: Country, - #[case] plid_top: &str, - #[case] plid_trend: &str, + #[case] _plid_top: &str, + #[case] _plid_trend: &str, rp: RustyPipe, ) { let charts = rp.query().music_charts(Some(country)).await.unwrap(); - assert_eq!(charts.top_playlist_id.expect("top_playlist_id"), plid_top); - - assert_gte(charts.top_tracks.len(), 30, "top tracks"); + // assert_eq!(charts.top_playlist_id.expect("top_playlist_id"), plid_top); + // assert_gte(charts.top_tracks.len(), 30, "top tracks"); assert_gte(charts.artists.len(), 30, "top artists"); + /* // Currently (01.02.2024) is no trending playlist shown for Global and US if country != Country::Us { assert_eq!( @@ -2541,6 +2526,7 @@ async fn music_charts( ); assert_gte(charts.trending_tracks.len(), 15, "trending tracks"); } + */ // Chart playlists only available in USA if country == Country::Us { @@ -2611,7 +2597,7 @@ async fn music_genres(rp: RustyPipe, unlocalized: bool) { } #[rstest] -#[case::chill("ggMPOg1uX1JOQWZFeDByc2Jm", "Chill")] +#[case::party("ggMPOg1uX2w1aW1CRDFTSUNo", "Party")] #[case::pop("ggMPOg1uX1lMbVZmbzl6NlJ3", "Pop")] #[tokio::test] async fn music_genre(#[case] id: &str, #[case] name: &str, rp: RustyPipe, unlocalized: bool) { @@ -2655,7 +2641,7 @@ async fn music_genre(#[case] id: &str, #[case] name: &str, rp: RustyPipe, unloca let subgenres = check_music_genre(genre, id, name, unlocalized); - if name == "Chill" { + if name == "Party" { assert_gte(subgenres.len(), 2, "subgenres"); } @@ -2706,31 +2692,30 @@ async fn invalid_ctoken(#[case] ep: ContinuationEndpoint, rp: RustyPipe) { } /// YouTube Music allows searching for ISRC codes -/// This feature does not seem to work with all languages and it has changed in the past. -/// This test is used to check which languages are working #[rstest] #[tokio::test] async fn isrc_search_languages(rp: RustyPipe) { for lang in LANGUAGES { - // flaky for English, skipping for now - if matches!(lang, Language::En | Language::EnGb | Language::EnIn) { - continue; - } - let tracks = rp .query() .lang(lang) - .music_search_tracks("DEUM71602459") + .music_search_tracks("\"DEUM71602459\"") .await .unwrap(); - let working = tracks.items.items.iter().any(|t| t.id == "g0iRiJ_ck48"); - assert!(working, "lang: {lang}"); + let track_id = &tracks.items.items[0].id; + assert!( + track_id == "g0iRiJ_ck48" || track_id == "YgUZtELr_jw" || track_id == "oMhM4CFEY3I", + "lang: {lang}; track: {track_id}" + ); } } -mod cookie_auth { +#[cfg(feature = "userdata")] +mod user_data { use super::*; + use rustypipe::model::{HistoryItem, TrackItem, VideoItem}; + #[rstest] #[tokio::test] async fn history(rp: RustyPipe) { @@ -2814,6 +2799,30 @@ mod cookie_auth { let tracks = rp.query().music_liked_tracks().await.unwrap(); assert_next_items(tracks.tracks, rp.query(), 5).await; } + + /// Assert that the history paginator produces at least n items + async fn assert_next_history>( + paginator: Paginator>, + query: Q, + n_items: usize, + ) { + let mut p = paginator; + let query = query.as_ref(); + p.extend_limit(query, n_items).await.unwrap(); + assert_gte(p.items.len(), n_items, "items"); + } + + /// Assert that the music history paginator produces at least n items + async fn assert_next_music_history>( + paginator: Paginator>, + query: Q, + n_items: usize, + ) { + let mut p = paginator; + let query = query.as_ref(); + p.extend_limit(query, n_items).await.unwrap(); + assert_gte(p.items.len(), n_items, "items"); + } } #[rstest] @@ -2919,7 +2928,11 @@ async fn assert_next>( } for i in 0..n_pages { - p = p.next(query).await.unwrap().expect("paginator exhausted"); + match p.next(query).await.unwrap() { + Some(np) => p = np, + None => panic!("paginator exhausted after {i} pages"), + } + assert_gte( p.items.len(), min_items, @@ -2940,30 +2953,6 @@ async fn assert_next_items>( assert_gte(p.items.len(), n_items, "items"); } -/// Assert that the history paginator produces at least n items -async fn assert_next_history>( - paginator: Paginator>, - query: Q, - n_items: usize, -) { - let mut p = paginator; - let query = query.as_ref(); - p.extend_limit(query, n_items).await.unwrap(); - assert_gte(p.items.len(), n_items, "items"); -} - -/// Assert that the music history paginator produces at least n items -async fn assert_next_music_history>( - paginator: Paginator>, - query: Q, - n_items: usize, -) { - let mut p = paginator; - let query = query.as_ref(); - p.extend_limit(query, n_items).await.unwrap(); - assert_gte(p.items.len(), n_items, "items"); -} - #[track_caller] fn assert_frameset(frameset: &Frameset) { assert_gte(frameset.frame_height, 20, "frame height"); @@ -3025,10 +3014,6 @@ async fn all_send_and_sync() { rp.query() .drm_license("", rustypipe::model::DrmSystem::Widevine, "", "", &[]), ); - send_and_sync(rp.query().history()); - send_and_sync(rp.query().history_continuation("", None)); - send_and_sync(rp.query().history_search("")); - send_and_sync(rp.query().liked_videos()); send_and_sync(rp.query().music_album("")); send_and_sync(rp.query().music_artist("", false)); send_and_sync(rp.query().music_artist_albums("", None, None)); @@ -3037,9 +3022,6 @@ async fn all_send_and_sync() { send_and_sync(rp.query().music_details("")); send_and_sync(rp.query().music_genre("")); send_and_sync(rp.query().music_genres()); - send_and_sync(rp.query().music_history()); - send_and_sync(rp.query().music_history_continuation("", None)); - send_and_sync(rp.query().music_liked_tracks()); send_and_sync(rp.query().music_lyrics("")); send_and_sync(rp.query().music_new_albums()); send_and_sync(rp.query().music_new_videos()); @@ -3048,10 +3030,6 @@ async fn all_send_and_sync() { send_and_sync(rp.query().music_radio_playlist("")); send_and_sync(rp.query().music_radio_track("")); send_and_sync(rp.query().music_related("")); - send_and_sync(rp.query().music_saved_albums()); - send_and_sync(rp.query().music_saved_artists()); - send_and_sync(rp.query().music_saved_playlists()); - send_and_sync(rp.query().music_saved_tracks()); send_and_sync(rp.query().music_search::("", None)); send_and_sync(rp.query().music_search_albums("")); send_and_sync(rp.query().music_search_artists("")); @@ -3068,17 +3046,32 @@ async fn all_send_and_sync() { send_and_sync(rp.query().raw(ClientType::Desktop, "", "")); send_and_sync(rp.query().resolve_string("", false)); send_and_sync(rp.query().resolve_url("", false)); - send_and_sync(rp.query().saved_playlists()); send_and_sync(rp.query().search::("")); send_and_sync( rp.query() .search_filter::("", &SearchFilter::default()), ); send_and_sync(rp.query().search_suggestion("")); - send_and_sync(rp.query().subscription_feed()); - send_and_sync(rp.query().subscriptions()); send_and_sync(rp.query().trending()); send_and_sync(rp.query().video_comments("", None)); send_and_sync(rp.query().video_details("")); - send_and_sync(rp.query().watch_later()); + + #[cfg(feature = "userdata")] + { + send_and_sync(rp.query().history()); + send_and_sync(rp.query().history_continuation("", None)); + send_and_sync(rp.query().history_search("")); + send_and_sync(rp.query().liked_videos()); + send_and_sync(rp.query().watch_later()); + send_and_sync(rp.query().music_history()); + send_and_sync(rp.query().music_history_continuation("", None)); + send_and_sync(rp.query().music_saved_albums()); + send_and_sync(rp.query().music_saved_artists()); + send_and_sync(rp.query().music_saved_playlists()); + send_and_sync(rp.query().music_saved_tracks()); + send_and_sync(rp.query().saved_playlists()); + send_and_sync(rp.query().subscription_feed()); + send_and_sync(rp.query().subscriptions()); + send_and_sync(rp.query().music_liked_tracks()); + } }