2012-09-09 111 views
2

我想获得用户和他或她的每个朋友之间的共同朋友的数量。FQL和图形API:找到所有Facebook朋友之间的共同朋友

我已经广泛地研究了图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网址:

/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

我突出了mutual_friend_count的工作,如下所示。但是,如果您可以构建单个FQL查询来获取此数据,我仍然很好奇。

$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