Merge pull request #2382 from unixfox/fix-comment-replies

fix comment replies
This commit is contained in:
TheFrenchGhosty 2021-09-06 10:54:03 +02:00 committed by GitHub
commit 0044178d49
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -70,8 +70,24 @@ def fetch_youtube_comments(id, cursor, format, locale, thin_mode, region, sort_b
client_config = YoutubeAPI::ClientConfig.new(region: region) client_config = YoutubeAPI::ClientConfig.new(region: region)
response = YoutubeAPI.next(continuation: ctoken, client_config: client_config) response = YoutubeAPI.next(continuation: ctoken, client_config: client_config)
contents = nil
if response["continuationContents"]? if response["onResponseReceivedEndpoints"]?
onResponseReceivedEndpoints = response["onResponseReceivedEndpoints"]
header = nil
onResponseReceivedEndpoints.as_a.each do |item|
if item["reloadContinuationItemsCommand"]?
case item["reloadContinuationItemsCommand"]["slot"]
when "RELOAD_CONTINUATION_SLOT_HEADER"
header = item["reloadContinuationItemsCommand"]["continuationItems"][0]
when "RELOAD_CONTINUATION_SLOT_BODY"
contents = item["reloadContinuationItemsCommand"]["continuationItems"]
end
elsif item["appendContinuationItemsAction"]?
contents = item["appendContinuationItemsAction"]["continuationItems"]
end
end
elsif response["continuationContents"]?
response = response["continuationContents"] response = response["continuationContents"]
if response["commentRepliesContinuation"]? if response["commentRepliesContinuation"]?
body = response["commentRepliesContinuation"] body = response["commentRepliesContinuation"]
@ -83,22 +99,6 @@ def fetch_youtube_comments(id, cursor, format, locale, thin_mode, region, sort_b
if body["continuations"]? if body["continuations"]?
moreRepliesContinuation = body["continuations"][0]["nextContinuationData"]["continuation"].as_s moreRepliesContinuation = body["continuations"][0]["nextContinuationData"]["continuation"].as_s
end end
elsif response["onResponseReceivedEndpoints"]?
onResponseReceivedEndpoints = response["onResponseReceivedEndpoints"]
onResponseReceivedEndpoints.as_a.each do |item|
case item["reloadContinuationItemsCommand"]["slot"]
when "RELOAD_CONTINUATION_SLOT_HEADER"
header = item["reloadContinuationItemsCommand"]["continuationItems"][0]
when "RELOAD_CONTINUATION_SLOT_BODY"
contents = item["reloadContinuationItemsCommand"]["continuationItems"]
contents.as_a.reject! do |item|
if item["continuationItemRenderer"]?
moreRepliesContinuation = item["continuationItemRenderer"]["continuationEndpoint"]["continuationCommand"]["token"].as_s
true
end
end
end
end
else else
raise InfoException.new("Could not fetch comments") raise InfoException.new("Could not fetch comments")
end end
@ -111,6 +111,14 @@ def fetch_youtube_comments(id, cursor, format, locale, thin_mode, region, sort_b
end end
end end
continuationItemRenderer = nil
contents.as_a.reject! do |item|
if item["continuationItemRenderer"]?
continuationItemRenderer = item["continuationItemRenderer"]
true
end
end
response = JSON.build do |json| response = JSON.build do |json|
json.object do json.object do
if header if header
@ -126,7 +134,7 @@ def fetch_youtube_comments(id, cursor, format, locale, thin_mode, region, sort_b
json.array do json.array do
contents.as_a.each do |node| contents.as_a.each do |node|
json.object do json.object do
if !response["commentRepliesContinuation"]? if node["commentThreadRenderer"]?
node = node["commentThreadRenderer"] node = node["commentThreadRenderer"]
end end
@ -134,7 +142,7 @@ def fetch_youtube_comments(id, cursor, format, locale, thin_mode, region, sort_b
node_replies = node["replies"]["commentRepliesRenderer"] node_replies = node["replies"]["commentRepliesRenderer"]
end end
if !response["commentRepliesContinuation"]? if node["comment"]?
node_comment = node["comment"]["commentRenderer"] node_comment = node["comment"]["commentRenderer"]
else else
node_comment = node["commentRenderer"] node_comment = node["commentRenderer"]
@ -224,8 +232,15 @@ def fetch_youtube_comments(id, cursor, format, locale, thin_mode, region, sort_b
end end
end end
if moreRepliesContinuation if continuationItemRenderer
json.field "continuation", moreRepliesContinuation if continuationItemRenderer["continuationEndpoint"]?
continuationEndpoint = continuationItemRenderer["continuationEndpoint"]
elsif continuationItemRenderer["button"]?
continuationEndpoint = continuationItemRenderer["button"]["buttonRenderer"]["command"]
end
if continuationEndpoint
json.field "continuation", continuationEndpoint["continuationCommand"]["token"].as_s
end
end end
end end
end end