Facebook 'Friends.getAppUsers' mit Graph API

87

Ich habe eine Anwendung, die den alten REST-API-Aufruf verwendet Friends.getAppUsers, um die Liste der Freunde für den aktuellen Benutzer abzurufen, der meine Anwendung autorisiert hat.

Ich habe die Dokumentation gelesen. Wie mache ich das mit der Graph-API? Was wäre ein Beispiel dafür?

Richard
quelle

Antworten:

119

Ich habe eine Weile gesucht und auch gedacht, dass dies mit der Graph-API nicht möglich ist.

Ich habe jedoch eine ähnliche Frage gestellt: Ersatz für alten GetAppUsers-Aufruf, um die Freunde eines Benutzers zu sehen, die meine Anwendung verwenden. , für die spezifische API, die ich verwendete, und erhielt eine großartige allgemeine Antwort.

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

oder allgemeiner

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

Dies gibt alle Freunde zurück, mit dem zusätzlichen Feld "installiert = wahr" für die Freunde, die die Anwendung verwenden.

Hier funktioniert es im Graph API Explorer :

Alex
quelle
4
Ja; Ich beantwortete Ihre Frage mit dieser Antwort: facebook.stackoverflow.com/questions/7956639/…
Igy
2
Für welche Anwendung überprüft diese Abfrage die Installation?
iOS Monster
3
Angenommen, Sie verwenden der Vollständigkeit halber keine anderen Felder (wie E-Mail, Geburtstag usw.), /me/friends?fields=id,name,installedwodurch die ?fields=Feldreihenfolge und die zurückgegebenen Standardinformationen erhalten bleiben, ohne definiert zu sein (true am 05.12.2012).
Plasmid87
5
Zum Zeitpunkt dieses Schreibens gibt diese Abfrage alle Freunde zurück (auch wenn dies installednicht der Fall ist). Wir müssen manuell prüfen, ob das installedFeld für jeden Benutzer vorhanden ist.
Pankaj Bhambhani
Ja, das ist richtig. Ich habe die Antwort bearbeitet, um zu verdeutlichen, dass Sie alle Freunde haben und prüfen müssen, für welche das Flag installiert ist.
Alex
27

Dies kann mit FQL erfolgen.

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

QED!

Loungerdork
quelle
1
Ich habe diese Abfrage ursprünglich verwendet und aufgrund der Latenz bekomme ich jetzt einfach alle Freunde über die Grafik-API und filtere stattdessen auf meiner Anwendungsseite.
Richard
Können Sie weitere Details zur Latenz angeben? Dauert die Beantwortung der Anfrage zu lange? Ich habe mit einem FB-Konto mit mehr als 300 Freunden getestet und die Antwortzeit betrug einige Sekunden (2 bis 4), was IMO nicht schlecht ist.
Loungerdork
1
Ja, das sehe ich ungefähr. Die Grafik-API nimmt eine Größenordnung von 500 ms an, um mehr als 400 Freunde zurückzugeben. Daher ziehe ich es vor, sie alle zu erhalten und dann auf meiner Seite zu filtern.
Richard
3
Sie können auch me()anstelle der?
Philfreo
8

Ja, die Graph-API ist schrecklich dokumentiert. Ich sehe keine Dokumentation für einen „Anwendung“ Typen , aber sie eine Anwendung Informationen in der Dokumentation verweisen:

https://graph.facebook.com/2439131959

Vielleicht können Sie die Mitglieder der Anwendung mithilfe der Gruppensyntax abrufen?

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

Sie benötigen eine authentifizierte Sitzung, um sie zu testen. Ansonsten sieht es so aus, als ob Facebook uns dazu drängt, FQL zu verwenden, um Anfragen direkt zu senden:

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

Sie können FQL-Abfragen ausführen, indem Sie https://api.facebook.com/method/fql.query?query=QUERY abrufen . Sie können ein Antwortformat als XML oder JSON mit dem Formatabfrageparameter angeben.

Sie können also eine FQL-Abfrage übergeben, um Informationen zu Ihrer Anwendung zu erhalten.

typoneerror
quelle
2
Pfui. Das Umschalten auf die Grafik-API scheint eher Kopfschmerzen zu sein, als ich ursprünglich gehofft hatte.
Richard
4
Es ist wahrscheinlich einfacher, alles, was Sie brauchen (außer das Veröffentlichen), mit FQL zu erledigen. Die Graph-API bietet Ihnen im schlimmsten Fall nicht alles, was Sie benötigen, und macht es im besten Fall irritierend schwierig, herauszufinden, wie das geht.
Daniel Schaffer
6

Alte REST-API:

$facebook->api_client->friends_getAppUsers();

Neue Graph API:

$facebook->api(array('method' => 'friends.getAppUsers'));
jana
quelle
4
Dieser SDK-Methodenaufruf verwendet die alte Rest-API unter dem Deckmantel. Es ist nicht die Grafik-API :-(
Richard
5

Ich habe viele Untersuchungen zu diesem Thema durchgeführt. Soweit ich weiß, gibt es keine Möglichkeit, die Friends.getAppUsersGraph-API zu verwenden. Die neuesten von Facebook bereitgestellten SDKs verwenden alle die alte REST-API, um Freunde für die Anwendung zu gewinnen.

Richard
quelle
6
Das ist ziemlich alt und nicht mehr die richtige Antwort. Überprüfen Sie Alex 'Antwort oben.
Bach
Es ist vielleicht nicht die richtige Antwort, aber es ist die Antwort des OP, und es ist eindeutig besser, sich selbst zu verbessern, als die richtige Antwort als richtig zu markieren, weil das Ego.
Ajax
4

Mit restFB habe ich Folgendes gemacht (danke Igy / Alex für die Anleitung). Beachten Sie, dass Facebook ein Array von Freund-IDs mit "installiert" = true zurückgibt, wenn der Benutzer installiert ist (wie hier zu sehen ist ).

Erweitern Sie zuerst die Benutzerklasse und fügen Sie ein installedFeld hinzu:

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;
    }
}

Verwenden Sie als Nächstes den 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
quelle
1

Die Problemumgehung besteht darin, die Filterung selbst durchzuführen. Vermutlich haben Sie alle UIDs der Benutzer, die sich für Ihre Anwendung angemeldet haben, in Ihrer eigenen Datenbank. Holen Sie sich also zuerst die Uids aller Freunde der Benutzer und wählen Sie die Benutzer aus Ihrer Datenbank aus, die über passende Uids verfügen.

Das neue Facebook Graph API-Programm scheint sehr schlecht ausgeführt und nicht ganz durchdacht zu sein. Es scheint, als hätten sie es eilig, es für Facebook f8 zu veröffentlichen, bevor es ausgereift war, und es fehlen viele Funktionen, die zuvor verfügbar waren.

schung
quelle
0

Sie können die alten REST-APIs weiterhin in der neuen Graph-API aufrufen. Das ist perfekt gültig.

Eine alternative Möglichkeit besteht darin, FQL zu verwenden, um die Freunde des Anwendungsbenutzers zu gewinnen.

Ich bin mir nicht sicher, ob es eine Möglichkeit gibt, dies nur mit der Graph-API zu tun.

Roozbeh15
quelle