diff --git a/Justfile b/Justfile index 7d48e2b..9bc4fd6 100644 --- a/Justfile +++ b/Justfile @@ -49,15 +49,16 @@ release crate="rustypipe": set -e CRATE="{{crate}}" + INCLUDES='--include-path README.md --include-path LICENSE --include-path Cargo.toml' CHANGELOG="CHANGELOG.md" if [ "$CRATE" = "rustypipe" ]; then - INCLUDES="--exclude-path 'notes/**' --exclude-path 'cli/**' --exclude-path 'downloader/**'" + INCLUDES="$INCLUDES --include-path 'src/**' --include-path 'tests/**' --include-path 'testfiles/**'" else if [ ! -d "$CRATE" ]; then echo "$CRATE does not exist."; exit 1 fi - INCLUDES="--include-path README.md --include-path LICENSE --include-path Cargo.toml --include-path '$CRATE/**'" + INCLUDES="$INCLUDES --include-path '$CRATE/**'" CHANGELOG="$CRATE/$CHANGELOG" CRATE="rustypipe-$CRATE" # Add crate name prefix fi diff --git a/src/serializer/snapshots/rustypipe__serializer__text__tests__t_attributed_description.snap b/src/serializer/snapshots/rustypipe__serializer__text__tests__t_attributed_description.snap index c4bf828..c47814b 100644 --- a/src/serializer/snapshots/rustypipe__serializer__text__tests__t_attributed_description.snap +++ b/src/serializer/snapshots/rustypipe__serializer__text__tests__t_attributed_description.snap @@ -26,7 +26,7 @@ SAttributed { }, }, Video { - text: "aespa 에스파 'Black Mamba' The Debut Stage", + text: "aespa 에스파 'Black ...", video_id: "Ky5RT5oGg0w", start_time: 0, vtype: Video, @@ -64,7 +64,7 @@ SAttributed { }, }, Web { - text: "YouTube: aespa", + text: "aespa", url: "https://www.youtube.com/c/aespa", }, Text { @@ -76,7 +76,7 @@ SAttributed { }, }, Web { - text: "Instagram: aespa_official", + text: "https://www.instagram.com/aespa_official", url: "https://www.youtube.com/redirect?event=video_description&redir_token=QUFFLUhqbE9FVEtZZkVLUExjdFBnZjZnZ19KNWRYOVZUd3xBQ3Jtc0tsbHpCa1hLTVJ6MEllczlzUEpoVi1IQ2F5NG1jMnlOT3p3bnlFeE80ZzlsaG5CUXlFQnFGTkMtN19DcVYzQkw3bVlVVmNwQlpYQWZnNGNsME45WE1WQ21sR3V1Z3k5RG9DUDE0VTZQTm53Mk9vTWhiOA&q=https%3A%2F%2Fwww.instagram.com%2Faespa_official&v=ZeerrnuLi5E", }, Text { @@ -88,7 +88,7 @@ SAttributed { }, }, Web { - text: "TikTok: aespa_official", + text: "https://www.tiktok.com/@aespa_official", url: "https://www.youtube.com/redirect?event=video_description&redir_token=QUFFLUhqbVdlSGk3eDd5U0dUVG16VFJCQnhKVFBEUUxMQXxBQ3Jtc0tuX3ZJbENNY1ZSN0FFemdxTFdlcTVvc3AwZE05NEFvRW5nOHpZWDUtZG9ORHBnT1JGc2UySDh3WWl3MU53VjFvbHRSdjdxMUlGM2Z6SmdaLTVaWWxhamJEems0Uld3MGlTT0Z0bkh5Y0hpcnY1aXptSQ&q=https%3A%2F%2Fwww.tiktok.com%2F%40aespa_official&v=ZeerrnuLi5E", }, Text { @@ -100,7 +100,7 @@ SAttributed { }, }, Web { - text: "Twitter: aespa_official", + text: "https://twitter.com/aespa_Official", url: "https://www.youtube.com/redirect?event=video_description&redir_token=QUFFLUhqa3lNcG1lMHkwSzNLQVBrUXFNTXl0N1hNa04wUXxBQ3Jtc0tubm1sQkdaVjNYR04xOHpJV3NxZVBpb3I5V1FVOHVFNC1uWE5vb211ZmZKYzhTZXZfbjlkY09fanBRdHpjUkdRVGJJYS0xZ3NBNkVZQVhWSS0xVDYwRlRzQ0J3ODQxNDE0ODAxd1Q0cG5icVlNWndscw&q=https%3A%2F%2Ftwitter.com%2Faespa_Official&v=ZeerrnuLi5E", }, Text { @@ -112,7 +112,7 @@ SAttributed { }, }, Web { - text: "Facebook: aespa.official", + text: "https://www.facebook.com/aespa.official", url: "https://www.youtube.com/redirect?event=video_description&redir_token=QUFFLUhqbjdBNG5yVEFwU0JMNGZaLUpQZ1ZoeGgwT0xOZ3xBQ3Jtc0tuRFdFNlJNV29PMThRNWo5MHZrREZ1ZU5oZlkxVmE4ZlU5STFCZW1mUFVSdXJ3VUQxUnNVVkUzLWJQMS1uRzVjdkRCV2ZxSWJ6cFNxRVVzejY0SDltZFZPc2xwS3ZPZGIxcFZ6cndIVkMtUjVtZ054cw&q=https%3A%2F%2Fwww.facebook.com%2Faespa.official&v=ZeerrnuLi5E", }, Text { diff --git a/src/serializer/text.rs b/src/serializer/text.rs index b708625..6f4cd5b 100644 --- a/src/serializer/text.rs +++ b/src/serializer/text.rs @@ -1,5 +1,7 @@ use std::convert::TryFrom; +use once_cell::sync::Lazy; +use regex::Regex; use serde::{Deserialize, Deserializer}; use serde_with::{serde_as, DefaultOnError, DeserializeAs, VecSkipError}; @@ -153,16 +155,12 @@ pub(crate) struct AttributedText { style_runs: Vec, } -#[serde_as] #[derive(Deserialize)] #[serde(rename_all = "camelCase")] struct CommandRun { start_index: usize, length: usize, on_tap: AttributedTextOnTap, - #[serde(default)] - #[serde_as(as = "DefaultOnError<_>")] - on_tap_options: Option, } #[derive(Deserialize)] @@ -202,18 +200,6 @@ struct AttributedTextOnTap { innertube_command: NavigationEndpoint, } -#[derive(Deserialize)] -#[serde(rename_all = "camelCase")] -struct AttributedTextOnTapOptions { - accessibility_info: AccessibilityInfo, -} - -#[derive(Deserialize)] -#[serde(rename_all = "camelCase")] -struct AccessibilityInfo { - accessibility_label: String, -} - struct AttributedTextRun { start_index: usize, length: usize, @@ -221,7 +207,7 @@ struct AttributedTextRun { } enum AttributedTextRunContent { - Link(NavigationEndpoint, Option), + Link(NavigationEndpoint), Style(Style), } @@ -244,12 +230,7 @@ impl From for AttributedTextRun { Self { start_index: value.start_index, length: value.length, - content: AttributedTextRunContent::Link( - value.on_tap.innertube_command, - value - .on_tap_options - .map(|o| o.accessibility_info.accessibility_label), - ), + content: AttributedTextRunContent::Link(value.on_tap.innertube_command), } } } @@ -400,7 +381,7 @@ impl<'de> DeserializeAs<'de, TextComponents> for AttributedText { components.push(TextComponent::new(txt_before)); } components.push(match run.content { - AttributedTextRunContent::Link(link, label) => { + AttributedTextRunContent::Link(link) => { // Trim link text: // 3xnbsp, (/ •), nbsp, Name, 2xnbsp // Channel: `\u{a0}\u{a0}\u{a0}/\u{a0}aespa\u{a0}\u{a0}` @@ -410,35 +391,10 @@ impl<'de> DeserializeAs<'de, TextComponents> for AttributedText { let txt_link = txt_run.trim(); let txt_link = txt_link.replace('\u{a0}', " "); - if let Some(txt_link) = txt_link.strip_prefix(['/', '•']) { - let txt_link = txt_link.trim_start(); - match (&link, label) { - (NavigationEndpoint::Url { .. }, Some(label)) => { - // Prefix chip-style web links with the service name from accessibility label - // Example: `Twitter: aespa_official` - if let Some(first_word) = label.split_whitespace().next() { - map_text_component( - format!("{first_word}: {txt_link}"), - Style::default(), - Some(link), - ) - } else { - map_text_component( - txt_link.to_owned(), - Style::default(), - Some(link), - ) - } - } - _ => map_text_component( - txt_link.to_owned(), - Style::default(), - Some(link), - ), - } - } else { - map_text_component(txt_link, Style::default(), Some(link)) - } + static LINK_PREFIX: Lazy = Lazy::new(|| Regex::new("^[/•] *").unwrap()); + let txt_link = LINK_PREFIX.replace(&txt_link, ""); + + map_text_component(txt_link.to_string(), Style::default(), Some(link)) } AttributedTextRunContent::Style(style) => { map_text_component(txt_run.to_string(), style, None) diff --git a/testfiles/text/attributed_description.json b/testfiles/text/attributed_description.json index f169c79..3dcbb04 100644 --- a/testfiles/text/attributed_description.json +++ b/testfiles/text/attributed_description.json @@ -1,1325 +1,346 @@ { - "ln": { - "content": "🎧Listen and download aespa's debut single \"Black Mamba\": https://smarturl.it/aespa_BlackMamba\n🐍The Debut Stage    • aespa 에스파 'Black Mamba' The Debut Stage  \n\n🎟️ aespa Showcase SYNK in LA! Tickets now on sale: https://www.ticketmaster.com/event/0A...\n\nSubscribe to aespa Official YouTube Channel!\nhttps://www.youtube.com/aespa?sub_con...\n\naespa official\n   / aespa  \n  / aespa_official  \n  / aespa_official  \n  / aespa_official  \n  / aespa.official  \nhttps://weibo.com/aespa\n\n#aespa #æspa #BlackMamba #블랙맘바 #에스파\naespa 에스파 'Black Mamba' MV ℗ SM Entertainment", - "commandRuns": [ - { - "startIndex": 58, - "length": 36, - "onTap": { - "innertubeCommand": { - "clickTrackingParams": "CBwQ040EGAMiEwjGtqeIuryFAxUvb3oFHcieCCxIkZeu3Of16vNl", - "commandMetadata": { - "webCommandMetadata": { - "url": "https://www.youtube.com/redirect?event=video_description&redir_token=QUFFLUhqbm1qRVVfQUlObURLcnFFQXBTUkJSOEpqWGIzUXxBQ3Jtc0tsNUJIYm5xdERxZk9rZEw3YlJzV0ZIYTNaSjU2a21PaFhNUmxzdjI5VE1VRWUyczZwYmtmQXh3QXV0eXlkMDgxRUJoNVMzRFZ6RlZ6MGdXeXdWQXFTTGY2ZHhFcUFqdExRQ21PYzNfWmlBaHhqYXVUdw&q=https%3A%2F%2Fsmarturl.it%2Faespa_BlackMamba&v=ZeerrnuLi5E", - "webPageType": "WEB_PAGE_TYPE_UNKNOWN", - "rootVe": 83769 - } - }, - "urlEndpoint": { - "url": "https://www.youtube.com/redirect?event=video_description&redir_token=QUFFLUhqbm1qRVVfQUlObURLcnFFQXBTUkJSOEpqWGIzUXxBQ3Jtc0tsNUJIYm5xdERxZk9rZEw3YlJzV0ZIYTNaSjU2a21PaFhNUmxzdjI5VE1VRWUyczZwYmtmQXh3QXV0eXlkMDgxRUJoNVMzRFZ6RlZ6MGdXeXdWQXFTTGY2ZHhFcUFqdExRQ21PYzNfWmlBaHhqYXVUdw&q=https%3A%2F%2Fsmarturl.it%2Faespa_BlackMamba&v=ZeerrnuLi5E", - "target": "TARGET_NEW_WINDOW", - "nofollow": true - } - } - } - }, - { - "startIndex": 113, - "length": 46, - "onTap": { - "innertubeCommand": { - "clickTrackingParams": "CBwQ040EGAMiEwjGtqeIuryFAxUvb3oFHcieCCw=", - "commandMetadata": { - "webCommandMetadata": { - "url": "/watch?v=Ky5RT5oGg0w&t=0s", - "webPageType": "WEB_PAGE_TYPE_WATCH", - "rootVe": 3832 - } - }, - "watchEndpoint": { - "videoId": "Ky5RT5oGg0w", - "startTimeSeconds": 0, - "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=2b2e514f9a06834c&ip=79.205.220.219&initcwndbps=1590000&mt=1712917030&oweuc=&pxtags=Cg4KAnR4Egg1MTExODU2NA&rxtags=Cg4KAnR4Egg1MTExODU2MQ%2CCg4KAnR4Egg1MTExODU2Mg%2CCg4KAnR4Egg1MTExODU2Mw%2CCg4KAnR4Egg1MTExODU2NA%2CCg4KAnR4Egg1MTExODU2NQ%2CCg4KAnR4Egg1MTExODU2Ng%2CCg4KAnR4Egg1MTExODU2Nw" - } - } - } - } - } - }, - "onTapOptions": { - "accessibilityInfo": { - "accessibilityLabel": "YouTube Channel Link: aespa 에스파 'Black Mamba' The Debut Stage" - } - } - }, - { - "startIndex": 213, - "length": 40, - "onTap": { - "innertubeCommand": { - "clickTrackingParams": "CBwQ040EGAMiEwjGtqeIuryFAxUvb3oFHcieCCxIkZeu3Of16vNl", - "commandMetadata": { - "webCommandMetadata": { - "url": "https://www.youtube.com/redirect?event=video_description&redir_token=QUFFLUhqbU1ObGNaRDZaRmo1X1ZjejBoeTRnWkxuVUJxZ3xBQ3Jtc0ttWk1BVVhaRXRfN1VYWXBqMHdaYURTRFJNcUZJVlY3a21wRHE2ZGZaclE3WUM5bEZWbmFfT0sxWTZHOVotWVh6U3YtVk94SlA5NkRFTnBPcHVCWDJhMGJRQlI3ZHN0MnJleHp0c2lEVWNxeW1jSDZuVQ&q=https%3A%2F%2Fwww.ticketmaster.com%2Fevent%2F0A005CCD9E871F6E&v=ZeerrnuLi5E", - "webPageType": "WEB_PAGE_TYPE_UNKNOWN", - "rootVe": 83769 - } - }, - "urlEndpoint": { - "url": "https://www.youtube.com/redirect?event=video_description&redir_token=QUFFLUhqbU1ObGNaRDZaRmo1X1ZjejBoeTRnWkxuVUJxZ3xBQ3Jtc0ttWk1BVVhaRXRfN1VYWXBqMHdaYURTRFJNcUZJVlY3a21wRHE2ZGZaclE3WUM5bEZWbmFfT0sxWTZHOVotWVh6U3YtVk94SlA5NkRFTnBPcHVCWDJhMGJRQlI3ZHN0MnJleHp0c2lEVWNxeW1jSDZuVQ&q=https%3A%2F%2Fwww.ticketmaster.com%2Fevent%2F0A005CCD9E871F6E&v=ZeerrnuLi5E", - "target": "TARGET_NEW_WINDOW", - "nofollow": true - } - } - } - }, - { - "startIndex": 300, - "length": 40, - "onTap": { - "innertubeCommand": { - "clickTrackingParams": "CBwQ040EGAMiEwjGtqeIuryFAxUvb3oFHcieCCw=", - "commandMetadata": { - "webCommandMetadata": { - "url": "https://www.youtube.com/aespa?sub_confirmation=1", - "webPageType": "WEB_PAGE_TYPE_UNKNOWN", - "rootVe": 83769 - } - }, - "urlEndpoint": { - "url": "https://www.youtube.com/aespa?sub_confirmation=1", - "nofollow": true - } - } - } - }, - { - "startIndex": 357, - "length": 12, - "onTap": { - "innertubeCommand": { - "clickTrackingParams": "CBwQ040EGAMiEwjGtqeIuryFAxUvb3oFHcieCCw=", - "commandMetadata": { - "webCommandMetadata": { - "url": "https://www.youtube.com/c/aespa", - "webPageType": "WEB_PAGE_TYPE_UNKNOWN", - "rootVe": 83769 - } - }, - "urlEndpoint": { - "url": "https://www.youtube.com/c/aespa", - "nofollow": true - } - } - }, - "onTapOptions": { - "accessibilityInfo": { - "accessibilityLabel": "YouTube Channel Link: aespa" - } - } - }, - { - "startIndex": 370, - "length": 20, - "onTap": { - "innertubeCommand": { - "clickTrackingParams": "CBwQ040EGAMiEwjGtqeIuryFAxUvb3oFHcieCCxIkZeu3Of16vNl", - "commandMetadata": { - "webCommandMetadata": { - "url": "https://www.youtube.com/redirect?event=video_description&redir_token=QUFFLUhqbE9FVEtZZkVLUExjdFBnZjZnZ19KNWRYOVZUd3xBQ3Jtc0tsbHpCa1hLTVJ6MEllczlzUEpoVi1IQ2F5NG1jMnlOT3p3bnlFeE80ZzlsaG5CUXlFQnFGTkMtN19DcVYzQkw3bVlVVmNwQlpYQWZnNGNsME45WE1WQ21sR3V1Z3k5RG9DUDE0VTZQTm53Mk9vTWhiOA&q=https%3A%2F%2Fwww.instagram.com%2Faespa_official&v=ZeerrnuLi5E", - "webPageType": "WEB_PAGE_TYPE_UNKNOWN", - "rootVe": 83769 - } - }, - "urlEndpoint": { - "url": "https://www.youtube.com/redirect?event=video_description&redir_token=QUFFLUhqbE9FVEtZZkVLUExjdFBnZjZnZ19KNWRYOVZUd3xBQ3Jtc0tsbHpCa1hLTVJ6MEllczlzUEpoVi1IQ2F5NG1jMnlOT3p3bnlFeE80ZzlsaG5CUXlFQnFGTkMtN19DcVYzQkw3bVlVVmNwQlpYQWZnNGNsME45WE1WQ21sR3V1Z3k5RG9DUDE0VTZQTm53Mk9vTWhiOA&q=https%3A%2F%2Fwww.instagram.com%2Faespa_official&v=ZeerrnuLi5E", - "target": "TARGET_NEW_WINDOW", - "nofollow": true - } - } - }, - "onTapOptions": { - "accessibilityInfo": { - "accessibilityLabel": "Instagram Channel Link: aespa_official" - } - } - }, - { - "startIndex": 391, - "length": 20, - "onTap": { - "innertubeCommand": { - "clickTrackingParams": "CBwQ040EGAMiEwjGtqeIuryFAxUvb3oFHcieCCxIkZeu3Of16vNl", - "commandMetadata": { - "webCommandMetadata": { - "url": "https://www.youtube.com/redirect?event=video_description&redir_token=QUFFLUhqbVdlSGk3eDd5U0dUVG16VFJCQnhKVFBEUUxMQXxBQ3Jtc0tuX3ZJbENNY1ZSN0FFemdxTFdlcTVvc3AwZE05NEFvRW5nOHpZWDUtZG9ORHBnT1JGc2UySDh3WWl3MU53VjFvbHRSdjdxMUlGM2Z6SmdaLTVaWWxhamJEems0Uld3MGlTT0Z0bkh5Y0hpcnY1aXptSQ&q=https%3A%2F%2Fwww.tiktok.com%2F%40aespa_official&v=ZeerrnuLi5E", - "webPageType": "WEB_PAGE_TYPE_UNKNOWN", - "rootVe": 83769 - } - }, - "urlEndpoint": { - "url": "https://www.youtube.com/redirect?event=video_description&redir_token=QUFFLUhqbVdlSGk3eDd5U0dUVG16VFJCQnhKVFBEUUxMQXxBQ3Jtc0tuX3ZJbENNY1ZSN0FFemdxTFdlcTVvc3AwZE05NEFvRW5nOHpZWDUtZG9ORHBnT1JGc2UySDh3WWl3MU53VjFvbHRSdjdxMUlGM2Z6SmdaLTVaWWxhamJEems0Uld3MGlTT0Z0bkh5Y0hpcnY1aXptSQ&q=https%3A%2F%2Fwww.tiktok.com%2F%40aespa_official&v=ZeerrnuLi5E", - "target": "TARGET_NEW_WINDOW", - "nofollow": true - } - } - }, - "onTapOptions": { - "accessibilityInfo": { - "accessibilityLabel": "TikTok Channel Link: aespa_official" - } - } - }, - { - "startIndex": 412, - "length": 20, - "onTap": { - "innertubeCommand": { - "clickTrackingParams": "CBwQ040EGAMiEwjGtqeIuryFAxUvb3oFHcieCCxIkZeu3Of16vNl", - "commandMetadata": { - "webCommandMetadata": { - "url": "https://www.youtube.com/redirect?event=video_description&redir_token=QUFFLUhqa3lNcG1lMHkwSzNLQVBrUXFNTXl0N1hNa04wUXxBQ3Jtc0tubm1sQkdaVjNYR04xOHpJV3NxZVBpb3I5V1FVOHVFNC1uWE5vb211ZmZKYzhTZXZfbjlkY09fanBRdHpjUkdRVGJJYS0xZ3NBNkVZQVhWSS0xVDYwRlRzQ0J3ODQxNDE0ODAxd1Q0cG5icVlNWndscw&q=https%3A%2F%2Ftwitter.com%2Faespa_Official&v=ZeerrnuLi5E", - "webPageType": "WEB_PAGE_TYPE_UNKNOWN", - "rootVe": 83769 - } - }, - "urlEndpoint": { - "url": "https://www.youtube.com/redirect?event=video_description&redir_token=QUFFLUhqa3lNcG1lMHkwSzNLQVBrUXFNTXl0N1hNa04wUXxBQ3Jtc0tubm1sQkdaVjNYR04xOHpJV3NxZVBpb3I5V1FVOHVFNC1uWE5vb211ZmZKYzhTZXZfbjlkY09fanBRdHpjUkdRVGJJYS0xZ3NBNkVZQVhWSS0xVDYwRlRzQ0J3ODQxNDE0ODAxd1Q0cG5icVlNWndscw&q=https%3A%2F%2Ftwitter.com%2Faespa_Official&v=ZeerrnuLi5E", - "target": "TARGET_NEW_WINDOW", - "nofollow": true - } - } - }, - "onTapOptions": { - "accessibilityInfo": { - "accessibilityLabel": "Twitter Channel Link: aespa_Official" - } - } - }, - { - "startIndex": 433, - "length": 20, - "onTap": { - "innertubeCommand": { - "clickTrackingParams": "CBwQ040EGAMiEwjGtqeIuryFAxUvb3oFHcieCCxIkZeu3Of16vNl", - "commandMetadata": { - "webCommandMetadata": { - "url": "https://www.youtube.com/redirect?event=video_description&redir_token=QUFFLUhqbjdBNG5yVEFwU0JMNGZaLUpQZ1ZoeGgwT0xOZ3xBQ3Jtc0tuRFdFNlJNV29PMThRNWo5MHZrREZ1ZU5oZlkxVmE4ZlU5STFCZW1mUFVSdXJ3VUQxUnNVVkUzLWJQMS1uRzVjdkRCV2ZxSWJ6cFNxRVVzejY0SDltZFZPc2xwS3ZPZGIxcFZ6cndIVkMtUjVtZ054cw&q=https%3A%2F%2Fwww.facebook.com%2Faespa.official&v=ZeerrnuLi5E", - "webPageType": "WEB_PAGE_TYPE_UNKNOWN", - "rootVe": 83769 - } - }, - "urlEndpoint": { - "url": "https://www.youtube.com/redirect?event=video_description&redir_token=QUFFLUhqbjdBNG5yVEFwU0JMNGZaLUpQZ1ZoeGgwT0xOZ3xBQ3Jtc0tuRFdFNlJNV29PMThRNWo5MHZrREZ1ZU5oZlkxVmE4ZlU5STFCZW1mUFVSdXJ3VUQxUnNVVkUzLWJQMS1uRzVjdkRCV2ZxSWJ6cFNxRVVzejY0SDltZFZPc2xwS3ZPZGIxcFZ6cndIVkMtUjVtZ054cw&q=https%3A%2F%2Fwww.facebook.com%2Faespa.official&v=ZeerrnuLi5E", - "target": "TARGET_NEW_WINDOW", - "nofollow": true - } - } - }, - "onTapOptions": { - "accessibilityInfo": { - "accessibilityLabel": "Facebook Channel Link: aespa.official" - } - } - }, - { - "startIndex": 454, - "length": 23, - "onTap": { - "innertubeCommand": { - "clickTrackingParams": "CBwQ040EGAMiEwjGtqeIuryFAxUvb3oFHcieCCxIkZeu3Of16vNl", - "commandMetadata": { - "webCommandMetadata": { - "url": "https://www.youtube.com/redirect?event=video_description&redir_token=QUFFLUhqbEtGMHB6eXBESW92aEVLc1FybkRwQU95eTh6UXxBQ3Jtc0tuWXc5d2JsTHFYcHExdy1FTDFyUV9wdU1DSmxELUxGSGlPMzhBdFVkblRSZkNLQzRaMEJGUGhYLWp4RU40YUVwV3N3ZUpRTVVKVDRiY19zeE5RUkt2dW5aUVcxcHBRQldCOTE3YktXSXZlSFJhRWRjdw&q=https%3A%2F%2Fweibo.com%2Faespa&v=ZeerrnuLi5E", - "webPageType": "WEB_PAGE_TYPE_UNKNOWN", - "rootVe": 83769 - } - }, - "urlEndpoint": { - "url": "https://www.youtube.com/redirect?event=video_description&redir_token=QUFFLUhqbEtGMHB6eXBESW92aEVLc1FybkRwQU95eTh6UXxBQ3Jtc0tuWXc5d2JsTHFYcHExdy1FTDFyUV9wdU1DSmxELUxGSGlPMzhBdFVkblRSZkNLQzRaMEJGUGhYLWp4RU40YUVwV3N3ZUpRTVVKVDRiY19zeE5RUkt2dW5aUVcxcHBRQldCOTE3YktXSXZlSFJhRWRjdw&q=https%3A%2F%2Fweibo.com%2Faespa&v=ZeerrnuLi5E", - "target": "TARGET_NEW_WINDOW", - "nofollow": true - } - } - } - }, - { - "startIndex": 479, - "length": 6, - "onTap": { - "innertubeCommand": { - "clickTrackingParams": "CHAQ3NcEGC8iEwjGtqeIuryFAxUvb3oFHcieCCw=", - "commandMetadata": { - "webCommandMetadata": { - "url": "/hashtag/aespa", - "webPageType": "WEB_PAGE_TYPE_BROWSE", - "rootVe": 6827, - "apiUrl": "/youtubei/v1/browse" - } - }, - "browseEndpoint": { - "browseId": "FEhashtag", - "params": "6gUJCgVhZXNwYRgB" - } - } - }, - "loggingDirectives": { - "trackingParams": "CHAQ3NcEGC8iEwjGtqeIuryFAxUvb3oFHcieCCw=", - "enableDisplayloggerExperiment": true - } - }, - { - "startIndex": 486, - "length": 5, - "onTap": { - "innertubeCommand": { - "clickTrackingParams": "CG8Q3NcEGDAiEwjGtqeIuryFAxUvb3oFHcieCCw=", - "commandMetadata": { - "webCommandMetadata": { - "url": "/hashtag/%C3%A6spa", - "webPageType": "WEB_PAGE_TYPE_BROWSE", - "rootVe": 6827, - "apiUrl": "/youtubei/v1/browse" - } - }, - "browseEndpoint": { - "browseId": "FEhashtag", - "params": "6gUJCgXDpnNwYRgB" - } - } - }, - "loggingDirectives": { - "trackingParams": "CG8Q3NcEGDAiEwjGtqeIuryFAxUvb3oFHcieCCw=", - "enableDisplayloggerExperiment": true - } - }, - { - "startIndex": 492, - "length": 11, - "onTap": { - "innertubeCommand": { - "clickTrackingParams": "CG4Q3NcEGDEiEwjGtqeIuryFAxUvb3oFHcieCCw=", - "commandMetadata": { - "webCommandMetadata": { - "url": "/hashtag/blackmamba", - "webPageType": "WEB_PAGE_TYPE_BROWSE", - "rootVe": 6827, - "apiUrl": "/youtubei/v1/browse" - } - }, - "browseEndpoint": { - "browseId": "FEhashtag", - "params": "6gUOCgpibGFja21hbWJhGAE%3D" - } - } - }, - "loggingDirectives": { - "trackingParams": "CG4Q3NcEGDEiEwjGtqeIuryFAxUvb3oFHcieCCw=", - "enableDisplayloggerExperiment": true - } - }, - { - "startIndex": 504, - "length": 5, - "onTap": { - "innertubeCommand": { - "clickTrackingParams": "CG0Q3NcEGDIiEwjGtqeIuryFAxUvb3oFHcieCCw=", - "commandMetadata": { - "webCommandMetadata": { - "url": "/hashtag/%EB%B8%94%EB%9E%99%EB%A7%98%EB%B0%94", - "webPageType": "WEB_PAGE_TYPE_BROWSE", - "rootVe": 6827, - "apiUrl": "/youtubei/v1/browse" - } - }, - "browseEndpoint": { - "browseId": "FEhashtag", - "params": "6gUQCgzruJTrnpnrp5jrsJQYAQ%3D%3D" - } - } - }, - "loggingDirectives": { - "trackingParams": "CG0Q3NcEGDIiEwjGtqeIuryFAxUvb3oFHcieCCw=", - "enableDisplayloggerExperiment": true - } - }, - { - "startIndex": 510, - "length": 4, - "onTap": { - "innertubeCommand": { - "clickTrackingParams": "CGwQ3NcEGDMiEwjGtqeIuryFAxUvb3oFHcieCCw=", - "commandMetadata": { - "webCommandMetadata": { - "url": "/hashtag/%EC%97%90%EC%8A%A4%ED%8C%8C", - "webPageType": "WEB_PAGE_TYPE_BROWSE", - "rootVe": 6827, - "apiUrl": "/youtubei/v1/browse" - } - }, - "browseEndpoint": { - "browseId": "FEhashtag", - "params": "6gUNCgnsl5DsiqTtjIwYAQ%3D%3D" - } - } - }, - "loggingDirectives": { - "trackingParams": "CGwQ3NcEGDMiEwjGtqeIuryFAxUvb3oFHcieCCw=", - "enableDisplayloggerExperiment": true - } - } - ], - "styleRuns": [ - { - "startIndex": 0, - "length": 58, - "styleRunExtensions": { - "styleRunColorMapExtension": { - "colorMap": [ - { - "key": "USER_INTERFACE_THEME_DARK", - "value": 4294967295 - }, - { - "key": "USER_INTERFACE_THEME_LIGHT", - "value": 4279440147 - } - ] - } - }, - "fontFamilyName": "Roboto" - }, - { - "startIndex": 58, - "length": 36, - "styleRunExtensions": { - "styleRunColorMapExtension": { - "colorMap": [ - { - "key": "USER_INTERFACE_THEME_DARK", - "value": 4282296063 - }, - { - "key": "USER_INTERFACE_THEME_LIGHT", - "value": 4278607828 - } - ] - } - }, - "fontFamilyName": "Roboto" - }, - { - "startIndex": 94, - "length": 19, - "styleRunExtensions": { - "styleRunColorMapExtension": { - "colorMap": [ - { - "key": "USER_INTERFACE_THEME_DARK", - "value": 4294967295 - }, - { - "key": "USER_INTERFACE_THEME_LIGHT", - "value": 4279440147 - } - ] - } - }, - "fontFamilyName": "Roboto" - }, - { - "startIndex": 113, - "length": 46, - "styleRunExtensions": { - "styleRunColorMapExtension": { - "colorMap": [ - { - "key": "USER_INTERFACE_THEME_LIGHT", - "value": 4279440147 - }, - { - "key": "USER_INTERFACE_THEME_DARK", - "value": 4294967295 - } - ] - } - } - }, - { - "startIndex": 159, - "length": 54, - "styleRunExtensions": { - "styleRunColorMapExtension": { - "colorMap": [ - { - "key": "USER_INTERFACE_THEME_DARK", - "value": 4294967295 - }, - { - "key": "USER_INTERFACE_THEME_LIGHT", - "value": 4279440147 - } - ] - } - }, - "fontFamilyName": "Roboto" - }, - { - "startIndex": 213, - "length": 40, - "styleRunExtensions": { - "styleRunColorMapExtension": { - "colorMap": [ - { - "key": "USER_INTERFACE_THEME_LIGHT", - "value": 4278607828 - }, - { - "key": "USER_INTERFACE_THEME_DARK", - "value": 4282296063 - } - ] - } - }, - "fontFamilyName": "Roboto" - }, - { - "startIndex": 253, - "length": 47, - "styleRunExtensions": { - "styleRunColorMapExtension": { - "colorMap": [ - { - "key": "USER_INTERFACE_THEME_LIGHT", - "value": 4279440147 - }, - { - "key": "USER_INTERFACE_THEME_DARK", - "value": 4294967295 - } - ] - } - }, - "fontFamilyName": "Roboto" - }, - { - "startIndex": 300, - "length": 40, - "styleRunExtensions": { - "styleRunColorMapExtension": { - "colorMap": [ - { - "key": "USER_INTERFACE_THEME_LIGHT", - "value": 4278607828 - }, - { - "key": "USER_INTERFACE_THEME_DARK", - "value": 4282296063 - } - ] - } - }, - "fontFamilyName": "Roboto" - }, - { - "startIndex": 340, - "length": 17, - "styleRunExtensions": { - "styleRunColorMapExtension": { - "colorMap": [ - { - "key": "USER_INTERFACE_THEME_LIGHT", - "value": 4279440147 - }, - { - "key": "USER_INTERFACE_THEME_DARK", - "value": 4294967295 - } - ] - } - }, - "fontFamilyName": "Roboto" - }, - { - "startIndex": 357, - "length": 12, - "styleRunExtensions": { - "styleRunColorMapExtension": { - "colorMap": [ - { - "key": "USER_INTERFACE_THEME_DARK", - "value": 4294967295 - }, - { - "key": "USER_INTERFACE_THEME_LIGHT", - "value": 4279440147 - } - ] - } - } - }, - { - "startIndex": 369, - "length": 1, - "styleRunExtensions": { - "styleRunColorMapExtension": { - "colorMap": [ - { - "key": "USER_INTERFACE_THEME_DARK", - "value": 4294967295 - }, - { - "key": "USER_INTERFACE_THEME_LIGHT", - "value": 4279440147 - } - ] - } - }, - "fontFamilyName": "Roboto" - }, - { - "startIndex": 370, - "length": 20, - "styleRunExtensions": { - "styleRunColorMapExtension": { - "colorMap": [ - { - "key": "USER_INTERFACE_THEME_LIGHT", - "value": 4279440147 - }, - { - "key": "USER_INTERFACE_THEME_DARK", - "value": 4294967295 - } - ] - } - } - }, - { - "startIndex": 390, - "length": 1, - "styleRunExtensions": { - "styleRunColorMapExtension": { - "colorMap": [ - { - "key": "USER_INTERFACE_THEME_LIGHT", - "value": 4279440147 - }, - { - "key": "USER_INTERFACE_THEME_DARK", - "value": 4294967295 - } - ] - } - }, - "fontFamilyName": "Roboto" - }, - { - "startIndex": 391, - "length": 20, - "styleRunExtensions": { - "styleRunColorMapExtension": { - "colorMap": [ - { - "key": "USER_INTERFACE_THEME_LIGHT", - "value": 4279440147 - }, - { - "key": "USER_INTERFACE_THEME_DARK", - "value": 4294967295 - } - ] - } - } - }, - { - "startIndex": 411, - "length": 1, - "styleRunExtensions": { - "styleRunColorMapExtension": { - "colorMap": [ - { - "key": "USER_INTERFACE_THEME_DARK", - "value": 4294967295 - }, - { - "key": "USER_INTERFACE_THEME_LIGHT", - "value": 4279440147 - } - ] - } - }, - "fontFamilyName": "Roboto" - }, - { - "startIndex": 412, - "length": 20, - "styleRunExtensions": { - "styleRunColorMapExtension": { - "colorMap": [ - { - "key": "USER_INTERFACE_THEME_DARK", - "value": 4294967295 - }, - { - "key": "USER_INTERFACE_THEME_LIGHT", - "value": 4279440147 - } - ] - } - } - }, - { - "startIndex": 432, - "length": 1, - "styleRunExtensions": { - "styleRunColorMapExtension": { - "colorMap": [ - { - "key": "USER_INTERFACE_THEME_LIGHT", - "value": 4279440147 - }, - { - "key": "USER_INTERFACE_THEME_DARK", - "value": 4294967295 - } - ] - } - }, - "fontFamilyName": "Roboto" - }, - { - "startIndex": 433, - "length": 20, - "styleRunExtensions": { - "styleRunColorMapExtension": { - "colorMap": [ - { - "key": "USER_INTERFACE_THEME_DARK", - "value": 4294967295 - }, - { - "key": "USER_INTERFACE_THEME_LIGHT", - "value": 4279440147 - } - ] - } - } - }, - { - "startIndex": 453, - "length": 1, - "styleRunExtensions": { - "styleRunColorMapExtension": { - "colorMap": [ - { - "key": "USER_INTERFACE_THEME_DARK", - "value": 4294967295 - }, - { - "key": "USER_INTERFACE_THEME_LIGHT", - "value": 4279440147 - } - ] - } - }, - "fontFamilyName": "Roboto" - }, - { - "startIndex": 454, - "length": 23, - "styleRunExtensions": { - "styleRunColorMapExtension": { - "colorMap": [ - { - "key": "USER_INTERFACE_THEME_LIGHT", - "value": 4278607828 - }, - { - "key": "USER_INTERFACE_THEME_DARK", - "value": 4282296063 - } - ] - } - }, - "fontFamilyName": "Roboto" - }, - { - "startIndex": 477, - "length": 2, - "styleRunExtensions": { - "styleRunColorMapExtension": { - "colorMap": [ - { - "key": "USER_INTERFACE_THEME_LIGHT", - "value": 4279440147 - }, - { - "key": "USER_INTERFACE_THEME_DARK", - "value": 4294967295 - } - ] - } - }, - "fontFamilyName": "Roboto" - }, - { - "startIndex": 479, - "length": 6, - "styleRunExtensions": { - "styleRunColorMapExtension": { - "colorMap": [ - { - "key": "USER_INTERFACE_THEME_DARK", - "value": 4282296063 - }, - { - "key": "USER_INTERFACE_THEME_LIGHT", - "value": 4278607828 - } - ] - } - }, - "fontFamilyName": "Roboto" - }, - { - "startIndex": 485, - "length": 1, - "styleRunExtensions": { - "styleRunColorMapExtension": { - "colorMap": [ - { - "key": "USER_INTERFACE_THEME_LIGHT", - "value": 4279440147 - }, - { - "key": "USER_INTERFACE_THEME_DARK", - "value": 4294967295 - } - ] - } - }, - "fontFamilyName": "Roboto" - }, - { - "startIndex": 486, - "length": 5, - "styleRunExtensions": { - "styleRunColorMapExtension": { - "colorMap": [ - { - "key": "USER_INTERFACE_THEME_LIGHT", - "value": 4278607828 - }, - { - "key": "USER_INTERFACE_THEME_DARK", - "value": 4282296063 - } - ] - } - }, - "fontFamilyName": "Roboto" - }, - { - "startIndex": 491, - "length": 1, - "styleRunExtensions": { - "styleRunColorMapExtension": { - "colorMap": [ - { - "key": "USER_INTERFACE_THEME_DARK", - "value": 4294967295 - }, - { - "key": "USER_INTERFACE_THEME_LIGHT", - "value": 4279440147 - } - ] - } - }, - "fontFamilyName": "Roboto" - }, - { - "startIndex": 492, - "length": 11, - "styleRunExtensions": { - "styleRunColorMapExtension": { - "colorMap": [ - { - "key": "USER_INTERFACE_THEME_LIGHT", - "value": 4278607828 - }, - { - "key": "USER_INTERFACE_THEME_DARK", - "value": 4282296063 - } - ] - } - }, - "fontFamilyName": "Roboto" - }, - { - "startIndex": 503, - "length": 1, - "styleRunExtensions": { - "styleRunColorMapExtension": { - "colorMap": [ - { - "key": "USER_INTERFACE_THEME_DARK", - "value": 4294967295 - }, - { - "key": "USER_INTERFACE_THEME_LIGHT", - "value": 4279440147 - } - ] - } - }, - "fontFamilyName": "Roboto" - }, - { - "startIndex": 504, - "length": 5, - "styleRunExtensions": { - "styleRunColorMapExtension": { - "colorMap": [ - { - "key": "USER_INTERFACE_THEME_LIGHT", - "value": 4278607828 - }, - { - "key": "USER_INTERFACE_THEME_DARK", - "value": 4282296063 - } - ] - } - }, - "fontFamilyName": "Roboto" - }, - { - "startIndex": 509, - "length": 1, - "styleRunExtensions": { - "styleRunColorMapExtension": { - "colorMap": [ - { - "key": "USER_INTERFACE_THEME_LIGHT", - "value": 4279440147 - }, - { - "key": "USER_INTERFACE_THEME_DARK", - "value": 4294967295 - } - ] - } - }, - "fontFamilyName": "Roboto" - }, - { - "startIndex": 510, - "length": 4, - "styleRunExtensions": { - "styleRunColorMapExtension": { - "colorMap": [ - { - "key": "USER_INTERFACE_THEME_DARK", - "value": 4282296063 - }, - { - "key": "USER_INTERFACE_THEME_LIGHT", - "value": 4278607828 - } - ] - } - }, - "fontFamilyName": "Roboto" - }, - { - "startIndex": 514, - "length": 46, - "styleRunExtensions": { - "styleRunColorMapExtension": { - "colorMap": [ - { - "key": "USER_INTERFACE_THEME_LIGHT", - "value": 4279440147 - }, - { - "key": "USER_INTERFACE_THEME_DARK", - "value": 4294967295 - } - ] - } - }, - "fontFamilyName": "Roboto" - } - ], - "attachmentRuns": [ - { - "startIndex": 115, - "length": 0, - "element": { - "type": { - "imageType": { - "image": { - "sources": [ - { - "url": "https://www.gstatic.com/youtube/img/watch/yt_favicon.png" - } - ] - } - } - }, - "properties": { - "layoutProperties": { - "height": { - "value": 10, - "unit": "DIMENSION_UNIT_POINT" - }, - "width": { - "value": 14, - "unit": "DIMENSION_UNIT_POINT" - }, - "margin": { - "top": { - "value": 0.5, - "unit": "DIMENSION_UNIT_POINT" - } - } - } - } - }, - "alignment": "ALIGNMENT_VERTICAL_CENTER" - }, - { - "startIndex": 359, - "length": 0, - "element": { - "type": { - "imageType": { - "image": { - "sources": [ - { - "url": "https://www.gstatic.com/youtube/img/watch/yt_favicon.png" - } - ] - } - } - }, - "properties": { - "layoutProperties": { - "height": { - "value": 10, - "unit": "DIMENSION_UNIT_POINT" - }, - "width": { - "value": 14, - "unit": "DIMENSION_UNIT_POINT" - }, - "margin": { - "top": { - "value": 0.5, - "unit": "DIMENSION_UNIT_POINT" - } - } - } - } - }, - "alignment": "ALIGNMENT_VERTICAL_CENTER" - }, - { - "startIndex": 371, - "length": 0, - "element": { - "type": { - "imageType": { - "image": { - "sources": [ - { - "url": "https://www.gstatic.com/youtube/img/watch/social_media/instagram_1x.png" - } - ] - } - } - }, - "properties": { - "layoutProperties": { - "height": { - "value": 14, - "unit": "DIMENSION_UNIT_POINT" - }, - "width": { - "value": 14, - "unit": "DIMENSION_UNIT_POINT" - }, - "margin": { - "top": { - "value": 0.5, - "unit": "DIMENSION_UNIT_POINT" - } - } - } - } - }, - "alignment": "ALIGNMENT_VERTICAL_CENTER" - }, - { - "startIndex": 392, - "length": 0, - "element": { - "type": { - "imageType": { - "image": { - "sources": [ - { - "url": "https://www.gstatic.com/youtube/img/watch/social_media/tiktok_1x.png" - } - ] - } - } - }, - "properties": { - "layoutProperties": { - "height": { - "value": 14, - "unit": "DIMENSION_UNIT_POINT" - }, - "width": { - "value": 14, - "unit": "DIMENSION_UNIT_POINT" - }, - "margin": { - "top": { - "value": 0.5, - "unit": "DIMENSION_UNIT_POINT" - } - } - } - } - }, - "alignment": "ALIGNMENT_VERTICAL_CENTER" - }, - { - "startIndex": 413, - "length": 0, - "element": { - "type": { - "imageType": { - "image": { - "sources": [ - { - "url": "https://www.gstatic.com/youtube/img/watch/social_media/twitter_1x_v2.png" - } - ] - } - } - }, - "properties": { - "layoutProperties": { - "height": { - "value": 14, - "unit": "DIMENSION_UNIT_POINT" - }, - "width": { - "value": 14, - "unit": "DIMENSION_UNIT_POINT" - }, - "margin": { - "top": { - "value": 0.5, - "unit": "DIMENSION_UNIT_POINT" - } - } - } - } - }, - "alignment": "ALIGNMENT_VERTICAL_CENTER" - }, - { - "startIndex": 434, - "length": 0, - "element": { - "type": { - "imageType": { - "image": { - "sources": [ - { - "url": "https://www.gstatic.com/youtube/img/watch/social_media/facebook_1x.png" - } - ] - } - } - }, - "properties": { - "layoutProperties": { - "height": { - "value": 14, - "unit": "DIMENSION_UNIT_POINT" - }, - "width": { - "value": 14, - "unit": "DIMENSION_UNIT_POINT" - }, - "margin": { - "top": { - "value": 0.5, - "unit": "DIMENSION_UNIT_POINT" - } - } - } - } - }, - "alignment": "ALIGNMENT_VERTICAL_CENTER" - } - ], - "decorationRuns": [ - { - "textDecorator": { - "highlightTextDecorator": { - "startIndex": 113, - "length": 46, - "backgroundCornerRadius": 8, - "bottomPadding": 1, - "highlightTextDecoratorExtensions": { - "highlightTextDecoratorColorMapExtension": { - "colorMap": [ - { - "key": "USER_INTERFACE_THEME_LIGHT", - "value": 218103808 - }, - { - "key": "USER_INTERFACE_THEME_DARK", - "value": 452984831 - } - ] - } - } - } - } - }, - { - "textDecorator": { - "highlightTextDecorator": { - "startIndex": 357, - "length": 12, - "backgroundCornerRadius": 8, - "bottomPadding": 1, - "highlightTextDecoratorExtensions": { - "highlightTextDecoratorColorMapExtension": { - "colorMap": [ - { - "key": "USER_INTERFACE_THEME_LIGHT", - "value": 218103808 - }, - { - "key": "USER_INTERFACE_THEME_DARK", - "value": 452984831 - } - ] - } - } - } - } - }, - { - "textDecorator": { - "highlightTextDecorator": { - "startIndex": 370, - "length": 20, - "backgroundCornerRadius": 8, - "bottomPadding": 1, - "highlightTextDecoratorExtensions": { - "highlightTextDecoratorColorMapExtension": { - "colorMap": [ - { - "key": "USER_INTERFACE_THEME_LIGHT", - "value": 218103808 - }, - { - "key": "USER_INTERFACE_THEME_DARK", - "value": 452984831 - } - ] - } - } - } - } - }, - { - "textDecorator": { - "highlightTextDecorator": { - "startIndex": 391, - "length": 20, - "backgroundCornerRadius": 8, - "bottomPadding": 1, - "highlightTextDecoratorExtensions": { - "highlightTextDecoratorColorMapExtension": { - "colorMap": [ - { - "key": "USER_INTERFACE_THEME_LIGHT", - "value": 218103808 - }, - { - "key": "USER_INTERFACE_THEME_DARK", - "value": 452984831 - } - ] - } - } - } - } - }, - { - "textDecorator": { - "highlightTextDecorator": { - "startIndex": 412, - "length": 20, - "backgroundCornerRadius": 8, - "bottomPadding": 1, - "highlightTextDecoratorExtensions": { - "highlightTextDecoratorColorMapExtension": { - "colorMap": [ - { - "key": "USER_INTERFACE_THEME_LIGHT", - "value": 218103808 - }, - { - "key": "USER_INTERFACE_THEME_DARK", - "value": 452984831 - } - ] - } - } - } - } - }, - { - "textDecorator": { - "highlightTextDecorator": { - "startIndex": 433, - "length": 20, - "backgroundCornerRadius": 8, - "bottomPadding": 1, - "highlightTextDecoratorExtensions": { - "highlightTextDecoratorColorMapExtension": { - "colorMap": [ - { - "key": "USER_INTERFACE_THEME_LIGHT", - "value": 218103808 - }, - { - "key": "USER_INTERFACE_THEME_DARK", - "value": 452984831 - } - ] - } - } - } - } - } - ] - } + "ln": { + "content": "🎧Listen and download aespa's debut single \"Black Mamba\": https://smarturl.it/aespa_BlackMamba\n🐍The Debut Stage    • aespa 에스파 'Black ...  \n\n🎟️ aespa Showcase SYNK in LA! Tickets now on sale: https://www.ticketmaster.com/event/0A...\n\nSubscribe to aespa Official YouTube Channel!\nhttps://www.youtube.com/aespa?sub_con...\n\naespa official\n   / aespa  \nhttps://www.instagram.com/aespa_official\nhttps://www.tiktok.com/@aespa_official\nhttps://twitter.com/aespa_Official\nhttps://www.facebook.com/aespa.official\nhttps://weibo.com/aespa\n\n#aespa #æspa #BlackMamba #블랙맘바 #에스파\naespa 에스파 'Black Mamba' MV ℗ SM Entertainment", + "commandRuns": [ + { + "startIndex": 58, + "length": 36, + "onTap": { + "innertubeCommand": { + "clickTrackingParams": "CJ0BEM2rARgBIhMIzvHr0sis-gIV0kZ6BR0GNA_4SJGXrtzn9erzZQ==", + "commandMetadata": { + "webCommandMetadata": { + "url": "https://www.youtube.com/redirect?event=video_description&redir_token=QUFFLUhqbm1qRVVfQUlObURLcnFFQXBTUkJSOEpqWGIzUXxBQ3Jtc0tsNUJIYm5xdERxZk9rZEw3YlJzV0ZIYTNaSjU2a21PaFhNUmxzdjI5VE1VRWUyczZwYmtmQXh3QXV0eXlkMDgxRUJoNVMzRFZ6RlZ6MGdXeXdWQXFTTGY2ZHhFcUFqdExRQ21PYzNfWmlBaHhqYXVUdw&q=https%3A%2F%2Fsmarturl.it%2Faespa_BlackMamba&v=ZeerrnuLi5E", + "webPageType": "WEB_PAGE_TYPE_UNKNOWN", + "rootVe": 83769 + } + }, + "urlEndpoint": { + "url": "https://www.youtube.com/redirect?event=video_description&redir_token=QUFFLUhqbm1qRVVfQUlObURLcnFFQXBTUkJSOEpqWGIzUXxBQ3Jtc0tsNUJIYm5xdERxZk9rZEw3YlJzV0ZIYTNaSjU2a21PaFhNUmxzdjI5VE1VRWUyczZwYmtmQXh3QXV0eXlkMDgxRUJoNVMzRFZ6RlZ6MGdXeXdWQXFTTGY2ZHhFcUFqdExRQ21PYzNfWmlBaHhqYXVUdw&q=https%3A%2F%2Fsmarturl.it%2Faespa_BlackMamba&v=ZeerrnuLi5E", + "target": "TARGET_NEW_WINDOW", + "nofollow": true + } + } + } + }, + { + "startIndex": 113, + "length": 27, + "onTap": { + "innertubeCommand": { + "clickTrackingParams": "CJ0BEM2rARgBIhMIzvHr0sis-gIV0kZ6BR0GNA_4", + "commandMetadata": { + "webCommandMetadata": { + "url": "/watch?v=Ky5RT5oGg0w&t=0s", + "webPageType": "WEB_PAGE_TYPE_WATCH", + "rootVe": 3832 + } + }, + "watchEndpoint": { + "videoId": "Ky5RT5oGg0w", + "startTimeSeconds": 0, + "watchEndpointSupportedOnesieConfig": { + "html5PlaybackOnesieConfig": { + "commonConfig": { + "url": "https://rr5---sn-h0jeener.googlevideo.com/initplayback?source=youtube&orc=1&oeis=1&c=WEB&oad=3200&ovd=3200&oaad=11000&oavd=11000&ocs=700&oewis=1&oputc=1&ofpcc=1&msp=1&odeak=1&odepv=1&osfc=1&id=2b2e514f9a06834c&ip=2003%3Ade%3Aaf30%3A200%3Ad8ce%3A4044%3A2ba2%3A3881&initcwndbps=1556250&mt=1663992556&oweuc=" + } + } + } + } + } + } + }, + { + "startIndex": 194, + "length": 40, + "onTap": { + "innertubeCommand": { + "clickTrackingParams": "CJ0BEM2rARgBIhMIzvHr0sis-gIV0kZ6BR0GNA_4SJGXrtzn9erzZQ==", + "commandMetadata": { + "webCommandMetadata": { + "url": "https://www.youtube.com/redirect?event=video_description&redir_token=QUFFLUhqbU1ObGNaRDZaRmo1X1ZjejBoeTRnWkxuVUJxZ3xBQ3Jtc0ttWk1BVVhaRXRfN1VYWXBqMHdaYURTRFJNcUZJVlY3a21wRHE2ZGZaclE3WUM5bEZWbmFfT0sxWTZHOVotWVh6U3YtVk94SlA5NkRFTnBPcHVCWDJhMGJRQlI3ZHN0MnJleHp0c2lEVWNxeW1jSDZuVQ&q=https%3A%2F%2Fwww.ticketmaster.com%2Fevent%2F0A005CCD9E871F6E&v=ZeerrnuLi5E", + "webPageType": "WEB_PAGE_TYPE_UNKNOWN", + "rootVe": 83769 + } + }, + "urlEndpoint": { + "url": "https://www.youtube.com/redirect?event=video_description&redir_token=QUFFLUhqbU1ObGNaRDZaRmo1X1ZjejBoeTRnWkxuVUJxZ3xBQ3Jtc0ttWk1BVVhaRXRfN1VYWXBqMHdaYURTRFJNcUZJVlY3a21wRHE2ZGZaclE3WUM5bEZWbmFfT0sxWTZHOVotWVh6U3YtVk94SlA5NkRFTnBPcHVCWDJhMGJRQlI3ZHN0MnJleHp0c2lEVWNxeW1jSDZuVQ&q=https%3A%2F%2Fwww.ticketmaster.com%2Fevent%2F0A005CCD9E871F6E&v=ZeerrnuLi5E", + "target": "TARGET_NEW_WINDOW", + "nofollow": true + } + } + } + }, + { + "startIndex": 281, + "length": 40, + "onTap": { + "innertubeCommand": { + "clickTrackingParams": "CJ0BEM2rARgBIhMIzvHr0sis-gIV0kZ6BR0GNA_4", + "commandMetadata": { + "webCommandMetadata": { + "url": "https://www.youtube.com/aespa?sub_confirmation=1", + "webPageType": "WEB_PAGE_TYPE_UNKNOWN", + "rootVe": 83769 + } + }, + "urlEndpoint": { + "url": "https://www.youtube.com/aespa?sub_confirmation=1", + "nofollow": true + } + } + } + }, + { + "startIndex": 338, + "length": 12, + "onTap": { + "innertubeCommand": { + "clickTrackingParams": "CJ0BEM2rARgBIhMIzvHr0sis-gIV0kZ6BR0GNA_4", + "commandMetadata": { + "webCommandMetadata": { + "url": "https://www.youtube.com/c/aespa", + "webPageType": "WEB_PAGE_TYPE_UNKNOWN", + "rootVe": 83769 + } + }, + "urlEndpoint": { + "url": "https://www.youtube.com/c/aespa", + "nofollow": true + } + } + } + }, + { + "startIndex": 351, + "length": 40, + "onTap": { + "innertubeCommand": { + "clickTrackingParams": "CJ0BEM2rARgBIhMIzvHr0sis-gIV0kZ6BR0GNA_4SJGXrtzn9erzZQ==", + "commandMetadata": { + "webCommandMetadata": { + "url": "https://www.youtube.com/redirect?event=video_description&redir_token=QUFFLUhqbE9FVEtZZkVLUExjdFBnZjZnZ19KNWRYOVZUd3xBQ3Jtc0tsbHpCa1hLTVJ6MEllczlzUEpoVi1IQ2F5NG1jMnlOT3p3bnlFeE80ZzlsaG5CUXlFQnFGTkMtN19DcVYzQkw3bVlVVmNwQlpYQWZnNGNsME45WE1WQ21sR3V1Z3k5RG9DUDE0VTZQTm53Mk9vTWhiOA&q=https%3A%2F%2Fwww.instagram.com%2Faespa_official&v=ZeerrnuLi5E", + "webPageType": "WEB_PAGE_TYPE_UNKNOWN", + "rootVe": 83769 + } + }, + "urlEndpoint": { + "url": "https://www.youtube.com/redirect?event=video_description&redir_token=QUFFLUhqbE9FVEtZZkVLUExjdFBnZjZnZ19KNWRYOVZUd3xBQ3Jtc0tsbHpCa1hLTVJ6MEllczlzUEpoVi1IQ2F5NG1jMnlOT3p3bnlFeE80ZzlsaG5CUXlFQnFGTkMtN19DcVYzQkw3bVlVVmNwQlpYQWZnNGNsME45WE1WQ21sR3V1Z3k5RG9DUDE0VTZQTm53Mk9vTWhiOA&q=https%3A%2F%2Fwww.instagram.com%2Faespa_official&v=ZeerrnuLi5E", + "target": "TARGET_NEW_WINDOW", + "nofollow": true + } + } + } + }, + { + "startIndex": 392, + "length": 38, + "onTap": { + "innertubeCommand": { + "clickTrackingParams": "CJ0BEM2rARgBIhMIzvHr0sis-gIV0kZ6BR0GNA_4SJGXrtzn9erzZQ==", + "commandMetadata": { + "webCommandMetadata": { + "url": "https://www.youtube.com/redirect?event=video_description&redir_token=QUFFLUhqbVdlSGk3eDd5U0dUVG16VFJCQnhKVFBEUUxMQXxBQ3Jtc0tuX3ZJbENNY1ZSN0FFemdxTFdlcTVvc3AwZE05NEFvRW5nOHpZWDUtZG9ORHBnT1JGc2UySDh3WWl3MU53VjFvbHRSdjdxMUlGM2Z6SmdaLTVaWWxhamJEems0Uld3MGlTT0Z0bkh5Y0hpcnY1aXptSQ&q=https%3A%2F%2Fwww.tiktok.com%2F%40aespa_official&v=ZeerrnuLi5E", + "webPageType": "WEB_PAGE_TYPE_UNKNOWN", + "rootVe": 83769 + } + }, + "urlEndpoint": { + "url": "https://www.youtube.com/redirect?event=video_description&redir_token=QUFFLUhqbVdlSGk3eDd5U0dUVG16VFJCQnhKVFBEUUxMQXxBQ3Jtc0tuX3ZJbENNY1ZSN0FFemdxTFdlcTVvc3AwZE05NEFvRW5nOHpZWDUtZG9ORHBnT1JGc2UySDh3WWl3MU53VjFvbHRSdjdxMUlGM2Z6SmdaLTVaWWxhamJEems0Uld3MGlTT0Z0bkh5Y0hpcnY1aXptSQ&q=https%3A%2F%2Fwww.tiktok.com%2F%40aespa_official&v=ZeerrnuLi5E", + "target": "TARGET_NEW_WINDOW", + "nofollow": true + } + } + } + }, + { + "startIndex": 431, + "length": 34, + "onTap": { + "innertubeCommand": { + "clickTrackingParams": "CJ0BEM2rARgBIhMIzvHr0sis-gIV0kZ6BR0GNA_4SJGXrtzn9erzZQ==", + "commandMetadata": { + "webCommandMetadata": { + "url": "https://www.youtube.com/redirect?event=video_description&redir_token=QUFFLUhqa3lNcG1lMHkwSzNLQVBrUXFNTXl0N1hNa04wUXxBQ3Jtc0tubm1sQkdaVjNYR04xOHpJV3NxZVBpb3I5V1FVOHVFNC1uWE5vb211ZmZKYzhTZXZfbjlkY09fanBRdHpjUkdRVGJJYS0xZ3NBNkVZQVhWSS0xVDYwRlRzQ0J3ODQxNDE0ODAxd1Q0cG5icVlNWndscw&q=https%3A%2F%2Ftwitter.com%2Faespa_Official&v=ZeerrnuLi5E", + "webPageType": "WEB_PAGE_TYPE_UNKNOWN", + "rootVe": 83769 + } + }, + "urlEndpoint": { + "url": "https://www.youtube.com/redirect?event=video_description&redir_token=QUFFLUhqa3lNcG1lMHkwSzNLQVBrUXFNTXl0N1hNa04wUXxBQ3Jtc0tubm1sQkdaVjNYR04xOHpJV3NxZVBpb3I5V1FVOHVFNC1uWE5vb211ZmZKYzhTZXZfbjlkY09fanBRdHpjUkdRVGJJYS0xZ3NBNkVZQVhWSS0xVDYwRlRzQ0J3ODQxNDE0ODAxd1Q0cG5icVlNWndscw&q=https%3A%2F%2Ftwitter.com%2Faespa_Official&v=ZeerrnuLi5E", + "target": "TARGET_NEW_WINDOW", + "nofollow": true + } + } + } + }, + { + "startIndex": 466, + "length": 39, + "onTap": { + "innertubeCommand": { + "clickTrackingParams": "CJ0BEM2rARgBIhMIzvHr0sis-gIV0kZ6BR0GNA_4SJGXrtzn9erzZQ==", + "commandMetadata": { + "webCommandMetadata": { + "url": "https://www.youtube.com/redirect?event=video_description&redir_token=QUFFLUhqbjdBNG5yVEFwU0JMNGZaLUpQZ1ZoeGgwT0xOZ3xBQ3Jtc0tuRFdFNlJNV29PMThRNWo5MHZrREZ1ZU5oZlkxVmE4ZlU5STFCZW1mUFVSdXJ3VUQxUnNVVkUzLWJQMS1uRzVjdkRCV2ZxSWJ6cFNxRVVzejY0SDltZFZPc2xwS3ZPZGIxcFZ6cndIVkMtUjVtZ054cw&q=https%3A%2F%2Fwww.facebook.com%2Faespa.official&v=ZeerrnuLi5E", + "webPageType": "WEB_PAGE_TYPE_UNKNOWN", + "rootVe": 83769 + } + }, + "urlEndpoint": { + "url": "https://www.youtube.com/redirect?event=video_description&redir_token=QUFFLUhqbjdBNG5yVEFwU0JMNGZaLUpQZ1ZoeGgwT0xOZ3xBQ3Jtc0tuRFdFNlJNV29PMThRNWo5MHZrREZ1ZU5oZlkxVmE4ZlU5STFCZW1mUFVSdXJ3VUQxUnNVVkUzLWJQMS1uRzVjdkRCV2ZxSWJ6cFNxRVVzejY0SDltZFZPc2xwS3ZPZGIxcFZ6cndIVkMtUjVtZ054cw&q=https%3A%2F%2Fwww.facebook.com%2Faespa.official&v=ZeerrnuLi5E", + "target": "TARGET_NEW_WINDOW", + "nofollow": true + } + } + } + }, + { + "startIndex": 506, + "length": 23, + "onTap": { + "innertubeCommand": { + "clickTrackingParams": "CJ0BEM2rARgBIhMIzvHr0sis-gIV0kZ6BR0GNA_4SJGXrtzn9erzZQ==", + "commandMetadata": { + "webCommandMetadata": { + "url": "https://www.youtube.com/redirect?event=video_description&redir_token=QUFFLUhqbEtGMHB6eXBESW92aEVLc1FybkRwQU95eTh6UXxBQ3Jtc0tuWXc5d2JsTHFYcHExdy1FTDFyUV9wdU1DSmxELUxGSGlPMzhBdFVkblRSZkNLQzRaMEJGUGhYLWp4RU40YUVwV3N3ZUpRTVVKVDRiY19zeE5RUkt2dW5aUVcxcHBRQldCOTE3YktXSXZlSFJhRWRjdw&q=https%3A%2F%2Fweibo.com%2Faespa&v=ZeerrnuLi5E", + "webPageType": "WEB_PAGE_TYPE_UNKNOWN", + "rootVe": 83769 + } + }, + "urlEndpoint": { + "url": "https://www.youtube.com/redirect?event=video_description&redir_token=QUFFLUhqbEtGMHB6eXBESW92aEVLc1FybkRwQU95eTh6UXxBQ3Jtc0tuWXc5d2JsTHFYcHExdy1FTDFyUV9wdU1DSmxELUxGSGlPMzhBdFVkblRSZkNLQzRaMEJGUGhYLWp4RU40YUVwV3N3ZUpRTVVKVDRiY19zeE5RUkt2dW5aUVcxcHBRQldCOTE3YktXSXZlSFJhRWRjdw&q=https%3A%2F%2Fweibo.com%2Faespa&v=ZeerrnuLi5E", + "target": "TARGET_NEW_WINDOW", + "nofollow": true + } + } + } + }, + { + "startIndex": 531, + "length": 6, + "onTap": { + "innertubeCommand": { + "clickTrackingParams": "CKIBENzXBBgKIhMIzvHr0sis-gIV0kZ6BR0GNA_4", + "commandMetadata": { + "webCommandMetadata": { + "url": "/hashtag/aespa", + "webPageType": "WEB_PAGE_TYPE_BROWSE", + "rootVe": 6827, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "FEhashtag", + "params": "6gUHCgVhZXNwYQ%3D%3D" + } + } + }, + "loggingDirectives": { + "trackingParams": "CKIBENzXBBgKIhMIzvHr0sis-gIV0kZ6BR0GNA_4", + "enableDisplayloggerExperiment": true + } + }, + { + "startIndex": 538, + "length": 5, + "onTap": { + "innertubeCommand": { + "clickTrackingParams": "CKEBENzXBBgLIhMIzvHr0sis-gIV0kZ6BR0GNA_4", + "commandMetadata": { + "webCommandMetadata": { + "url": "/hashtag/%C3%A6spa", + "webPageType": "WEB_PAGE_TYPE_BROWSE", + "rootVe": 6827, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "FEhashtag", + "params": "6gUHCgXDpnNwYQ%3D%3D" + } + } + }, + "loggingDirectives": { + "trackingParams": "CKEBENzXBBgLIhMIzvHr0sis-gIV0kZ6BR0GNA_4", + "enableDisplayloggerExperiment": true + } + }, + { + "startIndex": 544, + "length": 11, + "onTap": { + "innertubeCommand": { + "clickTrackingParams": "CKABENzXBBgMIhMIzvHr0sis-gIV0kZ6BR0GNA_4", + "commandMetadata": { + "webCommandMetadata": { + "url": "/hashtag/blackmamba", + "webPageType": "WEB_PAGE_TYPE_BROWSE", + "rootVe": 6827, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "FEhashtag", + "params": "6gUMCgpibGFja21hbWJh" + } + } + }, + "loggingDirectives": { + "trackingParams": "CKABENzXBBgMIhMIzvHr0sis-gIV0kZ6BR0GNA_4", + "enableDisplayloggerExperiment": true + } + }, + { + "startIndex": 556, + "length": 5, + "onTap": { + "innertubeCommand": { + "clickTrackingParams": "CJ8BENzXBBgNIhMIzvHr0sis-gIV0kZ6BR0GNA_4", + "commandMetadata": { + "webCommandMetadata": { + "url": "/hashtag/%EB%B8%94%EB%9E%99%EB%A7%98%EB%B0%94", + "webPageType": "WEB_PAGE_TYPE_BROWSE", + "rootVe": 6827, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "FEhashtag", + "params": "6gUOCgzruJTrnpnrp5jrsJQ%3D" + } + } + }, + "loggingDirectives": { + "trackingParams": "CJ8BENzXBBgNIhMIzvHr0sis-gIV0kZ6BR0GNA_4", + "enableDisplayloggerExperiment": true + } + }, + { + "startIndex": 562, + "length": 4, + "onTap": { + "innertubeCommand": { + "clickTrackingParams": "CJ4BENzXBBgOIhMIzvHr0sis-gIV0kZ6BR0GNA_4", + "commandMetadata": { + "webCommandMetadata": { + "url": "/hashtag/%EC%97%90%EC%8A%A4%ED%8C%8C", + "webPageType": "WEB_PAGE_TYPE_BROWSE", + "rootVe": 6827, + "apiUrl": "/youtubei/v1/browse" + } + }, + "browseEndpoint": { + "browseId": "FEhashtag", + "params": "6gULCgnsl5DsiqTtjIw%3D" + } + } + }, + "loggingDirectives": { + "trackingParams": "CJ4BENzXBBgOIhMIzvHr0sis-gIV0kZ6BR0GNA_4", + "enableDisplayloggerExperiment": true + } + } + ] + } } diff --git a/tests/youtube.rs b/tests/youtube.rs index f4979ef..84c6b08 100644 --- a/tests/youtube.rs +++ b/tests/youtube.rs @@ -2519,7 +2519,7 @@ async fn music_new_videos(rp: RustyPipe) { assert!(!video.name.is_empty()); assert!(!video.cover.is_empty(), "got no cover"); if let Some(view_count) = video.view_count { - assert_gte(view_count, 500, "views"); + assert_gte(view_count, 1000, "views"); } else { // Podcast episode: shows duration instead of view count assert!(video.duration.is_some(), "no view count or duration");