我正在创建一个处理YouTube API的对象,我有两种方法:
getCommentList
- 获取当前上传的网址,例如http://gdata.youtube.com/feeds/api/videos/VIDEO_ID/comments?alt=json
并返回一系列对象 - 评论的作者和评论的内容。getEntriesObject
- 返回一个包含每个上传条目对象的数组,我们有标题,缩略图和从getCommentList
我的jQuery代码:
var Youtube = {
getCommentObject : function(url){
if( url ){
var currentCommentFeed = {},
commentsList = [];
$.getJSON(url,function(data){
$.each(data.feed.entry,function(index){
currentCommentFeed = this;
commentsList.push({
author : currentCommentFeed.author[0].name.$t,
content : currentCommentFeed.content.$t
});
});
return commentsList;
});
}
},
getEntriesObject : function(){
var username = 'SOMEYOUTUBEUSERHERE',
url = 'http://gdata.youtube.com/feeds/api/users/' + username + '/uploads?alt=json',
currentEntry = {},
currentObject = {},
entryList = [];
// Scope fix
var that = this;
$.getJSON(url,function(data){
$.each(data.feed.entry, function(index){
// Caching our entry
currentEntry = this;
// Adding our entry title and thumbnail
currentObject = {
title: currentEntry.title.$t
};
if(currentEntry.media$group.media$thumbnail.length == 4)
currentObject['thumbnail'] = currentEntry.media$group.media$thumbnail[3].url;
// Let`s get the comments - undefined....
currentObject['comments'] = that.getCommentObject(currentEntry.gd$comments.gd$feedLink.href + "?alt=json");
console.log(currentObject);
entryList.push(currentObject);
});
});
return entryList;
}
/*
entry[i].title.$t
entry[i].gd$comments.gd$feedLink.href + "?alt=json"
entry[i].media$group.media$thumbnail[3]
// Comments
entry[i].author.name.$t
entry[i].author.content.$t
*/
};
我有console.log(currentObject)
并且正在获得头衔。但我没有得到缩略图网址和评论。
此外,当我运行getEntriesObject
时,我得到一个空数组。
答案 0 :(得分:3)
当您在回调函数中调用return $.getJSON
时,您只返回该回调函数,而不是“外部”getCommentObject
。因此,当您稍后致电that.getCommentObject
时,您无法获得任何回报(undefined
)。
getCommentObject: function(url){
if( url ){
// Snip ...
$.getJSON(url,function(data){
// Snip ...
return commentsList; // <- Here
});
}
}
要修改此make getCommentObject
,请使用回调函数。
getCommentObject: function(url, callback){
if( url ){
// Snip ...
$.getJSON(url,function(data){
// Snip
// Remove the return statement
callback(commentsList);
});
}
}
像这样调用此函数:
that.getCommentObject(
currentEntry.gd$comments.gd$feedLink.href + "?alt=json",
function (commentsList) {
currentObject['comments'] = commentsList;
});
更换
currentObject['comments'] = that.getCommentObject(currentEntry.gd$comments.gd$feedLink.href + "?alt=json");
答案 1 :(得分:1)
您收到空注释,因为return语句位于错误的位置。它位于getJSON回调函数中。您需要将它从第19行移动到21,以便它成为getCommentObject的return语句。这将解决第一个问题。 (评论未定义)
第二个getEntriesObject为空,因为对于某些用户,youtube正在为json请求返回“Service Unavailable”错误。当我在youtube上尝试使用一些随机用户名时,就会发生这种情况。
我使用youtube用户名“google”检查了您的程序。更改返回语句后,它工作正常。
希望这有帮助。