Youtube数据API v. 3 -显示私人/删除视频的频道作者名称

Youtube Data API v. 3 - Display channel author name of private / deleted video

本文关键字:视频 删除 频道 API 数据 显示 Youtube      更新时间:2023-09-26

这是Youtube内部非常适得其反的决定之一。如果我错了请纠正我,但他们目前不想暴露私人/删除视频的频道名称。如果发生这种情况,他们甚至称之为"bug"(http://code.google.com/p/gdata-issues/issues/detail?id=5893)。那么,如果我只请求事先公开但后来变成私人或删除的视频id,会发生什么呢?我会得到,通过使用youtube数据API v3,一个"响应是未定义的"错误信息在控制台上。当这条信息出现时,会发生什么?我的代码坏了!

这是我目前使用的代码:

function DisplayThemVideos(yeah) {
var yeah = $("#ThoseMissingIDs").text();
var vidrequestOptions = {
id: yeah,
part: 'snippet',
fields: 'items(id),items(snippet(channelId)),items(snippet(channelTitle)),
items(snippet(title)),items(snippet(thumbnails(default)))'
};
var vidrequest = gapi.client.youtube.videos.list(vidrequestOptions);
vidrequest.execute(function(response) {
var videoIdItems = response.result.items;
if (videoIdItems) { // If results
displayResults(videoIdItems);
} else { // if NO results
alert('Sawwy, YouLose, thx to Youtube!'); // This alert never fires!
}
});
}

现在未定义的"响应"实际上是一个空请求从Youtube服务器发送回我的应用程序。Youtube回答了一个空的"项目"标签,这显然对displayResults(videoIdItems)函数没有多大帮助,该函数在没有任何项目显示的情况下被触发!他们至少应该让频道名和频道ID通过过滤器,这样用户就可以点击链接来访问该频道的剩余公共视频(这不是很有成效吗?)。

所以我的困境是让else部分像这样工作:

displayResults(videoIdItems);
} else { // if NO results or if results return EMPTY or response "undefined"
alert('Sorry pal but these IDs ___________ are currently missing.
Click the Channel link to access the public videos of that channel.');
}

else部分的工作,因为它应该为类似的API调用演示在Youtube数据API v.3样例代码,但我猜它目前不能处理空请求。

那我该怎么办呢?我是否必须使用ajax调用成功失败错误处理?就像我之前说的,API返回一个空的请求,所以响应是合法的,但响应内容是空的私人/删除的视频,因此,"未定义"的代码破坏一路上。

任何提示导致一个工作的解决方案将帮助!谢谢你的指导。

我只能回答部分问题。最简单的是使用Try - Catch方法的Catch检测除语法错误之外的一切,有助于检测空响应(未定义)并激活您的功能,可以访问Youtube播放器以显示缺失ID的当前可用性状态:

...
var vidrequest = gapi.client.youtube.videos.list(vidrequestOptions);
vidrequest.execute(function(response) {
try {
var videoIdItems = response.result.items;
if (videoIdItems) { // If results
displayResults(videoIdItems);
return false;
}
} catch (e) {
// put code here that handles errors such as empty or undefined response
// which otherwise breaks your code
} finally {
// optionally, put code here that will always trigger
}
});

希望对大家有所帮助