Facebook Friends.getAppUsers с использованием Graph API

87

У меня есть приложение, которое использует старый вызов REST API Friends.getAppUsersдля получения списка друзей текущего пользователя, авторизовавшего мое приложение.

Я прочитал документацию, как мне это сделать с помощью Graph API? Что бы это могло быть примером?

Ричард
источник

Ответы:

119

Я поискал некоторое время и тоже подумал, что это невозможно с помощью Graph API.

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

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

или в более общем смысле

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

Это возвращает всех друзей с дополнительным полем «installed = true» для тех друзей, которые используют приложение.

Вот как он работает в Graph API Explorer :

Alex
источник
4
Ага; Я ответил на ваш вопрос следующим ответом: facebook.stackoverflow.com/questions/7956639/…
Igy
2
Для какого приложения этот запрос проверяет установку?
iOS Monster,
3
Предполагая, что вы не используете какие-либо другие поля (например, электронная почта, день рождения и т. Д.) Для использования в целях полноты /me/friends?fields=id,name,installed, что сохраняет порядок полей и стандартную информацию, которая возвращается без ?fields=определения (верно на 2012/12/05).
плазмида87 05
5
На момент написания этот запрос возвращает всех друзей (даже для которых installedэто не так). Нам нужно вручную проверить, installedсуществует ли поле для каждого пользователя.
Панкадж Бхамбани 01
Да, это правильно, я отредактировал ответ, чтобы было ясно, что у вас есть все друзья, и вы должны проверить, у каких из них установлен флаг.
Alex
27

Это можно сделать с помощью FQL.

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

QED!

Loungerdork
источник
1
Первоначально я использовал этот запрос, и из-за задержки теперь я просто получаю всех друзей через api графа, а затем вместо этого фильтрую на стороне моего приложения.
Ричард
Не могли бы вы подробнее рассказать о задержке? Ответ на запрос занимает слишком много времени? Я тестировал учетную запись FB с более чем 300 друзьями, и время ответа составляло пару секунд (от 2 до 4), что не так уж плохо, IMO.
loungerdork 01
1
Да, это примерно то, что я вижу. API-интерфейс графа занимает порядка 500 мс, чтобы вернуть более 400 друзей, поэтому я предпочитаю получить их всех, а затем фильтровать на своей стороне.
Ричард
3
вы также можете использовать me()вместо?
philfreo
8

Да, Graph 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, чтобы получить информацию о своем приложении.

typeoneerror
источник
2
Тьфу. Кажется, легкое переключение на api графика - это больше головная боль, чем я изначально надеялся.
Ричард
4
Наверное, все, что вам нужно (кроме публикации), проще делать с помощью FQL. API Graph, в худшем случае, не даст вам всего, что вам нужно, а в лучшем случае будет раздражающе трудным выяснить, как это сделать.
Daniel Schaffer
6

Старый REST API:

$facebook->api_client->friends_getAppUsers();

Новый Graph API:

$facebook->api(array('method' => 'friends.getAppUsers'));
Яна
источник
4
Этот вызов метода SDK использует старый API-интерфейс rest. Это не api графика :-(
Ричард
5

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

Ричард
источник
6
Это довольно старый и неправильный ответ. Проверьте ответ Алекса вверху.
Бах
Это может быть неправильный ответ, но это ответ ОП, и явно лучше проголосовать за себя, чем отмечать правильный ответ как правильный из-за эго.
Ajax
4

Используя restFB , я сделал следующее (спасибо Igy / Alex за руководство). Обратите внимание, что Facebook возвращает массив идентификаторов друзей с «installed» = 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

Обходной путь - выполнить фильтрацию самостоятельно. Предположительно, у вас есть все uid пользователей, которые подписались на ваше приложение, в вашей собственной базе данных. Итак, сначала получите uid всех пользователей и выберите пользователей из вашей базы данных, у которых есть совпадающие uid.

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

Schung
источник
0

Вы по-прежнему можете вызывать старый REST API в новом Graph API. Это совершенно верно.

Альтернативный способ - использовать FQL для поиска друзей пользователя приложения.

Я не уверен, есть ли способ сделать это, используя только Graph API.

Roozbeh15
источник