Facebook Graph API - поиск лучших друзей пользователей
Я пишу приложение для Android, которое потянет список всех друзей пользователей, чтобы они могли пометить их на фотографии, но отображая большую папку друзей с их фотографией вместо списка. Поскольку у некоторых людей более 500 друзей, мы все знаем, что их всего лишь несколько (может быть, 50), которые являются друзьями, которые активно общаются на Facebook по комментариям или помечены на фотографиях. Я хотел бы иметь возможность просто вытащить своих лучших друзей xxx, поскольку кажется, что Facebook делает то же самое на своем сайте, но я просто не могу найти что-либо в Graph API для выполнения этой задачи.
У кого-нибудь есть указатели?
Ответы
Ответ 1
Другой способ сделать это - сделать запрос 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'];
}
}
сохранить счетчики по вашему выбору, и это будет сделано.
Ответ 2
Я хотел сделать это, не требуя дополнительных/расширенных разрешений. Я нашел довольно приличное приближение для своих нужд, это поле mutual_friend_count
в таблице пользователя FQL.
Итак, я использовал:
$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
А затем просто запустите это с помощью SDK PHP
$friend_array = $facebook->api($params);
Ответ 3
Я столкнулся с этой же проблемой в веб-приложении, над которым я работаю, и открыл исходный код, который я использовал, хотя в Ruby:
https://github.com/mikejarema/facebook-friend-rank
Это фактически веб-служба, которая принимает активный токен доступа и идентификатор пользователя и (при условии предоставления разрешения read_stream) возвращает хэш идентификаторов для подсчетов, которые могут использоваться для сортировки в вашем приложении для Android.
Я полагаю, что, поскольку вы работаете на смартфоне, это позволяет вам выгружать серию вызовов и любую задержку вызова на сервер где-нибудь, где работает код, оптимизированный специально для задачи ранжирования друзей.
В частности, алгоритм ранжирования рассматривает пользователя в 500 самых последних взаимодействий (поток активности) и подсчитывает частоту появления всех друзей. Результат дает разумный порядок друзей, лучше всего худший, а также работает на подмножества друзей (например, сортировка общих друзей).
Там много места для изучения фото тегов, взаимного подсчета друзей, а также поиск типа взаимодействия (например, проверка с другом, вероятно, является лучшей мерой близости, чем, например, от их статуса). Проект может развиваться, чтобы охватить некоторые из этих соображений.
Здесь пример приложения с использованием этого подхода и Friend Rank на бэкэнд, проверьте сетевые вызовы, чтобы увидеть, как выглядит API:
http://facebook-friend-rank.herokuapp.com/demo/index.html
Ответ 4
Если вы просматриваете сетевой трафик из приложения Facebook iPhone, вы можете увидеть, что они делают этот вызов FQL, чтобы получить 10 лучших друзей, которых они больше всего общаются:
SELECT uid2, communication_rank
FROM friend where uid1 = me()
ORDER BY communication_rank DESC LIMIT 10
К сожалению, по умолчанию это приложение недоступно. Вам нужно будет связаться с инженером Facebook, чтобы получить это поле для вашего приложения.
Ответ 5
Я рекомендую вам следующий класс:
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.
Надеюсь, что это поможет.
Ответ 6
Я могу думать о двух прямых способах получить "лучших друзей" пользователя. Первый не требует каких-либо расширенных разрешений, а просто действительный токен доступа (который, как владелец приложения, у вас будет). Вы вызываете API-вызов, чтобы получить пользовательский фид, который является подключением к пользователю node.
Этот вызов будет у пользователя 25 последних сообщений. В любом случае, по крайней мере, некоторые из элементов в массиве JSON, возвращенные из этого вызова, будут сообщениями от друзей этого пользователя. Как узнать? Хорошо, что каждое сообщение, содержащее фид, будет иметь уникальный идентификатор, связанный с ним, независимо от того, является ли приложение или пользователь FB источником Post, и каждый из этих идентификаторов FB можно сравнить с списком друзей пользователя.
Идея состоит в том, что любые друзья, чьи сообщения появляются в последних 25 сообщениях фида пользователя, являются более близкими друзьями, чем в противном случае.
Второй способ заключается в вызове API-интерфейса Graph, запрашивающего подключение друзей-листов к пользователю node. Для этого вызова требуется разрешение * read_friendlists *. Имя, которое пользователь дает данному списку, часто является убедительным доказательством важности друзей, входящих в этот список (например, * best_friends * или что-то еще); другими словами, одна или комбинация из нескольких этих списков, вероятно, даст вам этих лучших друзей.