Facebook 'Friends.getAppUsers' utilisant l'API Graph

87

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

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

Richard
la source

Réponses:

119

J'ai cherché pendant un moment et je pensais moi aussi que ce n'était pas possible avec 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 que cela fonctionne dans l' explorateur d'API Graph :

Alex
la source
4
Oui; J'ai répondu à votre question avec cette réponse: facebook.stackoverflow.com/questions/7956639/…
Igy
2
Pour quelle application cette requête vérifie-t-elle l'installation?
iOS Monster
3
En supposant que vous n'utilisez aucun autre champ (tel que e-mail, anniversaire, etc.), pour une utilisation complète /me/friends?fields=id,name,installed, ce qui préserve l'ordre des champs et les informations standard qui sont renvoyées sans ?fields=être définies (vrai le 05/12/2012).
plasmid87
5
Au moment d'écrire ces lignes, cette requête renvoie tous les amis (même pour lesquels ce installedn'est pas vrai). Nous devons vérifier manuellement si le installedchamp existe pour chaque utilisateur.
Pankaj Bhambhani
Oui, c'est correct, j'ai modifié la réponse pour préciser que vous avez tous les amis et que vous devez vérifier ceux qui ont le drapeau installé.
Alex
27

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!

chaise longue
la source
1
J'ai initialement utilisé cette requête et en raison de la latence, je reçois maintenant tous les amis via l'API graphique, puis je filtre du côté de mon application à la place.
Richard
Pouvez-vous donner plus de détails sur la latence? La requête met-elle trop de temps à répondre? J'ai testé avec un compte FB avec plus de 300 amis et le temps de réponse a été de quelques secondes (2 à 4), ce qui n'est pas trop mal IMO.
loungerdork
1
Ouais, c'est à peu près ce que je vois. L'API graphique prend de l'ordre de 500 ms pour renvoyer plus de 400 amis, je préfère donc tous les obtenir, puis filtrer de mon côté.
Richard
3
vous pouvez également utiliser à la me()place du?
philfreo
8

Oui, l'API Graph est horriblement documentée. Je ne vois pas de documents pour une « application » de type , mais ils font référence à l'information d'une application dans la documentation:

https://graph.facebook.com/2439131959

Alors, peut-être pouvez-vous 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 format.

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

typeoneerror
la source
2
Pouah. Il semble que le passage léger à l'API graphique soit plus un casse-tête que j'avais initialement espéré.
Richard
4
Il est probablement plus facile de faire tout ce dont vous avez besoin (sauf la publication) en utilisant FQL. L'API Graph, au pire, ne vous donnera pas tout ce dont vous avez besoin, et au mieux, il sera extrêmement difficile de savoir comment le faire.
Daniel Schaffer
6

Ancienne API REST:

$facebook->api_client->friends_getAppUsers();

Nouvelle API Graph:

$facebook->api(array('method' => 'friends.getAppUsers'));
jana
la source
4
Cet appel de méthode SDK utilise l'ancienne API de repos sous les couvertures. Ce n'est pas l'API graphique :-(
Richard
5

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

Richard
la source
6
C'est assez vieux et ce n'est plus la bonne réponse. Vérifiez la réponse d'Alex en haut.
Bach
Ce n'est peut-être pas la bonne réponse, mais c'est la réponse du PO, et il est clairement préférable de voter pour vous-même que de marquer la bonne réponse comme étant correcte parce que l'ego.
Ajax
4

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

Commencez par étendre la classe User, en ajoutant un installedchamp:

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 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
        }
    }
}
Ben Flynn
la source
1

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. Commencez par obtenir tous les uids des amis des utilisateurs et sélectionnez les utilisateurs de votre base de données qui ont des uids correspondants.

Le nouveau programme d'API Facebook Graph semble très mal exécuté et pas tout à fait réfléchi. Il semble qu'ils se soient précipités pour le publier pour Facebook f8 avant qu'il ne soit mature, et il manque beaucoup de fonctionnalités disponibles auparavant.

schung
la source
0

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

Une autre manière 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.

Roozbeh15
la source