Facebook Graph API - 寻找用户的顶级朋友

时间:2011-08-11 04:41:12

标签: facebook facebook-graph-api

我正在编写一个Android应用程序,它将提取所有用户朋友的列表,以便他们可以在照片中标记它们,但显示一大群朋友的照片而不是列表。因为有些人有500多个朋友,我们都知道他们只是少数(可能是50个),他们通过评论或在照片中标记在Facebook上积极沟通的朋友。我希望能够吸引他们的顶级xxx朋友,因为看起来Facebook在他们的网站上做同样的事情,但我无法在Graph API中找到任何东西来完成这项任务。

有人有任何指示吗?

6 个答案:

答案 0 :(得分:18)

另一种方法是,对用户发布的状态消息发出Graph API请求,评论或喜欢他的状态的朋友是他/她与之交互最多的朋友,这样做很漂亮很简单,你可以用这个:

    $statuses = $facebook->api('/me/statuses');

    foreach($statuses['data'] as $status){
    // processing likes array for calculating fanbase. 

            foreach($status['likes']['data'] as $likesData){
                $frid = $likesData['id']; 
                $frname = $likesData['name']; 
                $friendArray[$frid] = $frname;
            }

         foreach($status['comments']['data'] as $comArray){
         // processing comments array for calculating fanbase
                    $frid = $comArray['from']['id'];
                    $frname = $comArray['from']['name'];
    }
}

根据您的选择保留计数器,它将会完成。

答案 1 :(得分:14)

我想在不需要额外/扩展权限的情况下执行此操作。我发现我需要的相当不错的近似值是user FQL table.

中的mutual_friend_count字段

所以我用过:

$params = array('method' => 'fql.query',
                'query' => 'SELECT uid, pic_square, name 
                 FROM user 
                 WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me()) 
                 ORDER BY mutual_friend_count DESC

然后使用PHP SDK解决这个问题

$friend_array = $facebook->api($params);

答案 2 :(得分:3)

我在我正在处理的Web应用程序中遇到了同样的问题,并且开源了我使用过的代码,尽管在Ruby中:

https://github.com/mikejarema/facebook-friend-rank

这实际上是一个带有活动访问令牌的Web服务。用户ID和(假设已授予read_stream权限)返回一个ids的哈希值,用于在Android应用程序中进行排序。

我想,因为你在智能手机上运行,​​所以你可以将一系列调用和任何呼叫延迟卸载到某个服务器上,该服务器运行的代码专门为朋友排名任务而优化。

特别是,排名算法会查看用户最近的500次互动(活动供稿),并计算出现在那里的所有朋友的频率。结果给出了朋友的合理排序,最好到最差,并且它也适用于朋友的子集(例如,排序共同的朋友)。

有很多空间可以探索照片标签,共同的朋友数量,以及寻找交互的类型(例如,与朋友签到可能比他们的状态更好地衡量亲密度)。该项目可能会发展到包含其中一些考虑因素。

以下是使用此方法的示例应用程序和后端的朋友排名,检查网络调用以查看API的外观:

http://facebook-friend-rank.herokuapp.com/demo/index.html

答案 3 :(得分:1)

如果您通过Facebook的iPhone应用程序观看网络流量,您可以看到他们进行此FQL调用,以吸引用户与他们沟通最多的十大朋友:

SELECT uid2, communication_rank   
FROM friend where uid1 = me() 
ORDER BY communication_rank DESC LIMIT 10

不幸的是,默认情况下这不适用于应用程序。您需要联系Facebook工程师才能为您的应用程序启用此字段。

答案 4 :(得分:1)

我建议您使用以下课程:

https://github.com/gajus/facebook-friend-rank

根据用户互动情况为您的朋友提供分数:

'feed_like' 'feed_comment' 'feed_addressed' 'photo_tagged_friend_by_user'
'photo_tagged_user_by_friend'
'photo_like'
'photo_comment' 'friend_mutual' 'inbox_in_conversation' 'inbox_chat'

然后按分数desc对列表进行排序。

希望它有所帮助。

答案 5 :(得分:0)

我可以想到两个直接获取用户“顶级朋友”的方法。第一个不需要任何扩展权限,而只需要一个有效的访问令牌(作为应用程序所有者,您将拥有)。您创建API call以获取用户的 Feed ,这是用户节点的连接

此通话将是该用户的25个最新帖子。运气好的话,至少从这个调用返回的JSON数组中的一些项目将是来自该用户的朋友的帖子。怎么会知道?那么包含feed的每个帖子都会有一个与之关联的唯一id - 无论是应用程序还是FB用户都是Post的来源 - 并且每个FB ID都可以与用户的好友列表进行比较。

当然,我们的想法是,任何帖子出现在用户Feed的最后25个帖子中的朋友都是比其他人更亲密的朋友。

第二种方法是调用Graph API,请求 朋友列表 连接到用户节点。此调用需要* read_friendlists *权限。用户给予给定列表的名称通常强烈证明包含该列表的朋友的重要性(例如,* best_friends *,或其他);换句话说,这些列表中的一个或几个的组合可能会为您提供该用户的顶级朋友。