我正在创建一个 javascript facebook 应用程序来概述我的好友列表。实际上,我可以检索我的(登录用户 = 我)好友列表,当我单击好友列表时,我会在该列表中看到我的所有好友。
现在我想要的是,当我单击一个列表时,我想查看属于该列表的朋友,并且我的朋友所属的列表以逗号分隔。
例如,在“最佳”列表中,我有 3 个朋友:Athos、Portos、Aramis。但它们也在其他列表中。所以在我的应用程序中,我想得到这样的东西:
- Athos : 最好的, 家庭, 亲密的朋友, VIP
- 波尔图斯:最佳,VIP
- 阿拉米斯:最好的,亲密的朋友,派对动物
我尝试使用 FQL 多查询,但似乎不可能得到我想要的。
所以我认为我应该使用批处理请求,但是由于我在这里没有很多使用批处理的经验,所以我请求您的帮助。
所以这里是我用来获取属于列表的朋友的 FQL 查询。我需要这个,因为我想从列表开始管理朋友:
var listID = 123;//just enter a listID
var friendsInList = 'SELECT uid,username,profile_url,first_name,last_name,pic_square FROM user WHERE uid IN (SELECT uid FROM friendlist_member WHERE flid =' + listID +')';
现在我不知道如何以干净有效的方式进行。我有一个有效但效率低下的解决方案:
//[...]FB.api call to get a response object with all my friends using the friendsInList query above
for (var i = 0; i < response.length; i++) {
friendID = response[i].uid;
//call FB.api with the following query:
var friendListMemberships = 'SELECT uid, flid, name FROM friendlist_member WHERE flid IN (SELECT flid FROM friendlist WHERE owner=me()) AND uid IN (select uid FROM friendlist WHERE flid =' + friendID;
}
上面的解决方案有效,但效率很低,因为我为每个朋友发送一个 FB.api 请求,对于大列表来说非常慢......因此我希望专业用户帮助我将它放在一个批次中(一个批次最多可以有50 个请求,因此我只想发送 1-2 个请求并取回我需要的所有内容)。
我知道如何写一个批处理,这里我把我的代码结构,如果它可以帮助你完成第二个查询:
var listID = _listID;
var _queryFriendsInList = 'SELECT uid,username,profile_url,first_name,last_name,pic_square FROM user WHERE uid IN (SELECT uid FROM friendlist_member WHERE flid =' + listID + ')';
var queryFriendsInList = _queryFriendsInList.replace(" ", "+");
var _queryFriendListMemberships = 'I have no idea what kind of query I can write here to get the lists my friends from queryFriendsInList are member of';
var queryFriendListMemberships = _queryFriendListMemberships.replace(" ", "+");
var searchArgs = {
access_token: FB.getAuthResponse().access_token,
batch: []
};
searchArgs.batch.push({
'method': 'GET',
'name': 'friendsInList',
'relative_url': 'method/fql.query?query=' + queryFriendsInList,
'omit_response_on_success': false
});
//here is where I need help
searchArgs.batch.push({
'method': 'GET',
'name': 'friendlistMememberships',
'relative_url': 'method/fql.query?query=' + queryFriendListMemberships,
'omit_response_on_success': false
});
FB.api("/", "POST", searchArgs,
function (response) {
//console.log("log");
}
);
我希望问题和代码示例足够清楚。谢谢你的帮忙!