我已经用这个打了我的头,但我在这里遗漏了一些东西。
信息
我正在编写一个小型 javascript 页面,该页面将获取 Facebook 照片的照片 ID,然后返回总人数和分享者,然后找到每张照片的点赞数,并将其附上.
基本上这是一个“计算共享喜欢”
到目前为止,我设法查询了共享的总数,并在它们上找到了点赞,但是没有任何安排的意义,因为获取共享的 FB.API 函数与获取共享的 FB.API 函数是不同的请求喜欢。
目标
我一直在尝试做的是获取共享图像 ID(我用它来获取总喜欢)、人名、人员 ID 并将它们作为对象推送到数组中。
然后我将循环数组并附加喜欢的数量,同时检查并确保喜欢属于正确的人 ID。
所以我的最终数据数组看起来像:
[{"id" : "pageID_PostID", "name" : "Some Name", "idmin" : "This is the person ID", "likes" : "This is the total number of likes"}, {etc}, {etc}]
问题
1-console.log-ing 数组我将对象推送到设置它的函数的 OUTSIDE 作为空数组返回,即使我在全局范围内定义了数组。虽然 console.log-ing 它在函数内部按预期返回。
2-为什么我不能将 getLikes 函数与查找共享函数一起使用的原因是因为它出现为未定义或不匹配,我认为是因为它是不同的 FB.api 调用并且需要几毫秒来查询和获取结果, JS 通过它来决定它的未定义。
3-由于目标是将其全部格式化为 HTML,因此我需要以一种不错的格式排列结果,以便我可以使用它而不用做汤。哪个是数组[object, object, object]
代码
var pageAccessToken;
var shares = new Array();
function getShares(id){
FB.api('https://graph.facebook.com/' + id +'/sharedposts?access_token='+pageAccessToken, function(response)
{
for(var i = 0; i < response.data.length; i++)
{
if(response.data[i].story.indexOf('shared')){
var shareID = response.data[i].id;
var pageID = response.data[i].from.id;
var shareObj = new Object();
console.log(response.data[i].story);
console.log(" With Post ID " + shareID);
shareObj.id = response.data[i].id;
shareObj.name = response.data[i].from.name;
shareObj.idmin = response.data[i].from.id;
shareObj.likes = null;
shares.push(shareObj);
} //end if
} //end for loop
console.log(response.data.length + " People shared this photo.");
console.log("Inside call for shares array" + JSON.stringify(shares));
return shares; //I don't really get how return works cause its not helping anywhere!
}); //end fb api
} //end getShares
//function to retrieve likes
function getLikes(pageID, idmin){
FB.api('https://graph.facebook.com/' + pageID + '/likes? summary=1&access_token='+pageAccessToken, function(response)
{
for (var i = 0; i < shares.length - 1; i++) {
shares[i].likes = response.summary['total_count'];
console.log(shares[i].name + " has " + shares[i].likes + " likes.");
console.log(response.summary['total_count']);
}
});
}
//end getLikes
for (var i = 0; i < shares.length - 1; i++) {
getLikes(shares[i].id, shares[i].idmin);
}
getShares(insert a photo ID here);
console.log("2 Outside call for shares array" + JSON.stringify(shares));