Facebook 'Friends.getAppUsers' за допомогою API Graph


87

У мене є програма, яка використовує старий виклик REST API, Friends.getAppUsersщоб отримати список друзів для поточного користувача, який авторизував мою програму.

Я прочитав документацію, як це зробити за допомогою API Graph? Що може бути прикладом цього?

Відповіді:


119

Я деякий час шукав навколо, і я теж думав, що це неможливо за допомогою Graph API.

Однак я опублікував подібне запитання " Заміна старого дзвінка GetAppUsers", щоб побачити друзів користувача, які використовують мою програму? , для конкретного API, який я використовував, і мені дали чудову загальну відповідь.

https://graph.facebook.com/me/friends?fields=installed

або в цілому

https://graph.facebook.com/{user id}/friends?fields=installed

Це повертає всіх друзів, з додатковим полем "встановлений = істина" для тих друзів, які використовують програму.

Ось це працює в Провіднику графічних API :


4
Так; Я відповів на ваше запитання такою відповіддю: facebook.stackoverflow.com/questions/7956639/…
Igy

2
Для якої програми цей запит перевіряє встановлення?
iOS Monster

3
Припускаючи, що ви не використовуєте будь-які інші поля (наприклад, електронну пошту, день народження тощо) для повноти /me/friends?fields=id,name,installed, що зберігає порядок полів та стандартну інформацію, яка повертається без ?fields=визначення (вірно на 12.12.2012).
плазміда87

5
На момент написання цього запиту цей запит повертає всіх друзів (навіть якщо installedце не відповідає дійсності). Нам потрібно вручну перевірити, чи installedіснує поле для кожного користувача.
Pankaj Bhambhani

Так, це правильно, я відредагував відповідь, щоб чітко пояснити, що ви отримуєте всіх друзів і вам потрібно перевірити, на яких з них встановлений прапор.
Алекс

27

Це можна зробити за допомогою FQL.

SELECT uid FROM user
WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = ?)
AND is_app_user = 1

QED!


1
Спочатку я використовував цей запит, і через затримку зараз я просто отримую всіх друзів через графічний api, а потім фільтрую на стороні мого додатка.
Річард

Чи можете ви дати докладнішу інформацію про затримку? Це занадто довго, щоб відповісти на запит? Я тестував з обліковим записом FB близько 300+ друзів, і час відповіді склав пару секунд (від 2 до 4), що не надто погано для IMO.
loungerdork

1
Так, це приблизно те, що я бачу. Графічний API займає близько 500 мс, щоб повернути більше 400 друзів, тому я вважаю за краще отримувати їх усіх, а потім фільтрувати на моєму боці.
Річард

3
Ви також можете використовувати me()замість?
philfreo

8

Так, графічний API жахливо задокументований. Я не бачу ніякої документації для «додатки» типу , але вони посилаються дані додатків 'в документації:

https://graph.facebook.com/2439131959

То, можливо, ви можете отримати членів програми за допомогою синтаксису Group?

https://graph.facebook.com/2439131959/members

Для тестування вам знадобиться аутентифікований сеанс. В іншому випадку, схоже, Facebook спонукає нас використовувати FQL для безпосередньої надсилання запитів:

http://developers.facebook.com/docs/reference/fql/application

Ви можете виконувати запити FQL, завантажуючи https://api.facebook.com/method/fql.query?query=QUERY . Ви можете вказати формат відповіді як XML або JSON за допомогою параметра запиту формату.

Таким чином, ви можете передати запит FQL, щоб отримати інформацію про свою програму.


2
Тьфу. Здається, перемикання світла на графічний api - це більше головний біль, на який я спочатку сподівався.
Річард

4
Можливо, простіше зробити все необхідне (крім публікації) за допомогою FQL. API Graph, в гіршому випадку, не дасть вам усього необхідного, а в кращому випадку дратує ускладнення з’ясувати, як це зробити.
Даніель Шаффер,

6

Старий REST API:

$facebook->api_client->friends_getAppUsers();

Новий графічний API:

$facebook->api(array('method' => 'friends.getAppUsers'));

4
Цей виклик методу SDK використовує старий API відпочинку під ковдрами. Це не графічний api :-(
Річард

5

Я провів багато розслідувань з цього питання. З того, що я можу сказати, це неможливо зробити Friends.getAppUsersза допомогою API Graph. Останні SDK, що надаються Facebook, використовують старий REST API, щоб залучити друзів за допомогою програми.


6
Це досить давня і вже не правильна відповідь. Перевірте відповідь Алекса вгорі.
Бах

Можливо, це не правильна відповідь, але це відповідь ОП, і, очевидно, краще проголосувати за себе, ніж позначити правильну відповідь як правильну, оскільки его.
Аякс

4

Використовуючи restFB , я зробив наступне (дякую Igy / Alex за вказівки). Зверніть увагу, що Facebook повертає масив ідентифікаторів друзів з "встановленим" = true, якщо користувач встановлений (як це можна побачити тут ).

Спочатку розширіть клас User, додавши installedполе:

import com.restfb.Facebook;
import com.restfb.types.User;

public class InstalledUser extends User {

    @Facebook
    private boolean installed;

    public InstalledUser() {        
    }

    public boolean getInsatlled() {
        return installed;
    }
}

Далі, використовуючи DefaultFacebookClient:

FacebookClient facebook = new DefaultFacebookClient(pFacebookAccessToken);
Connection<InstalledUser> installedFacebookUsers = facebook.fetchConnection("/" + pFacebookId + "/friends", InstalledUser.class, Parameter.with("fields", "installed"));        
for (List<InstalledUser> friends : installedFacebookUsers) {
    for (InstalledUser friend : friends) {
        if (friend.getInsatlled()) {
            // Add friend.getId() to a list of ID, or whatever
        }
    }
}

1

Обхідний шлях полягає у виконанні фільтрації самостійно. Імовірно, у вас є всі ідентифікатори користувачів, які підписалися на вашу заявку, у вашій власній базі даних. Отже, спочатку отримайте всі ідентифікатори користувача для друзів користувачів і виберіть користувачів із вашої бази даних, які мають відповідні ідентифікатори.

Нова програма API API Facebook Graph здається дуже погано виконаною та не зовсім продуманою. Здається, вони поспішили опублікувати його для Facebook f8 до того, як він дозрів, і бракує багатьох функціональних можливостей, доступних раніше.


0

Ви все ще можете викликати старі REST-API в новому графічному API. Це переважно діє.

Альтернативний спосіб - використання FQL для отримання друзів користувача програми.

Я не впевнений, чи є спосіб зробити це, використовуючи лише Graph API.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.