将常规Youtube"链接"转换为嵌入式视频

ssc*_*rus 32 youtube ruby-on-rails ruby-on-rails-3

我的目标:我试图允许用户在我的网站中嵌入Youtube视频的链接,同时让我控制播放器的设置.

我想通过只要求用户提供链接(而不是整个嵌入代码)来实现这一点,从那里我可以以某种方式将该链接粘贴到嵌入代码中.

我尝试用一​​些Youtube链接(http://youtu.be/...)做一个简单的替换,但它们不起作用,说"电影未加载".有可靠的方法吗?

Dou*_*rer 68

我经常为客户做这件事,其中的要点是你从URL解析出ID,然后iframe使用它生成HTML.

def youtube_embed(youtube_url)
  if youtube_url[/youtu\.be\/([^\?]*)/]
    youtube_id = $1
  else
    # Regex from # http://stackoverflow.com/questions/3452546/javascript-regex-how-to-get-youtube-video-id-from-url/4811367#4811367
    youtube_url[/^.*((v\/)|(embed\/)|(watch\?))\??v?=?([^\&\?]*).*/]
    youtube_id = $5
  end

  %Q{<iframe title="YouTube video player" width="640" height="390" src="http://www.youtube.com/embed/#{ youtube_id }" frameborder="0" allowfullscreen></iframe>}
end

youtube_embed('youtu.be/jJrzIdDUfT4')
# => <iframe title="YouTube video player" width="640" height="390" src="http://www.youtube.com/embed/jJrzIdDUfT4" frameborder="0" allowfullscreen></iframe>
Run Code Online (Sandbox Code Playgroud)

我把它放在帮助器里.改变高度,宽度和选择的味道.

  • 别人注意:如果你在视图中使用`youtube_embed`作为.erb,添加`raw`,即`<p> <%= raw(youtube_embed(@ experiment.researchsection.videolink))%> </ p>`.谢谢@PrestonSpratt. (11认同)

And*_*icz 7

另一个答案是使用这个处理youtube和vimeo的gem,可以扩展到更多.它还可以与AR集成,因此您可以缓存生成的html,而不是在每个渲染上进行过滤:

https://github.com/dejan/auto_html


小智 7

我使用youtube_embed函数获得了最高评价的答案但是当我在我的视图中实现时,我看到iframe代码出现在我的页面中,但没有视频.我在函数调用之前添加了raw,现在页面都很好.

在我的view.html.erb中

<p><%= raw(youtube_embed(@experiment.researchsection.videolink)) %></p>
Run Code Online (Sandbox Code Playgroud)