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?

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 :


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!


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.


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'));

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.


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

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.


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.