グラフAPIを使用したFacebookの「Friends.getAppUsers」


87

以前のREST API呼び出しFriends.getAppUsersを使用して、アプリケーションを承認した現在のユーザーの友達のリストを取得するアプリケーションがあります。

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

回答:


119

しばらく探し回ったところ、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で機能しています


4
うん。:私はこの答えであなたの質問に答えfacebook.stackoverflow.com/questions/7956639/...
IGY

2
このクエリはどのアプリケーションのインストールをチェックしますか?
iOSモンスター

3
他のフィールド(電子メール、誕生日など)を使用していないと仮定すると、完全に使用/me/friends?fields=id,name,installedするため、フィールドの順序と、?fields=定義されずに返される標準情報が保持されます(2012/12/05の場合はtrue)。
プラスミド87

5
この記事の執筆時点では、このクエリはすべての友達を返します(それinstalledが当てはまらない場合でも)。installed各ユーザーのフィールドが存在するかどうかを手動で確認する必要があります。
Pankaj Bhambhani 2013年

はい、正解です。答えを編集して、すべての友達を取得し、どの友達にインストール済みフラグがあるかを確認する必要があることを明確にしました。
Alex

27

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

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

QED!


1
私はこのクエリを最初に使用しましたが、レイテンシのため、グラフAPIを介してすべての友達を取得し、代わりにアプリケーション側でフィルタリングします。
Richard

待ち時間について詳しく教えてください。クエリの応答に時間がかかりすぎていませんか?私は約300人以上の友達がいるFBアカウントを使用してテストしており、応答時間は数秒(2〜4)でした。これはIMOとしては悪くありません。
loungerdork 2010年

1
ああ、それは大体私が見るものです。グラフAPIは500ミリ秒のオーダーで400以上の友達を返すので、それらすべてを取得してから、自分の側でフィルタリングすることを好みます。
Richard

3
me()?の代わりに使用することもできます。
philfreo 2009

8

はい、グラフAPIは恐ろしく文書化されています。「アプリケーション」タイプのドキュメントはありませんが、ドキュメント内のアプリケーションの情報を参照しています。

https://graph.facebook.com/2439131959

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

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クエリを渡して、アプリケーションに関する情報を取得できます。


2
ああ。グラフAPIへの軽い切り替えは、私が当初望んでいた頭痛の種のようです。
Richard

4
FQLを使用すると、必要なすべてのこと(公開を除く)を実行する方が簡単です。最悪の場合、Graph APIは必要なすべてを提供するわけではありません。
ダニエルシャファー2010

6

古いREST API:

$facebook->api_client->friends_getAppUsers();

新しいグラフAPI:

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

4
このSDKメソッド呼び出しは、内部では古いREST APIを使用します。グラフapiではありません:-(
Richard

5

私はこの問題について多くの調査を行いました。私が言えることから、Friends.getAppUsersGraph APIを使用する方法はありません。Facebookが提供する最新のSDKはすべて、古いREST APIを使用して、アプリケーションを使用する友達を獲得します。


6
これはかなり古く、正しい答えではありません。上部でアレックスの答えを確認してください。
バッハ

それは正しい答えではないかもしれませんが、それはOPの答えです。エゴのため、正しい答えを正しいとマークするよりも、自分を賛成するほうが明らかに良いです。
Ajax

4

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

まず、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
        }
    }
}

1

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

新しいFacebook Graph APIプログラムは、実行が非常に不十分で、よく考えられていないようです。それが成熟する前に、彼らはFacebook f8用にそれを公開することを急いでいたようであり、以前に利用可能であった多くの機能が欠落しています。


0

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.