Facebook „Friends.getAppUsers” za pomocą Graph API

87

Mam aplikację, która używa starego wywołania REST API, Friends.getAppUsersaby uzyskać listę znajomych dla bieżącego użytkownika, który autoryzował moją aplikację.

Zapoznałem się z dokumentacją, jak to zrobić za pomocą Graph API? Jaki byłby tego przykład?

Richard
źródło

Odpowiedzi:

119

Rozejrzałem się przez chwilę i też pomyślałem, że nie jest to możliwe przy użyciu Graph API.

Jednak wysłałem podobne pytanie, Zastąpienie starego połączenia GetAppUsers, aby zobaczyć znajomych użytkownika, którzy używają mojej aplikacji? , dla konkretnego interfejsu API, którego używałem, i otrzymałem świetną ogólną odpowiedź.

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

lub bardziej ogólnie

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

Zwraca to wszystkich znajomych, z dodatkowym polem „installed = true” dla tych znajomych, którzy używają aplikacji.

Oto jak działa w Graph API Explorer :

Alex
źródło
4
Tak; Odpowiedziałem na twoje pytanie następującą odpowiedzią: facebook.stackoverflow.com/questions/7956639/ ...
Igy
2
W przypadku której aplikacji to zapytanie sprawdza instalację?
iOS Monster
3
Zakładając, że nie używasz żadnych innych pól (takich jak e-mail, data urodzenia itp.), Aby użyć kompletności /me/friends?fields=id,name,installed, co zachowuje kolejność pól i standardowe informacje, które są zwracane bez ?fields=zdefiniowania (prawda na 2012/12/05).
plazmid87
5
W chwili pisania tego zapytania to zapytanie zwraca wszystkich znajomych (nawet dla których installednie jest prawdą). Musimy ręcznie sprawdzić, czy installedpole istnieje dla każdego użytkownika.
Pankaj Bhambhani
Tak, zgadza się, zredagowałem odpowiedź, aby było jasne, że masz wszystkich znajomych i musisz sprawdzić, którzy mają zainstalowaną flagę.
Alex,
27

Można to zrobić za pomocą FQL.

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

CO BYŁO DO OKAZANIA!

leżak
źródło
1
Pierwotnie użyłem tego zapytania i ze względu na opóźnienie teraz po prostu pobieram wszystkich znajomych za pośrednictwem graficznego interfejsu API, a następnie filtruję po stronie mojej aplikacji.
Richard
Czy możesz podać więcej szczegółów na temat opóźnienia? Czy odpowiedź na zapytanie trwa zbyt długo? Testowałem na koncie FB z ponad 300 znajomymi, a czas odpowiedzi wyniósł kilka sekund (od 2 do 4), co nie jest takie złe w IMO.
loungerdork
1
Tak, z grubsza to widzę. Graph API przyjmuje kolejność 500 ms, aby zwrócić ponad 400 znajomych, więc wolę pobrać ich wszystkich, a następnie filtrować po mojej stronie.
Richard
3
możesz też użyć me()zamiast?
philfreo
8

Tak, Graph API jest okropnie udokumentowany. Nie widzę żadnej dokumentacji na „application” typu , ale robią odwoływać informacji danej aplikacji w docs:

https://graph.facebook.com/2439131959

Być może więc możesz pobrać członków aplikacji za pomocą składni Group?

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

Będziesz potrzebować uwierzytelnionej sesji, aby ją przetestować. W przeciwnym razie wygląda na to, że Facebook naciska na nas, abyśmy używali FQL do bezpośredniego wysyłania zapytań:

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

Możesz wykonywać zapytania FQL, pobierając https://api.facebook.com/method/fql.query?query=QUERY . Możesz określić format odpowiedzi jako XML lub JSON za pomocą parametru zapytania formatu.

Możesz więc przekazać zapytanie FQL, aby uzyskać informacje o swojej aplikacji.

typoneerror
źródło
2
Fuj. Wydaje się, że przełączanie się światła na interfejs API wykresu jest bardziej bólem głowy, na który początkowo miałem nadzieję.
Richard
4
Prawdopodobnie łatwiej jest zrobić wszystko, czego potrzebujesz (oprócz publikowania), używając FQL. W najgorszym przypadku Graph API nie zapewni Ci wszystkiego, czego potrzebujesz, a co najwyżej sprawi, że irytująco trudno będzie dowiedzieć się, jak to zrobić.
Daniel Schaffer
6

Stary interfejs API REST:

$facebook->api_client->friends_getAppUsers();

Nowy Graph API:

$facebook->api(array('method' => 'friends.getAppUsers'));
jana
źródło
4
To wywołanie metody SDK używa starego interfejsu API REST pod okładkami. To nie jest wykres api :-(
Richard
5

Przeprowadziłem wiele dochodzeń w tej sprawie. Z tego, co wiem, nie da się tego zrobić Friends.getAppUsersza pomocą Graph API. Najnowsze SDK dostarczane przez Facebooka używają starego interfejsu API REST, aby pozyskiwać znajomych za pomocą aplikacji.

Richard
źródło
6
To jest dość stare i nie jest już właściwą odpowiedzią. Sprawdź odpowiedź Alexa u góry.
Bach
Może to nie jest właściwa odpowiedź, ale jest to odpowiedź OP i zdecydowanie lepiej jest głosować za siebie, niż oznaczać poprawną odpowiedź jako poprawną z powodu ego.
Ajax
4

Używając restFB , wykonałem następujące czynności (dzięki Igy / Alex za wskazówki). Zauważ, że Facebook zwraca tablicę identyfikatorów znajomych z "installed" = true, jeśli użytkownik jest zainstalowany (jak widać tutaj ).

Najpierw rozszerz klasę User, dodając installedpole:

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

Następnie, używając 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
źródło
1

Sposób obejścia problemu polega na samodzielnym wykonaniu filtrowania. Przypuszczalnie wszystkie identyfikatory użytkowników, którzy zarejestrowali się w Twojej aplikacji, znajdują się we własnej bazie danych. Więc najpierw pobierz identyfikatory wszystkich znajomych użytkowników i wybierz użytkowników z bazy danych, którzy mają pasujące identyfikatory.

Nowy program Facebook Graph API wydaje się bardzo słabo wykonany i niezupełnie przemyślany. Wygląda na to, że spieszyli się z opublikowaniem go na Facebooku f8, zanim stał się dojrzały, i brakuje wielu funkcji, które były dostępne wcześniej.

schung
źródło
0

Nadal możesz wywoływać stare interfejsy API REST w nowym interfejsie Graph API. To jest całkowicie ważne.

Alternatywnym sposobem jest użycie FQL w celu pozyskania znajomych użytkownika aplikacji.

Nie jestem pewien, czy istnieje sposób, aby to zrobić, używając tylko Graph API.

Roozbeh15
źródło