summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSamantaz Fox <coding@samantaz.fr>2024-07-21 17:21:47 +0200
committerSamantaz Fox <coding@samantaz.fr>2024-07-21 17:24:09 +0200
commit325561e7553601e0f81ba72ca33ffe52079f3b2a (patch)
tree85724eb4b69718d4567a22cb7935cbdd5b6a8372 /src
parent09bf09befe4015014bdc13d8c50d79bc23593d90 (diff)
parent911dad69358a299b77e14303e570d48960aa0f1d (diff)
downloadinvidious-325561e7553601e0f81ba72ca33ffe52079f3b2a.tar.gz
invidious-325561e7553601e0f81ba72ca33ffe52079f3b2a.tar.bz2
invidious-325561e7553601e0f81ba72ca33ffe52079f3b2a.zip
Channel: parse subscriber count and channel banner (#4785)
This PR adds support for parsing the newer channel header format (banner + subscription parsing) Before this change: * 0 subscribers * No banner image After this change: * Example with Mr Breast channel: 299M * Image banner is visible Closes issue 4783
Diffstat (limited to 'src')
-rw-r--r--src/invidious/channels/about.cr15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/invidious/channels/about.cr b/src/invidious/channels/about.cr
index b5a27667..edaf5c12 100644
--- a/src/invidious/channels/about.cr
+++ b/src/invidious/channels/about.cr
@@ -72,6 +72,7 @@ def get_about_info(ucid, locale) : AboutChannel
# Raises a KeyError on failure.
banners = initdata["header"]["c4TabbedHeaderRenderer"]?.try &.["banner"]?.try &.["thumbnails"]?
+ banners ||= initdata.dig?("header", "pageHeaderRenderer", "content", "pageHeaderViewModel", "banner", "imageBannerViewModel", "image", "sources")
banner = banners.try &.[-1]?.try &.["url"].as_s?
# if banner.includes? "channels/c4/default_banner"
@@ -147,9 +148,17 @@ def get_about_info(ucid, locale) : AboutChannel
end
end
- sub_count = initdata
- .dig?("header", "c4TabbedHeaderRenderer", "subscriberCountText", "simpleText").try &.as_s?
- .try { |text| short_text_to_number(text.split(" ")[0]).to_i32 } || 0
+ sub_count = 0
+
+ if (metadata_rows = initdata.dig?("header", "pageHeaderRenderer", "content", "pageHeaderViewModel", "metadata", "contentMetadataViewModel", "metadataRows").try &.as_a)
+ metadata_rows.each do |row|
+ metadata_part = row.dig?("metadataParts").try &.as_a.find { |i| i.dig?("text", "content").try &.as_s.includes?("subscribers") }
+ if !metadata_part.nil?
+ sub_count = short_text_to_number(metadata_part.dig("text", "content").as_s.split(" ")[0]).to_i32
+ end
+ break if sub_count != 0
+ end
+ end
AboutChannel.new(
ucid: ucid,