Как найти общих друзей в фейсбуке

Я хочу найти общих друзей между двумя случайными пользователями, используя facebook Graph API v2.2.

Я прочитал документацию https://developers.facebook.com/docs/graph-api/reference/v2.2/user.context/mutual_friends В нем говорится: «Для просмотра общих друзей других требуется действительный токен доступа пользователя с разрешением user_friends». друзей, использующих приложение".

Есть ли способ найти количество и, возможно, имена всех общих друзей между currentUser и User2, если они не дружат друг с другом?

Я сослался на многие другие вопросы: Facebook Graph API 2.2 общие друзья = > Нет ответов

Как получить общих друзей через Graph API Facebook = > Решение работает, только если два пользователя являются друзьями, что может быть не так в моем случае.


person Manas Paldhe    schedule 27.02.2015    source источник
comment
Их API работает, даже если 2 пользователя не являются друзьями. Но оба должны предоставить разрешение user_friends   -  person WizKid    schedule 27.02.2015
comment
Нет. У меня есть готовый код. Если пользователь A и пользователь B являются друзьями, я получаю ответ, в котором есть контекст и все данные, которые мне нужны. Ответ выглядит следующим образом: ответ: Контекст объекта: Объект взаимные_друзья: Данные объекта: Массив[какая-то длина] сводка: Идентификатор объекта: ссылка someId: someLink Если пользователь A и пользователь B не являются друзьями, ответ выглядит следующим образом: ответ: идентификатор объекта : something link: somelink Да, я тоже использую ссылку, но ее удаление не имеет никакого значения.   -  person Manas Paldhe    schedule 27.02.2015
comment
Есть ли у них общие друзья, которые используют приложение?   -  person WizKid    schedule 27.02.2015
comment
Да, это так. Я только что пошел и проверил настройки учетной записи FB. Настройки/приложения/разрешения для всех трех пользователей показывают, что приложению разрешен доступ к списку друзей.   -  person Manas Paldhe    schedule 27.02.2015
comment
Просто хочу убедиться, что я понимаю. У вас есть пользователь A, B, C, и A дружит с B, а B дружит с C. Все трое вошли в ваше приложение и предоставили разрешение user_friends. А когда вы спрашиваете об общих друзьях между А и С, вы их не получаете? Если да, сообщите об ошибке на странице developers.facebook.com/bugs.   -  person WizKid    schedule 27.02.2015
comment
Да, вышесказанное верно. Разве это не ожидаемое поведение? API сообщает, что для просмотра общих друзей других друзей, использующих приложение, требуется действительный токен доступа пользователя с разрешением user_friends.   -  person Manas Paldhe    schedule 27.02.2015
comment
Давайте продолжим это обсуждение в чате.   -  person Manas Paldhe    schedule 27.02.2015


Ответы (5)


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

По-видимому, вы должны включить параметр «доказательство приложения» в запрос API с вашего сервера, когда два пользователя не являются общими друзьями:

Если вы хотите вызвать эту конечную точку от имени двух пользователей приложения, которые не являются друзьями, вы должны предоставить параметр appsecret_proof вместе с токеном доступа пользователя при выполнении запроса. Это означает, что вы должны вызывать эту конечную точку со своего сервера.

Похоже, это может быть хорошей идеей сделать в любом случае.

person Chad Pavliska    schedule 20.06.2015

Удалось найти решение, и оно работает. Если звонок работает внутри вас и кого-то еще, и вы оба являетесь друзьями на Facebook, вам нужно создать Appsecret

который представляет App secret key found on Facebook Dev under My Apps и токен. Вы создаете этот ключ, запустив: $appsecret_proof= hash_hmac('sha256', $access_token, $app_secret);

После этого вы передаете токен и секрет в качестве параметров вызова:

Bundle params = new Bundle(); 
params.putString("appsecret_proof", appsecret_proof); 
params.putString("access_token", access_token);
person Alex    schedule 21.07.2015
comment
Я думаю, это работает только тогда, когда кто-то другой и вы оба являетесь друзьями на Facebook. Если вы оба нет, это не так. - person Manas Paldhe; 22.07.2015
comment
Это так, и, как я уже говорил, это было проверено. Предположим, что мы с вами не друзья на Facebook. Я могу найти наших общих друзей на Facebook, если у меня есть разрешение. - person Alex; 23.07.2015
comment
Привет, как ты это реализовал? мне нужно запустить это на моем сервере? мой сервер использует java-приложение, а не php, так как мне это реализовать? - person Lucas Senechal; 09.08.2016

Это работает для 2 пользователей, которые не являются друзьями.

Вот рабочий пример API общего друга facebook:

curl -G -d "access_token=<access_token>" -d "appsecret_proof=<appsecret_proof>" 'https://graph.facebook.com/v2.5/{user-id}?fields=context.fields(mutual_friends)'

Доказательство секрета приложения — это sha256 токена доступа пользователя с секретом приложения в качестве ключа.

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

Если вы хотите найти конкретную информацию об общих друзьях, попробуйте следующее:

curl -G -d "access_token=<access_token>" -d "appsecret_proof=<appsecret_proof>" 'https://graph.facebook.com/v2.5/{user-id}?fields=context.fields(mutual_friends.fields(id,name,picture.type(large)))'

Это вернет идентификатор, имя и текущую ссылку на изображение профиля для всех общих друзей. Вам не нужно разрешение на фотографии для этой фотографии.

person Shobhit    schedule 13.05.2016
comment
Это дает тот же результат, который можно получить, передав разрешение «user_friends». - person VishAl; 23.01.2017


Это старый вопрос, но теперь я разобрался с ним, поэтому напишу...

получить всех общих друзей, если вы не его друг, это возможно только с сервера (в моем случае это Node), как указано здесь: https://developers.facebook.com/docs/graph-api/reference/user-context/all_mutual_friends/

получите токен пользователя-2 и ВАШ идентификатор авторизации, а также сгенерируйте appsecretProof и clientSecret из панели администратора Facebook вашего приложения.

https://graph.facebook.com/v2.10/${auth_userId}? 
fields=context.fields%28all_mutual_friends.limit%28100%29%29 
&appsecret_proof=${appsecretProof}&access_token=${accessToken}

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

с разрешениями «user_friends» вы можете получить от клиента только общих друзей, которые используются в вашем приложении, но не всех общих друзей.

person Shmulik    schedule 24.08.2017