0

我正在使用处理以逗号分隔的视频 ID 字符串的函数检索 Youtube 视频缩略图等:

function videoIDs(){
var videoArray = $("#comma-delimited-IDs").val().split(",");
var defArray = $.map(videoArray, function (videoIDs) {
var requestURLs = '//gdata.youtube.com/feeds/api/videos/'+ videoIDs +'?v=2&
format=5alt=json-in-script&callback=?';
return $.ajax({
type: "get",
dataType: "jsonp",
url: requestURLs,
success: function(data) {}
});
});
$.when.apply(null,defArray).done(function(){
$.each(arguments,function(i,arg){
var data = arg[0];
...

map 和 done 方法首先检索所有视频,按照它们基于逗号分隔的字符串出现的时间顺序,然后在页面上显示它们。如果不使用此方法,Youtube 将返回更快但随机顺序的视频缩略图。上述功能适用于 2 个或更多视频 ID,而不适用于单个视频 ID。我目前的问题是当 Youtube 服务器上不再存在视频时,包含缺少 ID 的逗号分隔 ID 字符串会引发故障,从而使该函数无法检索反映字符串中 ID 的任何现有视频。对此的解决方法将不胜感激。

注意:我希望能够检索已删除视频的缩略图(Youtube 的默认已删除视频缩略图),包括那些可用以保持原始视频缩略图总数不变(基于 ID 字符串)。谢谢样品/建议。

更新

跨域问题似乎阻碍了本机 ajax/jsonp 进程的错误处理,但幸运的是,jQuery-jsonp 使用 1kb 插件缓解了这一问题(参见:https ://github.com/jaubourg/jquery-jsonp )。以下修改后的代码现在如下所示:

function videoIDs(){
var videoArray = $("#comma-delimited-IDs").val().split(",");
var defArray = $.map(videoArray, function (videoIDs) {
var requestURLs = '//gdata.youtube.com/feeds/api/videos/'+ videoIDs +'?v=2&
format=5alt=json-in-script&callback=?';
return $.jsonp({  // replace $.ajax({ with $.jsonp({ 
type: "get",
dataType: "jsonp",
url: requestURLs,
success: function(data) {},
error: function(d,msg) {
alert("Error. Video ID non existant.");

// add function here to skip missing ID and proceed to next ID in CSV string

}
});
});
$.when.apply(null,defArray).done(function(){
$.each(arguments,function(i,arg){
var data = arg[0];

... // code that displays Youtube thumbnails etc of available IDs.

因此,现在当视频 ID 不存在(已删除或私有)时会立即弹出警报,但是当发生这种情况时,处于其当前代码状态的函数会停止并且不会检索在 CSV 中找到现有 ID 的视频的任何缩略图细绳。有没有办法按以下顺序遍历 CSV 字符串中找到的所有 ID?:

  1. 请求CSV字符串中第一个ID的数据;
  2. 如果警报(或未找到),则忽略并转到 CSV 字符串中的第二个 ID,否则,返回第一个 ID 的数据(缩略图等),然后当完成时,转到 CSV 字符串中的第二个 ID;
  3. 在所有 CSV 字符串中按时间顺序重复上述过程,直到完成。

我对 ajax-jsonp 方法有点陌生,我的 jQuery 级别仍然是初学者。我希望有人可以提出一个可行的解决方案,谢谢帮助。

4

1 回答 1

0

最后!一些谷歌搜索给了我这个jQuery-jsonp插件支持的成功/错误处理的kool示例(见上文):

success: function(json, value) {
console.log(your-string-of-IDs);
},
error: function(xOptions, textStatus){
console.log(your-string-of-IDs);
}

现在只需要用过滤掉那些丢失的缩略图所需的函数来替换 console.logs 即可。错误函数有效地处理格式错误的视频 ID 和已删除/私有视频 ID。在简单的 $.each 循环中使用新的 RegExp和/或替换方法可以解决问题,哎呀,您甚至可以用您上传到 Youtube 频道的单帧视频提供的自定义图像替换丢失的缩略图。希望这个答案对其他人有所帮助。- 库尔尼斯

于 2013-05-08T02:36:27.317 回答