私はこれで隅々まで頭を悩ませましたが、ここで何かが欠けています.
情報
Facebookの写真の写真IDを取得し、合計人数とそれを共有した人を返し、各写真のいいねの数を見つけて、それと一緒に添付する小さなJavaScriptページをコーディングしています.
基本的には「共有いいね数の計算」です
これまでのところ、シェアの総数を照会していいね! を見つけることができましたが、シェアを取得する FB.API 関数と、好き。
ゴール
私がやろうとしているのは、共有イメージ ID (いいね! の総数を取得するために使用します)、人物の名前、人物 ID を取得し、それらをオブジェクトとして配列にプッシュすることです。
次に、配列を for ループして、いいね! の数をアタッチし、いいね! が正しい人物 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する 配列をグローバルに定義したにもかかわらず、設定した関数の外側にオブジェクトをプッシュしていますが、空の配列として返されます。関数内で console.log-ing を実行すると、期待どおりに戻ります。
2-getLikes 関数を共有検索関数と一緒に使用できない理由は、それが未定義または不一致として出てくるためです。別の FB.api 呼び出しであり、クエリを実行して結果を取得するのに数ミリ秒かかるためだと思います。 JSが未定義を決定する方法。
3-目標はすべてをHTMLにフォーマットすることであるため、結果をうまく整理して、スープを作らずに作業できるようにする必要があります。配列[オブジェクト、オブジェクト、オブジェクト]
コード
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));