Fix redirect for shortened video urls

pull/451/head
Omar Roth 6 years ago
parent 6fd24ad54f
commit 9239cfb3c1

@ -4368,9 +4368,24 @@ get "/vi/:id/:name" do |env|
end
error 404 do |env|
if md = env.request.path.match(/^\/(?<id>[a-zA-Z0-9_-]{11})$/)
if md = env.request.path.match(/^\/(?<id>([a-zA-Z0-9_-]{11})|(\w+))$/)
id = md["id"]
client = make_client(YT_URL)
response = client.get("/#{id}")
if response.status_code == 301
response = client.get(response.headers["Location"])
end
html = XML.parse_html(response.body)
ucid = html.xpath_node(%q(//meta[@itemprop="channelId"]))
if ucid
env.response.headers["Location"] = "/channel/#{ucid["content"]}"
halt env, status_code: 302
end
params = [] of String
env.params.query.each do |k, v|
params << "#{k}=#{v}"
@ -4389,25 +4404,6 @@ error 404 do |env|
end
end
if md = env.request.path.match(/^\/(?<name>\w+)$/)
name = md["name"]
client = make_client(YT_URL)
response = client.get("/#{name}")
if response.status_code == 301
response = client.get(response.headers["Location"])
end
html = XML.parse_html(response.body)
ucid = html.xpath_node(%q(//meta[@itemprop="channelId"]))
if ucid
env.response.headers["Location"] = "/channel/#{ucid["content"]}"
halt env, status_code: 302
end
end
env.response.headers["Location"] = "/"
halt env, status_code: 302
end

Loading…
Cancel
Save