Javascript YouTube API-从URL列表获取视频分级
我有一个YouTube视频的URL列表。我想使用YouTube API来查找每个用户的评分和评分计数。API提供了一种使用URL查找此信息的方法,但仅限于单个视频: 我可以发送一堆同步AJAX请求,但这太慢了。我尝试异步发送它们并等待它们全部完成,如下所示:Javascript YouTube API-从URL列表获取视频分级,javascript,ajax,jquery,youtube-api,Javascript,Ajax,Jquery,Youtube Api,我有一个YouTube视频的URL列表。我想使用YouTube API来查找每个用户的评分和评分计数。API提供了一种使用URL查找此信息的方法,但仅限于单个视频: 我可以发送一堆同步AJAX请求,但这太慢了。我尝试异步发送它们并等待它们全部完成,如下所示: MyObj.prototype.getYTData = function (urls) { var self = this, requests = 0, vids = []; $.each
MyObj.prototype.getYTData = function (urls) {
var self = this,
requests = 0,
vids = [];
$.each(urls, function (i, vidUrl) {
var id = self.getURLParameter(vidUrl, 'v');
requests += 1;
$.ajax({
type: 'GET',
url: 'https://gdata.youtube.com/feeds/api/videos/' + id + '?v=2',
data: { alt: 'jsonc' },
success: function (data) {
self.isGood(data.data) && vids.push(data.data);
},
complete: function () {
requests -= 1;
}
});
});
while (requests) {};
};
这个函数似乎永远挂起。我猜这是因为我向服务器发送了太多的请求。我可以在请求之间设置一个小的延迟,但我认为应该有更好的方法来实现这一点
获取所有URL的分级信息的好方法是什么?我的解决方案最终使用了setTimeout和jQuery Deferred对象,以便在请求完成后执行代码。幸运的是,堆栈溢出已经有了一个使用单个请求的方法 我最终做了这样的事:
MyObj.prototype.getYTData = function (vidIDs) {
var IDGroup = $.map(vidIDs, function (id) {
if (id.indexOf('-') == -1) {
return id;
}
return '"' + id + '"';
}).join('|');
$.ajax({
type: 'GET',
url: 'https://gdata.youtube.com/feeds/api/videos?v=2&q=' + IDGroup,
data: { alt: 'jsonc' },
success: function (data) {
// Process data
}
});
};