从Vimeo获取图像缩略图?

339

16
没问题,这是翻译的结果:是合法的——两个网站都以非常公开的方式提供这些详细信息,因为他们希望你使用他们的内容!毕竟所有嵌入的视频链接最终都会回到托管站点。 - Magnus Smith
1
如果您想确保页面不依赖于vimeo服务器,并且性能得到优化,我建议您使用JavaScript来实现。缺点是对于没有启用JavaScript的用户,它将无法显示缩略图,但适当的占位符和链接应该足够友好。(在您的vimeo API请求中将“.xml”更改为“.json”) - Myster
1
尝试这个答案:https://dev59.com/yXPYa4cB1Zd3GeqPimsy#17156853 - 它使得仅凭URL就能轻松获取有关任何vimeo视频的信息/数据。 - phirschybar
2
以这种方式,您可以获取视频图像:https://i.vimeocdn.com/video/528073804_200x200.webp - Pus
@Pus,不调用API是否有可能获取Vimeo视频的缩略图?我的意思是,是否有任何URL可以只传递ID,然后它就会返回.jpg缩略图。当我这样做时 http://i.vimeocdn.com/video/201990344.webp 它会返回错误的缩略图。这是我的测试视频链接 https://vimeo.com/201990344 - Farmer
@shailesh的解决方案不再起作用了。 - Shalev Levi
26个回答

5

我在PHP中编写了一个函数,让我可以做到这一点,希望对某些人有用。缩略图的路径包含在视频页面上的链接标签中。对我来说,这似乎很管用。

    $video_url = "http://vimeo.com/7811853"  
    $file = fopen($video_url, "r");
    $filedata = stream_get_contents($file);
    $html_content = strpos($filedata,"<link rel=\"videothumbnail");
    $link_string = substr($filedata, $html_content, 128);
    $video_id_array = explode("\"", $link_string);
    $thumbnail_url = $video_id_array[3];
    echo $thumbnail_url;

希望这能帮到任何人。 Foggson

3

这里是完美的解决方案 -

   URL Example : https://vumbnail.com/226020936.jpg
   URL method :  https://vumbnail.com/{video_id}.jpg

对我来说起作用了。


3
似乎是一个老问题,但我最近几个月有几个与Vimeo缩略图相关的项目,所以这对我非常重要。所有API V2都不适用于我,而i.vimeocdn.com链接每个月都会过时。我需要这个可持续的解决方案,为此我使用了oEmbed API:https://developer.vimeo.com/api/oembed 注意:当您尝试从被禁止的域访问时,您将收到403错误。仅使用目标域或将您的暂存/本地域列入白名单。
以下是我如何使用JS获取图片的方法:
async function getThumb (videoId) {
var url = 'https://vimeo.com/api/oembed.json?url=https%3A//vimeo.com/'+videoId+'&width=480&height=360';
try {
    let res = await fetch(url);
    return await res.json();
    
} catch (error) {
    console.log(error);
}

结果变量将从oEmbed API获得JSON。

接下来,在我的使用情况中,我需要将其作为视频归档的缩略图。我为每个缩略图包装器DIV添加了一个ID,名为“thumbnail-{{ID}}”(例如,“thumbnail-123456789”), 并在div中插入了一张图片。

getThumb(videoId).then(function(result) {
    var img = document.createElement('img'); 
    img.src = result.thumbnail_url; 
    document.getElementById('thumbnail-'+videoId).appendChild(img);
});

2

你可能想看一下Matt Hooks的Gem。https://github.com/matthooks/vimeo

它提供了一个简单的vimeo api包装器。

你只需要存储视频ID(如果你还要处理其他视频网站,则还需提供其提供商)。

你可以像这样提取vimeo视频ID:

def 
  get_vimeo_video_id (link)
        vimeo_video_id = nil
        vimeo_regex  = /http:\/\/(www\.)?vimeo.com\/(\d+)($|\/)/
        vimeo_match = vimeo_regex.match(link)


if vimeo_match.nil?
  vimeo_regex  = /http:\/\/player.vimeo.com\/video\/([a-z0-9-]+)/
  vimeo_match = vimeo_regex.match(link)
end

    vimeo_video_id = vimeo_match[2] unless vimeo_match.nil?
    return vimeo_video_id
  end

如果您需要使用YouTube,您可能会发现这很有用。

def
 get_youtube_video_id (link)
    youtube_video_id = nil
    youtube_regex  = /^(https?:\/\/)?(www\.)?youtu.be\/([A-Za-z0-9._%-]*)(\&\S+)?/
    youtube_match = youtube_regex.match(link)

if youtube_match.nil?
  youtubecom_regex  = /^(https?:\/\/)?(www\.)?youtube.com\/watch\?v=([A-Za-z0-9._%-]*)(\&\S+)?/
  youtube_match = youtubecom_regex.match(link)
end

youtube_video_id = youtube_match[3] unless youtube_match.nil?
return youtube_video_id
end

2
如果你正在寻找一种替代方案并能够管理 Vimeo 账户,那么还有另一种方法,你只需将想要展示的每个视频添加到一个相册中,然后使用 API 请求该相册的详细信息 - 它会显示所有缩略图和链接。这不是理想的解决方案,但可能有所帮助。 API 终端点(游乐场)@vimeoapi 的 Twitter 对话。

这可能不是最有效的方法,尤其是如果(1)你的其余代码不依赖于 Vimeo API,以及(2)你有一个好预感你的 API 调用可能超出 Vimeo 设定的限制。 - klewis
@blackhawk 你没有理解我的意思。这是另一种选择。如果你这样做,所有的视频都可以在一个 API 调用中完成。你可以在服务器端缓存它。 - sidonaldson

-4

对于像我这样最近试图弄清楚这个问题的人来说,

https://i.vimeocdn.com/video/[video_id]_[dimension].webp 对我很有效。

(其中dimension = 200x150 | 640)


1
不错的发现。这真的很干净。 - Ben Harrison
很棒,除了iOS上的Safari无法显示webp。 - Gregory Magarshak
9
这似乎是错误的 - 我得到了一张与实际视频无关的图片。 缩略图 URL 中使用的 ID 与视频 ID 不同 - 如果您调用 API,您将获得具有不同 ID 的此 URL。 没有从调用 API 中获得缩略图的捷径。 - Morten Holmgaard
12
不行,video_id和image_id不相同。因此,您会得到一张与您请求的视频不相关的图像。 - The SWE
视频ID和缩略图中的ID不同。 - Muhammad Hassaan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接