|
|
@ -816,7 +816,7 @@ end
|
|
|
|
|
|
|
|
|
|
|
|
def extract_polymer_config(body)
|
|
|
|
def extract_polymer_config(body)
|
|
|
|
params = {} of String => JSON::Any
|
|
|
|
params = {} of String => JSON::Any
|
|
|
|
player_response = body.match(/window\["ytInitialPlayerResponse"\]\s*=\s*(?<info>.*?);\n/)
|
|
|
|
player_response = body.match(/(window\["ytInitialPlayerResponse"\]|var\sytInitialPlayerResponse)\s*=\s*(?<info>{.*?});/m)
|
|
|
|
.try { |r| JSON.parse(r["info"]).as_h }
|
|
|
|
.try { |r| JSON.parse(r["info"]).as_h }
|
|
|
|
|
|
|
|
|
|
|
|
if body.includes?("To continue with your YouTube experience, please fill out the form below.") ||
|
|
|
|
if body.includes?("To continue with your YouTube experience, please fill out the form below.") ||
|
|
|
@ -914,11 +914,15 @@ def extract_polymer_config(body)
|
|
|
|
.try { |r| JSON.parse(r["info"]) }.try &.["args"]["player_response"]?
|
|
|
|
.try { |r| JSON.parse(r["info"]) }.try &.["args"]["player_response"]?
|
|
|
|
.try &.as_s?.try &.try { |r| JSON.parse(r).as_h }
|
|
|
|
.try &.as_s?.try &.try { |r| JSON.parse(r).as_h }
|
|
|
|
|
|
|
|
|
|
|
|
return params if !initial_data
|
|
|
|
if initial_data
|
|
|
|
|
|
|
|
|
|
|
|
{"playabilityStatus", "streamingData"}.each do |f|
|
|
|
|
{"playabilityStatus", "streamingData"}.each do |f|
|
|
|
|
params[f] = initial_data[f] if initial_data[f]?
|
|
|
|
params[f] = initial_data[f] if initial_data[f]?
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
{"playabilityStatus", "streamingData"}.each do |f|
|
|
|
|
|
|
|
|
params[f] = player_response[f] if player_response[f]?
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
params
|
|
|
|
params
|
|
|
|
end
|
|
|
|
end
|
|
|
|