如何在 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 中显示 Datatable 表格工具(复制、csv、excel、pdf、保存)