【问题标题】:Youtube API - Function to retrieve video image thumbnails fails when finding deleted videoYoutube API - 查找已删除视频时检索视频图像缩略图的功能失败
【发布时间】:2013-05-05 23:54:12
【问题描述】:

我正在使用一个处理以逗号分隔的视频 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 不存在(已删除或私有)时,警报会立即弹出,但是当这种情况发生时,处于其当前代码状态的函数会暂停,并且不会检索找到现有 ID 的视频的任何缩略图在 CSV 字符串中。有没有办法按以下顺序遍历 CSV 字符串中找到的所有 ID? :

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

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

【问题讨论】:

    标签: jquery map youtube-api jsonp


    【解决方案1】:

    终于!一些谷歌搜索给了我这个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 循环中使用 new RegExp 和/或 replace 方法可以解决问题,哎呀,您甚至可以用您提供的自定义图像替换丢失的缩略图您上传到 Youtube 频道的单帧视频。希望这个答案对其他人有所帮助。 - 冷酷的

    【讨论】:

      猜你喜欢
      • 2015-03-26
      • 1970-01-01
      • 2017-11-15
      • 2011-12-01
      • 1970-01-01
      • 2015-10-10
      • 1970-01-01
      • 2014-06-04
      • 2017-02-15
      相关资源
      最近更新 更多