如何在 ruby​​ on rails 中显示 vimeo 和 youtube 嵌入链接的缩略图?

Posted

技术标签:

【中文标题】如何在 ruby​​ on rails 中显示 vimeo 和 youtube 嵌入链接的缩略图?【英文标题】:how to show thumbnails for vimeo and youtube embedded links in ruby on rails? 【发布时间】:2013-06-29 10:29:47 【问题描述】:

我已在我的网站中嵌入了 youtube 和 vimeo 链接,并尝试将视频的缩略图显示为点击时播放的链接。

我尝试了 gem "has_vimeo_video" 但它只接受 vimeo 视频。所以我想显示两个视频的缩略图,即 youtube 和 vimeo。

请需要解决方案。

谢谢

【问题讨论】:

【参考方案1】:

video_info gem 非常适合获取缩略图:

https://github.com/thibaudgg/video_info

【讨论】:

【参考方案2】:

我昨天发现有carrierwave-video-thumbnailer 这很酷。它基本上可以满足您的需求

Carrierwave 的缩略图插件。它混合到您的上传器设置中,并可以轻松地为您上传的视频制作缩略图。该软件目前还处于 Alpha 阶段,因此欢迎任何形式的开源合作。

但您当然需要在您的应用程序中包含载波。希望这会有所帮助

Carreierwave 是一个上传器,可以让用户在他们的应用中上传内容,我认为

更新

您也可以使用embedly,它允许您将嵌入式媒体添加到您的应用程序中。 API 提供了很多响应选项,如 here 所示。在这样做时,您可以执行以下操作:

$.embedly('http://www.youtube.com/watch?v=_FE194VN6c4',
           maxWidth: 600,
               elems: $('#element'),
             success: function(oembed, dict)
                        alert(oembed.title);
                      );

elems 属性是您希望嵌入视频的位置,以便在粘贴链接时嵌入视频。您需要传递视频 url 并使用 jQuery 选择器从您将 url 放在 html 中的任何位置获取它。

您的另一种选择是查看以下auto_html gem

【讨论】:

因为我只是嵌入链接并将 vimeo 和 youtube 链接保存到我的数据库中,然后想要显示缩略图并播放这些视频,所以carrierwave 会为嵌入链接制作缩略图吗?【参考方案3】:

在“/app/helper”中添加一个新文件“thumbnail_helper.rb”。将以下代码复制并粘贴到该文件中:

module ThumbnailHelper

  # Regex to find YouTube's and Vimeo's video ID
  YOUTUBE_REGEX = %r(^(http[s]*:\/\/)?(www.)?(youtube.com|youtu.be)\/(watch\?v=)0,1([a-zA-Z0-9_-]11))
  VIMEO_REGEX = %r(^https?:\/\/(?:.*?)\.?(vimeo)\.com\/(\d+).*$)

  # Finds YouTube's video ID from given URL or [nil] if URL is invalid
  # The video ID matches the RegEx \[a-zA-Z0-9_-]11\
  def find_youtube_id url
    url = sanitize url
    matches = YOUTUBE_REGEX.match url.to_str
    if matches
      matches[6] || matches[5]
    end
  end

  # Finds youtube video thumbnail
  def get_youtube_thumbnail url
    youtube_id = find_youtube_id url
    result = "http://img.youtube.com/vi/#youtube_id/0.jpg"
  end

  # Finds Vimeo's video ID from given URL or [nil] if URL is invalid
  def find_vimeo_id url
    url = sanitize url
    matches = VIMEO_REGEX.match url.to_str
    matches[2] if matches
  end

  # Finds vimeo video thumbnail
  def get_vimeo_thumbnail url
    vimeo_id = find_vimeo_id url
    result = URI.open("http://vimeo.com/api/v2/video/#vimeo_id.json").read
    begin
      JSON.parse(result).first['thumbnail_large']
    rescue StandardError
      nil
    end
  end

  # Main function
  # Return a video thumbnail
  # If the url provided is not a valid YouTube or Vimeo url it returns [nil]
  def get_video_thumbnail(url)
    if find_vimeo_id(url)
        get_vimeo_thumbnail(url)
    elsif find_youtube_id(url)
        get_youtube_thumbnail(url)
    end
  end
end

现在从您的视图中调用 get_video_thumbnail('video_url')。它将返回给定视频的缩略图。

【讨论】:

【参考方案4】:

你不需要任何宝石来完成这么简单的任务

url = 'https://vimeo.com/126100721'
id = url.partition('vimeo.com/').last
result = URI.open("http://vimeo.com/api/v2/video/#id.json").read

begin
  JSON.parse(result).first['thumbnail_large']
rescue StandardError
  nil
end

【讨论】:

以上是关于如何在 ruby​​ on rails 中显示 vimeo 和 youtube 嵌入链接的缩略图?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Ruby on Rails 中链接个人资料页面

如何在 ruby​​ on rails 中显示 Datatable 表格工具(复制、csv、excel、pdf、保存)

如何根据工作日Ruby on Rails显示数据

如何在带有ruby on rails的伪元素中显示来自svg sprite的图标

如何在 ruby​​ on rails 中发布数据

如果 Ruby on Rails 中有设置限制,如何显示特定的 div 元素