Fri 17 Sep

Using the Facebook API to retrieve mutual friends

A few nights ago I had a (bad) idea for a tool that leveraged the Facebook API. I'll spare you the details, but my tool needed to retrieve the list of mutual friends for each of the logged in user's friends. This proved to be a bit trickier to figure out than I had hoped for as a developer new to the Facebook API, so here's a quick little PHP script that shows how I went about solving this problem.

I wound up using the REST API's friends.getMutualFriends query. This code sample uses the new Graph API to retrieve a list of your friends, then displays the profile picture of any who have more than ten mutual friends. Note this would take a while to run on people with a large number of friends.

$facebook = new Facebook(array(
    'appId'  => '<your app id>', 
    'secret' => '<your secret id>',
    'cookie' => true, 
$session = $facebook->getSession();

$my_friends = $facebook->api('/me/friends');  // Graph API call, retrieves own friendlist
foreach ($my_friends['data'] as $person) {
    $friend_uid = $person['id'];

    // Old REST API call. Gets the mutual friends (source must be logged in user).
    $param = array('method' => 'friends.getMutualFriends', 
                                'source_uid' => $me['id'], 
                                'target_uid' => $friend_uid, 
                                'callback' => '' );
    $res = $facebook->api($param);
    if(count($res) > 10) {
            echo "<a href=\"".$friend_uid."\">"
                ."<img src=\"".$friend_uid."/picture\"></a>: "
                .count($res)." friends in common<br>";

Unfortunately, this does not provide a way to retrieve the full friend list of an arbitrary friend of a logged in friend. As far as I can tell, this is not possible using any of the Facebook API's. If you know of a way, certainly leave a note in the comments!