从html代码中获取youtube视频ID

时间:2013-06-14 07:39:53

标签: ruby-on-rails ruby regex youtube

我有像这样的HTML

<iframe width="560" height="315" src="http://www.youtube.com/embed/Wa6CA3YqV2Q" frameborder="0" allowfullscreen></iframe>

如何使用正则表达式获取视频ID Wa6CA3YqV2Q?还有其他方法可以达到这个目的吗?

UPD: 我使用过Nokogiri,我设法得到http://www.youtube.com/embed/Wa6CA3YqV2Q,那么我如何获得这个链接的视频ID?

5 个答案:

答案 0 :(得分:3)

以下代码将使用任何vimeo或youtube网址并返回视频ID和提供商。

在你的模特中

def parse_video_url(url)
    @url = url

    youtube_formats = [
        %r(https?://youtu\.be/(.+)),
        %r(https?://www\.youtube\.com/watch\?v=(.*?)(&|#|$)),
        %r(https?://www\.youtube\.com/embed/(.*?)(\?|$)),
        %r(https?://www\.youtube\.com/v/(.*?)(#|\?|$)),
        %r(https?://www\.youtube\.com/user/.*?#\w/\w/\w/\w/(.+)\b)
      ]

    vimeo_formats = [%r(https?://vimeo.com\/(\d+)), %r(https?:\/\/(www\.)?vimeo.com\/(\d+))]  

    @url.strip!

    if @url.include? "youtu"
      youtube_formats.find { |format| @url =~ format } and $1
      @results = {provider: "youtube", id: $1}
      @results
    elsif @url.include? "vimeo"  
      vimeo_formats.find { |format| @url =~ format } and $1
      @results = {provider: "vimeo", id: $1}
      @results
    else
      return nil # There should probably be some error message here
    end  
end

然后在你的控制器中打电话:

@results = @course.parse_video_url(@course.video_url)
# Access the hash with @results[:provider] or @results [:id]

在您的视图中,您可以编写IF语句来显示provider / id组合的相关嵌入代码。

答案 1 :(得分:1)

结束以下

string = 'http://www.youtube.com/embed/Wa6CA3YqV2Q'

result =  string.split('/').last

答案 2 :(得分:0)

你可以使用

string.scan(/src="\S+\/(\w+)"/)[0][0]

但是如果你正在做大量的html工作,我会建议使用像Nokogiri这样的全功能HTML解析器,或者更轻量级的东西。

答案 3 :(得分:0)

虽然您可以使用正则表达式解析它,但使用正则表达式解析任意html是不好的,除非您真的知道自己在做什么。围绕这个主题有很多历史争议,如果你有兴趣可以搜索它。

正确的方法是解析文档,有一个很好的rails解析器:

http://nokogiri.org/

答案 4 :(得分:0)

试试这个:

string = 'http://www.youtube.com/embed/Wa6CA3YqV2Q'
regex = /^(?:https?:\/\/)?(?:www\.)?\w*\.\w*\/(?:watch\?v=)?((?:p\/)?[\w\-]+)/
match = string.match(regex)
if match
  return match[1]
end
return ''

我从这里得到了它并稍微改了一下:Parsing youtube url