Какая функция в Social Graph загружает общих друзей так быстро?

Я делаю приложение для Facebook, для которого мне нужны общие друзья вошедшего в систему пользователя. Старый API friends.getMutualFriends делает работу, но это очень медленно. Мне было интересно, есть ли другой способ получить список общих друзей.

Более того, такие приложения, как SocialGraph, загружаются очень быстро, так какие функции они используют, чтобы так быстро схватить общих друзей?

3 ответа

Я нашел решение:)
С friends.getMutualFriends требуется n^3 API, а это огромное количество. Я тоже попробовал areFriends, что было не лучше. Поэтому я извлек данные с помощью FQL-запроса следующим образом:

//Create Query
$params = array(
    'method' => 'fql.query',
    'query' => "  SELECT uid1, uid2 FROM friend 
WHERE uid1 IN 
(SELECT uid2 FROM friend WHERE uid1= $match)
AND uid2 IN 
(SELECT uid2 FROM friend WHERE uid1= $match)",
);

//Run Query
$result = $facebook->api($params);

Требуется меньше секунды, чтобы найти общих друзей!

По состоянию на сентябрь 2011 года для этого существует новый вызов API:

На этой неделе мы добавили соединение для объекта User, которое позволяет вам получить список общих друзей между двумя пользователями. Чтобы использовать его, просто получите токен доступа для текущего пользователя и выполните запрос GET для:

https://graph.facebook.com/me/mutualfriends/FRIEND_ID

Обновления платформы: Operation Developer Love

Если вас беспокоит скорость, я бы посоветовал вызвать информацию один раз и найти способ кеширования данных. Facebook теперь предоставляет вам возможность сделать это "на законных основаниях". Вы можете использовать memcached для такого рода вещей или временно сохранить его в базе данных.

Другие вопросы по тегам