我需要使用FB.api('/<some_id>/')
从Facebook获取基本用户数据。这很好用,但速度很慢,因为我需要单独询问每个id,并多次拨打facebook。有没有办法收集所有ID并在单个请求中请求它们并获得一个数组?
修改
我不是要求用户朋友。我实际上是想收集用户的朋友的朋友,这是Facebook没有提供的东西,这就是我使用graph.facebook.com/<id>/
而不是graph.facebook.com/me/friends
的原因。我不想要朋友,我想做这样的事情:graph.facebook.com/<id1>,<id2>,<id3>,../
答案 0 :(得分:2)
您可以使用fql查询获取所有朋友的信息:
SELECT uid, name, pic_small FROM user
WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me())
如果您提示用户获得更多扩展权限,您将能够访问user table中的更多字段。
如果您正在尝试查询不是用户朋友的arbritary用户ID列表,您可以尝试在FQL查询中指定该列表以使用Facebook FQL Multiquery功能,执行多个select uid, name from user where uid = friendid1
声明。
答案 1 :(得分:1)
如何使用FQL
:
来自Facebook的例子:
var friends = FB.Data.query(
"(select uid2 from friend where uid1 = {0})",
user_id);
var friendsoffriends = FB.Data.query(
"select uid2 from friend where uid1 in (select uid2 from {0})",
friends;
// Now, register a callback
FB.Data.waitOn([friends, friendsoffriends], function() {
// now display all the results
FB.Array.forEach(friendsoffriends.value, function(row) {
console.log(row.uid);
});
});
然后编辑您想要使用的任何ID集合。
上述方法仍然有效(作为一个合理的通用示例) - 但是,澄清:
您以前使用users.getInfo来做您要求的事情,因为这可以让您传递UIDS列表。不幸的是,这已被弃用。但是,所有这些实际上的查询都包含了一个FQL查询。
如果您在语法中应用标准FQL,则可以实现此目的:
{
myfriends:'select uid2 from friend where uid1=me()',
friendsoffriends:'select uid2 from friend where uid1 in (select uid2 from #myfriends)'
}
然而,facebook会主动阻止您使用错误执行此操作:
"error_code": 604,
"error_msg": "Can't lookup all friends of 123456789. Can only lookup for the logged in user (987654321), or friends of the logged in user with the appropriate permission",
您的另一个选择是获取所有ID并对表单执行FQL查询:
select name from user where uid='123456789' OR uid='987654321' OR uid=...
答案 2 :(得分:0)
不再支持FQL,但这种方法可以解决新的API:
Requesting multiple Facebook fanpage data in a single call
简而言之,使用ids
param:
FB.api(
'/',
{ids : "19292868552,11239244970"},
function(response) {
if (!response || response.error) {
console.log(response.error);
} else {
console.log(response);
}
}
);