古いREST API呼び出しFriends.getAppUsers
申請を承認した現在のユーザーの友人のリストを取得します。
ドキュメントを読みましたが、Graph APIでこれを行うにはどうすればよいですか?これの例は何でしょうか?
私はこの問題について多くの調査を行ってきました。私が知ることができることから、Friends.getAppUsers
Graph APIを使用します。 Facebookが提供する最新のSDKはすべて、古いREST 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 で動作しています:
これはFQLで実行できます。
SELECT uid FROM user
WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = ?)
AND is_app_user = 1
QED!
はい、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クエリを渡して、アプリケーションに関する情報を取得できます。
古いREST API:
$facebook->api_client->friends_getAppUsers();
新しいグラフAPI:
$facebook->api(array('method' => 'friends.getAppUsers'));
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
}
}
}
回避策は、フィルタリングを自分で行うことです。おそらく、あなたのアプリケーションにサインアップしたすべてのユーザーのuidがあなた自身のデータベースに座っているでしょう。最初にすべてのユーザーの友人のuidを取得し、一致するuidを持つデータベースからユーザーを選択します。
新しいFacebook Graph APIプログラムの実行は非常に不十分で、十分に検討されていないようです。成熟する前に Facebook f8 で公開しようと急いでいたようで、以前は利用できなかった多くの機能が欠落しています。
新しいGraph APIの古いAPI RESTを引き続き呼び出すことができます。これは完全に有効です。
別の方法は、FQLを使用してアプリケーションユーザーの友達を取得することです。
Graph APIだけを使用してこれを行う方法があるかどうかはわかりません。