2011-10-31 13 views
10

Jednym niezwykle przydatnym połączeniem w starym interfejsie API REST jest Friends.getAppUsers. To połączenie zwraca wszystkich znajomych, którzy korzystają z aplikacji. Niestety, nie jest to możliwe w interfejsie API Open Graph. Istnieje dobry post stosu przepełnienia stosu o tym, Facebook 'Friends.getAppUsers' using Graph API.Zastąpienie starego połączenia GetAppUsers, aby wyświetlić znajomych użytkownika, którzy korzystają z mojej aplikacji?

Możliwe jest jednak użycie interfejsu Graph API do wykonywania połączeń FQL, co można zobaczyć tutaj: Graph API explorer.

Pomyślałem, że mógłbym zrobić następujące połączenie przy użyciu C# SDK:

fb.GetAsync("fql/?q=SELECT uid,username, is_app_user FROM user WHERE uid IN(SELECT uid2 FROM friend WHERE uid1 = me()) AND is_app_user=1"); 

Jednak ten zwrócił błąd. Czy istnieje sposób obejścia brak połączenia GetAppUsers przy użyciu istniejącego C# SDK?

Odpowiedz

30

Zastąpienie wywołanie API dla users.isAppUser jest proste wywołanie /me/?fields=installed Działa to również dla znajomych danego użytkownika, więc co za tym idzie jest to zamiennik friends.getAppUsers.

Próbowałem tego zarówno z tokenem dostępu aplikacji, jak i zwykłym tokenem dostępu użytkownika. Złóż wywołania API do /{user id}/friends?fields=installed - Zwrot wygląda następująco:

{ 
    "data": [ 
    { 
     "id": "{FRIEND_UID_1}" 
    }, 
    { 
     "id": "{FRIEND_UID_2}" 
    }, 
    // etc... 
    { 
     "installed": true, 
     "id": "{FRIEND_UID_X}" 
    } 

// SNIP

można wykorzystywać obecność lub brak nich wyroby, z installed:true aby określić, które z znajomi użytkownika korzystają z Twojej aplikacji.

Jeśli to nie zadziała z jakiegoś powodu; czy nie masz już listy uids użytkowników swojej aplikacji we własnej bazie danych? Możesz po prostu pobrać pełną listę znajomych i porównać ją z własnymi zapisami osób korzystających z Twojej aplikacji.

+0

Na marginesie, FQL w pierwotnym pytaniu zasadniczo wygląda dla mnie dobrze; jaki błąd otrzymałeś? Być może będzie można użyć czegoś bardzo podobnego do uzyskania odpowiedzi, może to być problem z formatowaniem lub coś podobnego – Igy

0

Wystąpił problem związany z Twoją ścieżką.

uid1 = me()) AND is_app_user=1 

= nie jest poprawnie zakodowany URL. Wymień = na %3d.

To może wyglądać brzydko. Więc lepszym sposobem byłoby użyć metody Query/QueryAsync:

fb.QueryAsync("SELECT uid,username, is_app_user FROM user WHERE uid IN(SELECT uid2 FROM friend WHERE uid1 = me()) AND is_app_user=1"); 

Jeśli używasz v5.2.1 lub wcześniej, Query użyje API Legacy resztę. Jeśli używasz wersji późniejszej niż wersja 5.3.1, użyje interfejsu Graph API do wykonania zapytania FQL.

Powiązane problemy