這邊我的做法是去計算在我的塗鴉牆上,有回應的人,以及有哪些人按讚;其中一則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 , 相關的規範
沒有留言:
張貼留言