如何使用 Redcarpet for Rails 在 Markdown 中嵌入 YouTube 视频?

Posted

技术标签:

【中文标题】如何使用 Redcarpet for Rails 在 Markdown 中嵌入 YouTube 视频?【英文标题】:How to embed a YouTube video in Markdown with Redcarpet for Rails? 【发布时间】:2014-04-14 03:40:00 【问题描述】:

我在 Rails 4.1 中使用Redcarpet's Markdown parser,以便员工可以通过某种格式将消息相互写入。我希望他们也能够嵌入 youtube 视频。可能是这样的:

Hey, *check out* my video: [VMD-z2Xni8U](youtube)

那会输出:

嘿,看看我的视频:<iframe width="560" height="315" src="//www.youtube.com/embed/VMD-z2Xni8U" frameborder="0" allowfullscreen></iframe>

有没有办法在 Redcarpet 的 Markdown 解析器中做到这一点?我想我必须编写某种自定义解析器?如果有办法,这样做的适当方法是什么?是否有标准的 Markdown 方式来执行此操作?

【问题讨论】:

【参考方案1】:

最简单的解决方案似乎如下。我在 Markdown 中使用 http://youtube/VMD-z2Xni8U 来嵌入 YouTube 视频。然后我允许在 Redcarpet 中自动链接以自动链接。

# /lib/helpers/markdown_renderer_with_special_links.rb
class MarkdownRendererWithSpecialLinks < Redcarpet::Render::html
  def autolink(link, link_type)
    case link_type
      when :url then url_link(link)
      when :email then email_link(link)
    end
  end
  def url_link(link)
    case link
      when /^http:\/\/youtube/ then youtube_link(link)
      else normal_link(link)
    end
  end
  def youtube_link(link)
    parameters_start = link.index('?')
    video_id = link[15..(parameters_start ? parameters_start-1 : -1)]
    "<iframe width=\"560\" height=\"315\" src=\"//www.youtube.com/embed/#video_id?rel=0\" frameborder=\"0\" allowfullscreen></iframe>"
  end
  def normal_link(link)
    "<a href=\"#link\">#link</a>"
  end
  def email_link(email)
    "<a href=\"mailto:#email\">#email</a>"
  end
end

然后我创建一个markdown 方法,以便在显示降价内容时在任何视图或控制器中使用:

# /app/helpers/application_helper.rb
module ApplicationHelper
  require './lib/helpers/markdown_renderer_with_special_links'
  def markdown(content)
    @markdown ||= Redcarpet::Markdown.new(MarkdownRendererWithSpecialLinks, autolink: true, space_after_headers: true, fenced_code_blocks: true)
    @markdown.render(content).html_safe
  end
end

【讨论】:

youtube/VMD-z2Xni8U 不是真正的 youtube 链接。 youtube 链接是 youtube.com/v=VMD-z2Xni8U 或 youtu.be/VMD-z2Xni8U 或 youtube.com/watch=VMD-z2Xni8U 等,而您的脚本不起作用

以上是关于如何使用 Redcarpet for Rails 在 Markdown 中嵌入 YouTube 视频?的主要内容,如果未能解决你的问题,请参考以下文章

Markdown 实时预览,如用于 rails 上 redcarpet 的 ***

Rails/ERB 与 Redcarpet:HTML 消失

使用 Redcarpet 和 Pygments.rb 在我的 Rails 4.0.4 应用程序中突出显示代码语法?

Rails / Redcarpet:Markdown->带有链接属性的HTML在帮助器中不起作用

是否可以将 Redcarpet 扩展为从链接自动嵌入 youtube 视频?

捆绑安装后Rails 3 Gemfile Gems未加载