你如何确保 Vimeo 视频存在?

How do you make sure that Vimeo video exist?

所以,我试图仅在 Vimeo 视频存在时才显示它。我正在使用新的 JavaScript API.

根据他们的 documentationerror 事件应该在视频加载时遇到错误时触发。我相信,添加错误的 Vimeo 视频 URL 应该也会触发 error 事件。

这就是我为使 error 事件生效所做的工作:

<iframe id="vimeo-player1" src="https://player.vimeo.com/video/13333693532?autoplay=0&amp;background=1" frameborder="0" webkitallowfullscreen="" mozallowfullscreen="" allowfullscreen=""></iframe>

方法一

player = new Vimeo.Player($('#vimeo-player1'));

player.on('error', function() {
    console.log('Error in loading video');
});

方法二

player = new Vimeo.Player($('#vimeo-player1'));

player.loadVideo().then(function(id) {
    console.log('loaded');
}).catch(function(error) {
    console.error(error);
});

None 他们在工作。它从未执行错误块。

一些附加信息(帮助您赢得赏金):

如果源存在,您可以使用 http get 方法检查。

Jquery 得到:

$.get( "https://player.vimeo.com/video/13333693532?autoplay=0&amp;background=1")
.done(function() {
    alert( "success" );
})
.fail(function() {
    alert( "error" );
})

您可以使用 Vimeo API, there is videos endpoint which is meets your need. Here is the sample of this action in Vimeo Playground

但是,遗憾的是还没有 JS SDK,您可以在将页面发送到浏览器之前使用 Server-Side SDK 并检查视频是否存在,或者您需要深入研究并为客户端编写自己的实现并决定是否显示用户视频。

注意:运行本地或jsbin.com上的代码工作正常但在这里不行,不知道为什么。

以 MarcelD 所说的为基础:

var element1 = document.querySelector('#player1');
var element2 = document.querySelector('#player2');

var player1 = new Vimeo.Player(element1);
var player2 = new Vimeo.Player(element2);

element1.onload = function (data) { onLoad(data, 1) }
element2.onload = function (data) { onLoad(data, 2) }

function onLoad(data, id) {
  if (data.target.dataset.ready === undefined) {
    alert("#" + id + " video does not exist");
    return;
  } 
  alert("#" + id + " it exists");
}
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <script src="https://player.vimeo.com/api/player.js"></script>
</head>
<body>
<iframe id="player1" src="https://player.vimeo.com/video/215101645556" frameborder="0" webkitallowfullscreen="" mozallowfullscreen="" allowfullscreen=""></iframe>
<iframe id="player2" src="https://player.vimeo.com/video/215101646" frameborder="0" webkitallowfullscreen="" mozallowfullscreen="" allowfullscreen=""></iframe>
</body>
</html>

我发现的最简单的方法是使用 oEmbed 开放标准调用 Vimeo API:

function checkIfVideoExists(url, callback){
    $.ajax({
        type:'GET',
        url: 'https://vimeo.com/api/oembed.json?url=' + encodeURIComponent(url),
        dataType: 'json',
        complete: function(xhr) {
            callback(xhr.status);
        } 
    });
}

checkIfVideoExists("https://vimeo.com/217775903", function(status){
    console.log(status); // 200 - OK
});

checkIfVideoExists("https://vimeo.com/234242343", function(status){
    console.log(status); // 404 - Not found
});

Live example 在 jsFiddle 上。