我使用Facebook v4.0.1集成到我的应用程序中。我使用FBSDKGraphRequest获取好友列表
FBSDKGraphRequest *friendsRequest = [[FBSDKGraphRequest alloc] initWithGraphPath:@"me/friends" parameters:nil];
FBSDKGraphRequestConnection *connection = [[[FBSDKGraphRequestConnection alloc] init] autorelease];
[connection addRequest:friendsRequest
completionHandler:^(FBSDKGraphRequestConnection *innerConnection, NSDictionary *result, NSError *error) {
}];
// start the actual request
[connection start];
它只返回大约25个朋友和一个名为分页的param以获得下一个朋友。
我如何使用分页来获取下一个或者有另一种方式来吸引所有朋友
答案 0 :(得分:15)
接受的答案让我朝着正确的方向前进,但并非100%正确。
对于使用图v2.3的FacebookSDK 4.x,除非您达到限制,否则现在只能获得25个结果。您可以选择的最大限制是1k。这是一个获得100的例子:
NSMutableString *facebookRequest = [NSMutableString new];
[facebookRequest appendString:@"/me/friends"];
[facebookRequest appendString:@"?limit=100"];
FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
initWithGraphPath:facebookRequest
parameters:nil
HTTPMethod:@"GET"];
[request startWithCompletionHandler:<YOUR BLOCK HERE>];
注意 - YOUR_BLOCK_HERE是您用来处理结果的块。
现在出现了分页的问题。粘贴在接受的答案中的JSON代码不正确。以下是/我/朋友的JSON:
data = (
{
id = 1234567890123456711;
name = “John Snow";
},
{
id = 1234567891234567891;
name = “Ned Stark";
}
);
paging = {
next = "https://graph.facebook.com/v2.3/<FB_USER_ID>/friends?limit=100&format=json&access_token=<SESSION_TOKEN>&offset=100&__after_id=enc_asdfasas2393nfaASDVASEqwe";
};
summary = {
"total_count" = 175;
};
我们从Facebook的JSON结果中知道,由于以下两个原因,我们需要继续分页:1。)我们在数据部分中有图表结果2.)我们得到了下一个网址。
注 - SESSION_TOKEN是发出请求的当前会话令牌。
注意 - FB_USER_ID是发出请求的用户的Facebook ID。
现在,这就是您执行'下一页'请求的方式。如果要使用FBSDKGraphRequest,则必须删除Facebook URL。
NSString *nextUrl = [pagingDictionary objectForKey:@"next"];
//remove the 'https://graph.facebook.com/v2.3/'
nextUrl = [nextUrl substringFromIndex:32];
FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
initWithGraphPath:nextUrl
parameters:nil
];
[request startWithCompletionHandler:<YOUR_BLOCK_HERE>];
编写代码,以便使用递归块调用或递归方法调用来调用facebook分页。我明显简化了我的帖子,专注于问题。通过这种方式,您可以编写一次块解析代码,并将其重用于不同类型的分页请求,例如“我/朋友”或“我/ invitable_friends”。
答案 1 :(得分:1)
"paging": {
"previous": "me/friends?limit=25&before=NDMyNzQyODI3OTQw"
"next": "me/friends?limit=25&after=MTAxNTExOTQ1MjAwNzI5NDE="
}
分页应包括“下一个”&amp; “以前的”网址,您将希望使用这些网址代替您的原始@“我/朋友”字符串,您将获得当前数据之前或之后的页面。如果不再有“下一个”,则意味着没有更多页面可供您请求。
您可以随时尝试将限制参数添加到第一个请求中,看看当您将25限制提高到更高时会发生什么。我不确定你有多少能够一次性获得,但至少它是一个上限,所以它会在它结束时返回它。
此处提供更多寻呼信息:https://developers.facebook.com/docs/graph-api/using-graph-api/v2.3#paging
答案 2 :(得分:-1)
您尝试此代码
FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
initWithGraphPath:@"/me/friends"
parameters:params
HTTPMethod:@"POST"];
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection,
id result,
NSError *error) {
// Handle the result
}];