web-dev-qa-db-fra.com

Facebook 'Friends.getAppUsers' utilisant l'API Graph

J'ai une application qui utilise l'ancien REST API call Friends.getAppUsers pour obtenir la liste des amis de l'utilisateur actuel qui ont autorisé mon application.

J'ai lu la documentation, comment faire avec l'API Graph? Quel serait un exemple de cela?

87
Richard

J'ai fait beaucoup d'enquêtes sur cette question. D'après ce que je peux dire, il n'y a aucun moyen de faire Friends.getAppUsers à l'aide de l'API Graph. Les derniers SDK fournis par Facebook utilisent tous l'ancienne API REST pour obtenir des amis utilisant l'application.

5
Richard

J'ai cherché un peu et j'ai pensé que ce n'était pas possible en utilisant l'API Graph.

Cependant, j'ai posté une question similaire, Remplacement de l'ancien appel GetAppUsers pour voir les amis d'un utilisateur qui utilisent mon application?, pour l'API spécifique que j'utilisais et a reçu une excellente réponse générale.

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

ou plus généralement

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

Cela renvoie tous les amis, avec le champ supplémentaire "installed = true" pour les amis qui utilisent l'application.

Voici cela fonctionne dans Graph API Explorer :

119
Alex

Cela peut être fait avec FQL.

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

QED!

27
loungerdork

Oui, l'API Graph est horriblement documentée. Je ne vois aucune documentation pour une "application" type , mais ils font référence aux informations d'une application dans la documentation:

https://graph.facebook.com/2439131959

Donc, vous pouvez peut-être obtenir les membres de l'application en utilisant la syntaxe de groupe?

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

Vous aurez besoin d'une session authentifiée pour le tester. Sinon, il semble que Facebook nous pousse à utiliser FQL pour envoyer des requêtes directement:

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

Vous pouvez exécuter des requêtes FQL en récupérant https://api.facebook.com/method/fql.query?query=QUERY . Vous pouvez spécifier un format de réponse au format XML ou JSON avec le paramètre de requête de format.

Vous pouvez donc passer une requête FQL pour obtenir des informations sur votre application.

8
typeoneerror

Ancienne REST:

$facebook->api_client->friends_getAppUsers();

Nouvelle API graphique:

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

En utilisant restFB , j'ai fait ce qui suit (merci Igy/Alex pour les conseils). Notez que Facebook renvoie un tableau d'ID d'amis avec "installed" = true si l'utilisateur est installé (comme on peut le voir ici ).

Étendez d'abord la classe User, en ajoutant un champ 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;
    }
}

Ensuite, en utilisant le 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
        }
    }
}
4
Ben Flynn

La solution de contournement consiste à effectuer le filtrage vous-même. Vraisemblablement, vous avez tous les UID des utilisateurs qui se sont inscrits à votre application dans votre propre base de données. Donc, commencez par obtenir tous les UID des amis des utilisateurs et sélectionnez les utilisateurs de votre base de données qui ont des UID correspondants.

Le nouveau programme API Facebook Graph semble très mal exécuté et pas tout à fait pensé. Il semble qu'ils se soient précipités pour le publier pour Facebook f8 avant sa maturité, et il manque beaucoup de fonctionnalités qui étaient disponibles auparavant.

1
schung

Vous pouvez toujours appeler les anciennes REST API dans la nouvelle API Graph. C'est parfaitement valable.

Une autre façon consiste à utiliser FQL pour obtenir les amis de l'utilisateur de l'application.

Je ne sais pas s'il existe un moyen de le faire en utilisant uniquement l'API Graph.

0
Roozbeh15