web-dev-qa-db-ja.com

Graph APIを使用したFacebook 'Friends.getAppUsers'

古いREST API呼び出しFriends.getAppUsers申請を承認した現在のユーザーの友人のリストを取得します。

ドキュメントを読みましたが、Graph APIでこれを行うにはどうすればよいですか?これの例は何でしょうか?

87
Richard

私はこの問題について多くの調査を行ってきました。私が知ることができることから、Friends.getAppUsers Graph APIを使用します。 Facebookが提供する最新のSDKはすべて、古いREST APIを使用して、アプリケーションを使用する友人を取得します。

5
Richard

しばらく検索しましたが、Graph APIを使用してこれを行うことはできないと考えました。

しかし、私は同様の質問を投稿しました、私のアプリケーションを使用しているユーザーの友人を見るための古いGetAppUsers呼び出しの置き換え?、私が使用していた特定のAPIであり、非常に一般的な答えが与えられました。

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

またはより一般的に

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

これにより、すべての友達が返され、アプリケーションを使用する友達の追加フィールド「installed = true」が追加されます。

Graph API Explorer で動作しています:

119
Alex

これはFQLで実行できます。

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

QED!

27
loungerdork

はい、Graph APIはひどく文書化されています。 「アプリケーション」のドキュメントは表示されません type ですが、ドキュメント内のアプリケーションの情報を参照しています。

https://graph.facebook.com/2439131959

それでは、おそらくグループ構文を使用してアプリケーションのメンバーを取得できますか?

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

それをテストするには認証されたセッションが必要です。それ以外の場合、Facebookはクエリを直接送信するためにFQLを使用するように私たちを押し付けているようです:

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

https://api.facebook.com/method/fql.query?query=QUERY を取得することでFQLクエリを実行できます。 formatクエリパラメータを使用して、応答形式をXMLまたはJSONとして指定できます。

そのため、FQLクエリを渡して、アプリケーションに関する情報を取得できます。

8
typeoneerror

古いREST API:

$facebook->api_client->friends_getAppUsers();

新しいグラフAPI:

$facebook->api(array('method' => 'friends.getAppUsers'));
6
jana

restFB を使用して、次のことを行いました(ガイダンスについてはIgy/Alexに感謝します)。ユーザーがインストールされている場合、FacebookはフレンドIDの配列を "installed" = trueで返すことに注意してください( here )。

最初にUserクラスを拡張し、installedフィールドを追加します。

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

次に、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
        }
    }
}
4
Ben Flynn

回避策は、フィルタリングを自分で行うことです。おそらく、あなたのアプリケーションにサインアップしたすべてのユーザーのuidがあなた自身のデータベースに座っているでしょう。最初にすべてのユーザーの友人のuidを取得し、一致するuidを持つデータベースからユーザーを選択します。

新しいFacebook Graph APIプログラムの実行は非常に不十分で、十分に検討されていないようです。成熟する前に Facebook f8 で公開しようと急いでいたようで、以前は利用できなかった多くの機能が欠落しています。

1
schung

新しいGraph APIの古いAPI RESTを引き続き呼び出すことができます。これは完全に有効です。

別の方法は、FQLを使用してアプリケーションユーザーの友達を取得することです。

Graph APIだけを使用してこれを行う方法があるかどうかはわかりません。

0
Roozbeh15