我有一个使用旧REST API调用的应用程序,Friends.getAppUsers
以获取已授权我的应用程序的当前用户的朋友列表。
我已经阅读了文档,如何使用Graph API做到这一点?这样的例子是什么?
Answers:
我搜索了一会儿,我也认为使用Graph API无法实现这一点。
但是,我发布了一个类似的问题,“为旧的GetAppUsers调用替换”,以查看使用我的应用程序的用户朋友?,对于我使用的特定API,给出了一个很好的一般答案。
https://graph.facebook.com/me/friends?fields=installed
或更一般地
https://graph.facebook.com/{user id}/friends?fields=installed
这将返回所有朋友,并为使用该应用程序的朋友提供附加字段“ installed = true”。
/me/friends?fields=id,name,installed
,它会保留字段顺序和?fields=
未定义的返回标准信息(2012年12月5日为true)。
installed
不正确)。我们需要手动检查installed
每个用户是否存在该字段。
这可以通过FQL完成。
SELECT uid FROM user
WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = ?)
AND is_app_user = 1
QED!
me()
代替?
是的,Graph API的文档非常糟糕。我没有看到有关“应用程序”类型的任何文档,但是它们确实在docs中引用了应用程序的信息:
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查询来获取有关您的应用程序的信息。
旧的REST API:
$facebook->api_client->friends_getAppUsers();
新的图形API:
$facebook->api(array('method' => 'friends.getAppUsers'));
使用restFB,我做了以下工作(感谢Igy / Alex的指导)。注意,Facebook的返回朋友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发布它,并且缺少许多以前可用的功能。