FQL和图形API:在所有Facebook好友之间找到相互朋友

时间:2012-09-09 20:20:32

标签: facebook api batch-processing

我试图让用户和他或她的朋友之间的共同朋友计数。

我已经广泛研究了图api和fql来尝试解决这个问题。我查看了图表api me/mutualfriends/<uid>

但是,如果在大量朋友(> 1k)上这样做,那么请求每个朋友之间的共同朋友是太多了。

然后我使用FQL和Graph API尝试批量请求(一次最多50个)。这仍然导致一个查询以获得所有朋友,然后N查询与每个朋友的共同朋友。即使每次批量处理50个,也需要相当长的时间。

这是主要的FQL查询:

select uid1 from friend where uid2 = FRIEND_ID and uid1 in (select uid2 from friend where uid1 = me())';

这是图表api url:

/me/mutualfriends/FRIEND_ID

我正在使用批处理,如:

$facebook->api('/?batch='.json_encode($batch), 'POST');

批处理中的每个查询都是这样的数组:

$cur = array('method'=>'GET', 'relative_url'=> $relative_url);

使用图形api而不是fql似乎更快,但有没有办法让一个查询中的所有朋友的共同朋友?或者实际上有更快的方法吗?我在SO的不同部分读过有关mutual_friend_count的内容,但还没有让它工作。

1 个答案:

答案 0 :(得分:1)

我刚刚让mutual_friend_count工作,如图所示。但是,如果您可以构造单个SQL查询来获取此数据,我仍然很好奇。

$fql = "SELECT name,mutual_friend_count FROM user WHERE uid IN(SELECT uid2 FROM friend WHERE uid1=me())";

$response = $facebook->api(array(
    'method' => 'fql.query',
    'query' =>$fql,
));     

来自Friend with the highest number of mutual friends