首页 文章

如何使用Vimeo API版本3(beta)和jQuery Ajax执行视频搜索?

提问于
浏览
0

Late Breaking Update:

嗨Dashron,

我一直在做一些独立的研究,我所看到的是,支持jQuery Ajax的所有其他视频API,即JSONP将在API调用期间提供以下文件:

crossdomain.xml基本上是这样的:

<cross-domain-policy>
<allow-access-from domain="*" />
<allow-http-request-headers-from domain="*" headers="*" />
<site-control permitted-cross-domain-policies="master-only" />
</cross-domain-policy>

这是CORS的核心 . 我从YouTube,SoundCloud和DailyMotion获取此文件 .

但是,当使用fiddler实用程序根据您的建议调试Vimeo API测试时,此文件永远不会出现在流量交换中 .

此外,如果我将Ajax调用类型更改为仅JSON(无JSONP),我会收到302响应,指示重定向,但会根据您的说明显示接受标头 . 显然JSONP是必需的,或者客户端API没用,但这让我相信你的API团队有:

A.未经过测试的jQuery AJAX和; B.未启用CORS

我希望这可以帮助您获得符合jQuery Ajax JSONP流量的API v.3.0 CORS .

谢谢,

莱恩

Original Missive:

我正在尝试使用jQuery Ajax来执行简单的视频搜索 .

根据Vimeo API支持,新的beta api版本3支持此功能:

从他们给我的电子邮件中摘录:

好消息是,API3将支持此功能 . 它目前处于测试阶段,但我们有很多人在 生产环境 应用中使用它 .

您可以在https://developer.vimeo.com/apps/new?oauth2=enabled创建一个新应用,或者通过在应用编辑页面的末尾添加“?oauth2 = enabled”在您的应用上启用它 . 您可以在developer.vimeo.com/api/docs上找到非常早期的文档 .

只要您在请求中不包含应用程序秘密,一切都应该正常工作 . 如果您遇到任何问题,请告诉我! END EXCERPT

我尝试使用以下代码执行此操作失败:

var urlX ='http://api.vimeo.com/videos?query=elvis';

$.ajax({
    url: urlX,
    type: "GET",
    beforeSend: function (req) {
        req.setRequestHeader("Vimeo-Client-ID", "<My API Key>");
        req.setRequestHeader('Content-type', 'application/xml; charset=UTF-8');
    },
    dataType: "jsonp",
    success: function (data) {
        alert("SUCCESS");
    },
    error: function (xhr, ajaxOptions, thrownError) {
        alert("Error: " + thrownError);
    }
});

}

我通过参考以下规范来构建它:

https://developer.vimeo.com/api/docs/spec

这不起作用 . 任何人都可以提供帮助,因为它已经过了3天而没有来自Vimeo API支持的任何进一步响应 .

谢谢!

更新:

我试过这个并没有用 . 请提供示例代码以节省时间 . 非常感谢!!

谢谢回复 . 不幸的是,这不起作用:

urlX ='http://api.vimeo.com/videos?query=elvis&client_id=XXXXXXXX';

$.ajax({
    url: urlX,
    type: "GET",
    beforeSend: function (req) {
        req.setRequestHeader('Accept', 'application/vnd.vimeo.*+json;version=3.0');
    },
    dataType: "jsonp",
    success: function (data) {
        alert("SUCCESS");
    },
    error: function (xhr, ajaxOptions, thrownError) {
        alert("Error: " + thrownError);
    }
});

我也试过这个不成功...... :((

urlX ='http://api.vimeo.com/videos?query=elvis&client_id=XXXXXXXX';

$.ajax({
    url: urlX,
    type: "GET",
    headers {
       "Accept": "application/vnd.vimeo.*+json;version=3.0"
    },
    dataType: "jsonp",
    success: function (data) {
        alert("SUCCESS");
    },
    error: function (xhr, ajaxOptions, thrownError) {
        alert("Error: " + thrownError);
    }
});

我也试过这个:

$.ajax({
    url: urlX,
    type: "GET",
    headers {
       "Content-Type": "application/vnd.vimeo.*+json;version=3.0"
    },
    dataType: "jsonp",
    success: function (data) {
        alert("SUCCESS");
    },
    error: function (xhr, ajaxOptions, thrownError) {
        alert("Error: " + thrownError);
    }
});

最后我按照以下StackOverflow文章尝试了这个:Cannot properly set the Accept HTTP header with jQuery

$.ajax({
    url: urlX,
    type: "GET",
    headers {
       Accept: "application/vnd.vimeo.*+json;version=3.0",
       "Content-Type": "application/vnd.vimeo.*+json;version=3.0"
    },
    dataType: "jsonp",
    success: function (data) {
        alert("SUCCESS");
    },
    error: function (xhr, ajaxOptions, thrownError) {
        alert("Error: " + thrownError);
    }
});

没有任何特定的错误消息我无法推断出解决方案,如果提供了一个工作示例,我将非常感激 . 我相信它会帮助其他使用v3.0 API的jQuery开发人员 .

谢谢!!

UPDATE - 看起来像跨域安全问题

我的一位开发人员看了这个并建议,因为json经历了但不是jsonp,所以有一个“CORS”iissue;换句话说,根据收到的错误,您的API不允许跨域请求:

错误:未调用jQuery18305652002056594938_1376096997218

我认为你们应该从 a domain other than vimeo.com 绝对测试这个,因为我们可以永远来回,但是如果不支持跨域调用,那么我的编码量不会影响到这一点 . 这是您的员工启用跨域请求的工作 .

urlX = 'http://api.vimeo.com/videos?query=elvis&client_id=d0b4a83fc5c12570e9270fc54ef6ecabb8675fcf';

    $.ajax({
        url: urlX,
        type: "GET",
        beforeSend: function (req) {
            req.setRequestHeader('Accept', 'application/vnd.vimeo.*+json;version=3.0');
        },
        dataType: "jsonp",
        success: function (data) {
            alert("SUCCESS");
        },
        error: function (xhr, ajaxOptions, thrownError) {
            $("#errorMsg").text(thrownError);
        }
    });
}

谢谢,

莱恩

2 回答

  • 0

    感谢Vimeo的支持,我终于能够获得一个工作样本 . 我的错误是假设JSONP是必需的,即使它不是 . 由于Vimeo在其API 3.0版本中启用了CORS,因此jQuery getJSON()函数将在跨域工作 .

    这是一个工作样本 . 希望这会节省一些时间和精力 .

    function TestVimeo() {
    
            urlX = 'https://api.vimeo.com/videos?query=elvis&client_id=XXXXXXXXXXXXXX';
    
            $.getJSON(urlX, function (data) { console.log(data); })
            .success(function (payload) {
    
                console.log("second success");
            })
            .error(function (jqXHR, textStatus, errorThrown) {
    
                console.log('******* ' + "error: " + textStatus + ' *******');
    
            });
    
        }
    
  • 1

    看起来规格已经过时了 .

    Vimeo-Client-ID标头不再受到尊重 . 您需要做的就是将您的客户端ID作为查询字符串参数添加到URL .

    http://api.vimeo.com/videos?query=elvis&client_id=XXXXXXXXX

    此外,您需要提供文档中所述的正确接受标头, Accept: application/vnd.vimeo.*+json;version=3.0

相关问题