這邊我的做法是去計算在我的塗鴉牆上,有回應的人,以及有哪些人按讚;其中一則stream訊息只能點一次贊,所以計算一次;而回應stream可能會有一次以上的情況,所以我是記算有幾次回應就計幾次。
前置的作業,也就是初始化FB的部分,就不額外講解了,如有需要請參考 使用 Javascript Facebook SDK with Graphic API。
這邊要記得要求相關的 Permission:read_stream 這樣才有辦法獲得 User 塗鴉牆上的資料,再登入完成之後,我們就要開始讀取塗鴉牆上的文章:
在這邊我使用fql的方式來取得相關的資料
//宣告相關的變數
var fuids_data = {}; // 記錄uid出現的次數
var tmp_ary = []; // 用來排序 uid 的array
var params;
var comments_point;
var tmp_id;
var tmp_name;
var fuids = ""; // 將朋友的uid串成字串 在最後取得相關資料
// 取得塗鴉牆上來源/目標為user的訊息comments(回覆)/likes(讚)建議限定筆數不然會抓不到資料 目前還沒抓到上限
var query = FB.Data.query('SELECT comments,likes FROM stream WHERE target_id="{0}" or source_id="{0}" limit 0,50', [uid );
query.wait(function(rows) {
for(params in rows )
{
//取得有回復的 朋友ID
for(comments_point = 0 ; comments_point < rows[params].comments.comment_list.length ; comments_point++ )
{
tmp_id = rows[params].comments.comment_list[comments_point].fromid;
if(uid == tmp_id) continue;
if(fuids_data[tmp_id] == undefined)
{
fuids_data[tmp_id] = {
uid:tmp_id,
name:null,
pic:null,
counts:1
};
tmp_ary.push( fuids_data[tmp_id] );
}else fuids_data[tmp_id].counts++;
}
for(comments_point = 0 ; comments_point < rows[params].likes.friends.length ; comments_point++ )
{
//取得朋友中按讚的ID
tmp_id = rows[params].likes.friends[comments_point];
if(uid == tmp_id) continue;
if(fuids_data[tmp_id] == undefined)
{
fuids_data[tmp_id] = {
uid:tmp_id,
name:null,
pic:null,
counts:1
};
tmp_ary.push( fuids_data[tmp_id] );
}else fuids_data[tmp_id].counts++;
}
}
for(params in fuids_data ) html_code += "["+params+"] counts: "+fuids_data[params].counts+"
";
var tmp_obj;
// 因為我找不到直接排序的方式 所以用程式排序
for(var i = 0 ; i < tmp_ary.length-1 ; i++ )
{
for(var j=i+1 ; j < tmp_ary.length ; j++)
{
if(tmp_ary[i].counts > tmp_ary[j].counts)
{
tmp_obj = tmp_ary[i];
tmp_ary[i] = tmp_ary[j];
tmp_ary[j] = tmp_obj;
}
}
}
tmp_ary = tmp_ary.reverse();
//將所有的UID串成字串 再取得朋友們的資料
for(i=0 ; i < tmp_ary.length ; i++)
{
fuids = i != tmp_ary.length-1 ? fuids+tmp_ary[i].uid+",":fuids+tmp_ary[i].uid;
}
getUserInfo(fuids);
function getUserInfo(uids)
{
//取得user的相關資料
var query = FB.Data.query('select uid,name,pic from user where uid in ({0})', uids);
query.wait(function(rows) {
for(var i=0 ; i < rows.length ; i++)
{
fuids_data[rows[i].uid].name = rows[i].name;
fuids_data[rows[i].uid].pic = rows[i].pic;
}
});
}
相關連結:Demo , Source
參考網址:FQL-stream , FQL-comments , FB.Data.query , 相關的規範
沒有留言:
張貼留言