从 html 代码获取 youtube 视频 ID

Avd*_*ept 2 ruby regex youtube ruby-on-rails

我有这样的html

<iframe width="560" height="315" src="http://www.youtube.com/embed/Wa6CA3YqV2Q" frameborder="0" allowfullscreen></iframe>
Run Code Online (Sandbox Code Playgroud)

如何Wa6CA3YqV2Q使用正则表达式获取视频 ID ?还有其他方法可以实现这一目标吗?

UPD:我使用过 Nokogiri,我设法获得http://www.youtube.com/embed/Wa6CA3YqV2Q了具有此链接的视频的 id,那么我如何获得 id?

小智 5

下面的代码将采用任何 vimeo 或 youtube URL 并返回视频 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
Run Code Online (Sandbox Code Playgroud)

然后在您的控制器中调用:

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

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