Fix parsing error in search results (#3418)

This commit is contained in:
Samantaz Fox 2022-11-21 21:12:39 +01:00
commit c142703453
No known key found for this signature in database
GPG key ID: F42821059186176E
4 changed files with 16 additions and 17 deletions

View file

@ -130,8 +130,9 @@ def get_about_info(ucid, locale) : AboutChannel
tabs = tabs_json.reject { |node| node["tabRenderer"]?.nil? }.map(&.["tabRenderer"]["title"].as_s.downcase) tabs = tabs_json.reject { |node| node["tabRenderer"]?.nil? }.map(&.["tabRenderer"]["title"].as_s.downcase)
end end
sub_count = initdata["header"]["c4TabbedHeaderRenderer"]?.try &.["subscriberCountText"]?.try &.["simpleText"]?.try &.as_s? sub_count = initdata
.try { |text| short_text_to_number(text.split(" ")[0]) } || 0 .dig?("header", "c4TabbedHeaderRenderer", "subscriberCountText", "simpleText").try &.as_s?
.try { |text| short_text_to_number(text.split(" ")[0]).to_i32 } || 0
AboutChannel.new( AboutChannel.new(
ucid: ucid, ucid: ucid,

View file

@ -161,21 +161,19 @@ def number_with_separator(number)
number.to_s.reverse.gsub(/(\d{3})(?=\d)/, "\\1,").reverse number.to_s.reverse.gsub(/(\d{3})(?=\d)/, "\\1,").reverse
end end
def short_text_to_number(short_text : String) : Int32 def short_text_to_number(short_text : String) : Int64
case short_text matches = /(?<number>\d+(\.\d+)?)\s?(?<suffix>[mMkKbB])?/.match(short_text)
when .ends_with? "M" number = matches.try &.["number"].to_f || 0.0
number = short_text.rstrip(" mM").to_f
number *= 1000000 case matches.try &.["suffix"].downcase
when .ends_with? "K" when "k" then number *= 1_000
number = short_text.rstrip(" kK").to_f when "m" then number *= 1_000_000
number *= 1000 when "b" then number *= 1_000_000_000
else
number = short_text.rstrip(" ")
end end
number = number.to_i return number.to_i64
rescue ex
return number return 0_i64
end end
def number_to_short_text(number) def number_to_short_text(number)

View file

@ -170,7 +170,7 @@ private module Parsers
# Always simpleText # Always simpleText
# TODO change default value to nil # TODO change default value to nil
subscriber_count = item_contents.dig?("subscriberCountText", "simpleText") subscriber_count = item_contents.dig?("subscriberCountText", "simpleText")
.try { |s| short_text_to_number(s.as_s.split(" ")[0]) } || 0 .try { |s| short_text_to_number(s.as_s.split(" ")[0]).to_i32 } || 0
# Auto-generated channels doesn't have videoCountText # Auto-generated channels doesn't have videoCountText
# Taken from: https://github.com/iv-org/invidious/pull/2228#discussion_r717620922 # Taken from: https://github.com/iv-org/invidious/pull/2228#discussion_r717620922

View file

@ -43,7 +43,7 @@ module YoutubeAPI
ClientType::Web => { ClientType::Web => {
name: "WEB", name: "WEB",
name_proto: "1", name_proto: "1",
version: "2.20220804.07.00", version: "2.20221118.01.00",
api_key: DEFAULT_API_KEY, api_key: DEFAULT_API_KEY,
screen: "WATCH_FULL_SCREEN", screen: "WATCH_FULL_SCREEN",
os_name: "Windows", os_name: "Windows",