我试图解析youtube网址。目前我的代码可以使用标准的YouTube网址。
https://www.youtube.com/watch?v=tYMFIIVOHyo
但是不要使用list或youtu.be喜欢这个
https://www.youtube.com/watch?v=tYMFIIVOHyo&list=UUH3V-b6weBfTrDuyJgFioOw
https://youtu.be/tYMFIIVOHyo?list=UUH3V-b6weBfTrDuyJgFioOw
https://youtu.be/tYMFIIVOHyo
我的代码是
module CampingsHelper
def embed(youtube_url)
youtube_id = youtube_url.split("=").last
content_tag(:iframe, nil, src: "//www.youtube.com/embed/#{youtube_id}")
end
我如何解决这个问题?
顺便提一下,如果网址不是来自youtube,我想显示提醒。
答案 0 :(得分:2)
你的代码没有做正确的事情,那就是使用Ruby附带的现有轮子URI:
require 'uri'
uri = URI.parse('https://www.youtube.com/watch?v=tYMFIIVOHyo&list=UUH3V-b6weBfTrDuyJgFioOw')
uri.host # => "www.youtube.com"
uri.query # => "v=tYMFIIVOHyo&list=UUH3V-b6weBfTrDuyJgFioOw"
uri.query && URI.decode_www_form(uri.query).to_h # => {"v"=>"tYMFIIVOHyo", "list"=>"UUH3V-b6weBfTrDuyJgFioOw"}
uri.query && URI.decode_www_form(uri.query).to_h['list'] # => "UUH3V-b6weBfTrDuyJgFioOw"
uri = URI.parse('https://youtu.be/tYMFIIVOHyo?list=UUH3V-b6weBfTrDuyJgFioOw')
uri.host # => "youtu.be"
uri.query # => "list=UUH3V-b6weBfTrDuyJgFioOw"
uri.query && URI.decode_www_form(uri.query).to_h # => {"list"=>"UUH3V-b6weBfTrDuyJgFioOw"}
uri.query && URI.decode_www_form(uri.query).to_h['list'] # => "UUH3V-b6weBfTrDuyJgFioOw"
uri = URI.parse('https://youtu.be/tYMFIIVOHyo')
uri.host # => "youtu.be"
uri.query # => nil
uri.query && URI.decode_www_form(uri.query).to_h # => nil
uri.query && URI.decode_www_form(uri.query).to_h['list'] # => nil
URI了解规范并拥有可轻松拆分和构建URI的工具。你可以尝试建立自己的,但很有可能你会错过一些东西,所以要充分利用经过充分测试的图书馆。
答案 1 :(得分:1)
您可以使用正则表达式:
youtube_id = youtube_url[/(?<=v=)[^&]+|(?<=https:\/\/youtu.be\/)[^&?]+/]
要显示提醒,只需检查该网址是否以https://www.youtube.com
,https://youtube.com
或https://youtu.be