diff options
| author | Samantaz Fox <coding@samantaz.fr> | 2024-07-21 17:21:47 +0200 |
|---|---|---|
| committer | Samantaz Fox <coding@samantaz.fr> | 2024-07-21 17:24:09 +0200 |
| commit | 325561e7553601e0f81ba72ca33ffe52079f3b2a (patch) | |
| tree | 85724eb4b69718d4567a22cb7935cbdd5b6a8372 /src | |
| parent | 09bf09befe4015014bdc13d8c50d79bc23593d90 (diff) | |
| parent | 911dad69358a299b77e14303e570d48960aa0f1d (diff) | |
| download | invidious-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.cr | 15 |
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, |
