我正在编写一个Android应用程序,它将提取所有用户朋友的列表,以便他们可以在照片中标记它们,但显示一大群朋友的照片而不是列表。因为有些人有500多个朋友,我们都知道他们只是少数(可能是50个),他们通过评论或在照片中标记在Facebook上积极沟通的朋友。我希望能够吸引他们的顶级xxx朋友,因为看起来Facebook在他们的网站上做同样的事情,但我无法在Graph API中找到任何东西来完成这项任务。
有人有任何指示吗?
答案 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的外观:
答案 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 *,或其他);换句话说,这些列表中的一个或几个的组合可能会为您提供该用户的顶级朋友。