Facebook Graph API - Поиск лучших друзей пользователей - PullRequest
15 голосов
/ 11 августа 2011

Я пишу приложение для Android, которое будет выдвигать список всех друзей пользователей, чтобы они могли отмечать их на фотографии, но вместо списка отображал большую коробку друзей с их фотографией. Поскольку у некоторых людей есть более 500 друзей, мы все знаем, что это всего лишь несколько человек (может быть, 50), которые являются друзьями, с которыми они активно общаются в Facebook по комментариям или отмечены на фотографиях. Я хотел бы иметь возможность просто привлечь своих лучших друзей по ххх, так как кажется, что Facebook делает то же самое на их сайте, но я просто не могу найти что-либо в Graph API для этой задачи.

У кого-нибудь есть указатели?

Ответы [ 6 ]

18 голосов
/ 14 августа 2011

Другой способ сделать это - сделать запрос API Graph для сообщений о статусе, опубликованных пользователем, друзья, которые прокомментировали или оценили его статус, являются теми, с кем он / она взаимодействует больше всего, это довольно мило.просто, вы можете использовать это:

    $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'];
    }
}

сохранить счетчики по вашему выбору, и это будет сделано.

14 голосов
/ 28 ноября 2012

Я хотел сделать это, не требуя дополнительных / расширенных разрешений.Я нашел довольно приличное приближение для моих нужд: поле 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

А потом просто выстрелчто с помощью PHP SDK

$friend_array = $facebook->api($params);
3 голосов
/ 17 мая 2012

Я столкнулся с той же проблемой в веб-приложении, над которым я работаю, и открыл исходный код, который использовал, хотя и в Ruby:

https://github.com/mikejarema/facebook-friend-rank

На самом деле это веб-сервис, который принимает активный токен доступа и идентификатор пользователя и (при условии, что было предоставлено разрешение read_stream) возвращает хэш идентификаторов для подсчета, который можно использовать для сортировки в приложении для Android.

Я полагаю, поскольку вы работаете на смартфоне, это позволит вам перенести серию вызовов и любую задержку вызовов на сервер, где выполняется код, оптимизированный специально для задачи ранжирования друзей.

В частности, ранжированиеАлгоритм просматривает 500 последних взаимодействий пользователя (фид активности) и подсчитывает частоту появления всех друзей там.Результат дает разумное упорядочение друзей, от лучших к худшим, и он также работает на подгруппах друзей (например, сортировка общих друзей).

Существует много места для изучения тегов фотографий, общего количества друзей, а такжепоиск типа взаимодействий (например, регистрация с другом, вероятно, является лучшей мерой близости, чем подобное в их статусе).Проект может развиваться, чтобы охватить некоторые из этих соображений.

Вот пример приложения, использующего этот подход и Friend Rank на серверной части, проверьте сетевые вызовы, чтобы увидеть, как выглядит API:

http://facebook -friend-rank.herokuapp.com / демо / index.html

1 голос
/ 16 апреля 2013

Я рекомендую вам следующий класс:

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.

Надеюсь, это поможет.

1 голос
/ 30 мая 2012

Если вы смотрите сетевой трафик из приложения Facebook для iPhone, вы можете видеть, что они делают этот FQL-вызов, чтобы получить 10 лучших друзей пользователей, с которыми они больше всего общаются:

SELECT uid2, communication_rank   
FROM friend where uid1 = me() 
ORDER BY communication_rank DESC LIMIT 10

К сожалению, это недоступно для приложенийпо умолчанию.Вам нужно будет связаться с инженером Facebook, чтобы включить это поле для вашего приложения.

0 голосов
/ 14 августа 2011

Я могу придумать два прямых способа получить "лучших друзей" пользователя.Первый не требует каких-либо расширенных разрешений, а только действительный токен доступа (который вы, как владелец приложения, получите)Вы делаете вызов API , чтобы получить фид пользователя , который представляет собой соединение с пользовательским узлом.

Этот звонок приведет к 25 последним сообщениям этого пользователя.Если повезет, по крайней мере, некоторые элементы в массиве JSON, возвращаемые этим вызовом, будут сообщениями от друзей этого пользователя.Как узнаете?Хорошо, каждое сообщение, содержащее канал, будет иметь уникальный идентификатор, связанный с ним - независимо от того, является ли приложение или пользователь FB источником сообщения - и каждый из этих идентификаторов FB можно сравнить со списком друзей пользователя.

Идея, конечно же, заключается в том, что любые друзья, чьи сообщения появляются в последних 25 сообщениях в ленте пользователя, являются более близкими друзьями, чем в противном случае.

Второй метод заключается в вызове диаграммы.API, запрашивающий списки друзей для подключения к пользовательскому узлу.Этот вызов требует разрешения * read_friendlists *.Имя, которое пользователь дает данному списку, часто сильно свидетельствует о важности друзей, составляющих этот список (например, * best_friends * или что-то еще);другими словами, один или комбинация нескольких из этих списков, скорее всего, даст вам top друзей этого пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...