以前のREST API呼び出しFriends.getAppUsers
を使用して、アプリケーションを承認した現在のユーザーの友達のリストを取得するアプリケーションがあります。
ドキュメントを読みましたが、Graph APIでこれを行うにはどうすればよいですか?この例は何でしょうか?
回答:
しばらく探し回ったところ、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で機能しています。
/me/friends?fields=id,name,installed
するため、フィールドの順序と、?fields=
定義されずに返される標準情報が保持されます(2012/12/05の場合はtrue)。
installed
が当てはまらない場合でも)。installed
各ユーザーのフィールドが存在するかどうかを手動で確認する必要があります。
これはFQLで実行できます。
SELECT uid FROM user
WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = ?)
AND is_app_user = 1
QED!
me()
?の代わりに使用することもできます。
はい、グラフ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クエリを渡して、アプリケーションに関する情報を取得できます。
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
}
}
}
回避策は、フィルタリングを自分で行うことです。おそらく、あなたはあなた自身のデータベースに座っているあなたのアプリケーションにサインアップしたユーザーのすべてのuidを持っています。したがって、最初にすべてのユーザーの友達のuidを取得し、一致するuidを持つデータベースからユーザーを選択します。
新しいFacebook Graph APIプログラムは、実行が非常に不十分で、よく考えられていないようです。それが成熟する前に、彼らはFacebook f8用にそれを公開することを急いでいたようであり、以前に利用可能であった多くの機能が欠落しています。