如果我请求具有大量对象的东西(例如,如果您在相册中有 10000 个朋友或 10000 张照片),C# Facebook SDK 是否会自动为我跟随“Paging:Next”链接,或者有什么我需要去做?
我查看了他们的代码,没有看到任何关于分页的提及,但可能会错过它。
请注意,我不是在谈论批处理请求;我说的是一个简单的 api.Get("/me/friends") ,其中 Facebook 认为有太多对象无法放入单个响应中。不幸的是,我没有足够的帐户来测试结果...
如果我请求具有大量对象的东西(例如,如果您在相册中有 10000 个朋友或 10000 张照片),C# Facebook SDK 是否会自动为我跟随“Paging:Next”链接,或者有什么我需要去做?
我查看了他们的代码,没有看到任何关于分页的提及,但可能会错过它。
请注意,我不是在谈论批处理请求;我说的是一个简单的 api.Get("/me/friends") ,其中 Facebook 认为有太多对象无法放入单个响应中。不幸的是,我没有足够的帐户来测试结果...
无论 Facebook 使用哪个 SDK,分页始终取决于 SDK 的用户。我认为他们在添加它时没有那么有创意,或者也许有一些他们没有的法律原因。
这是我最终使用的代码。因为我从专辑的“计数”中知道有多少张图片,所以我只是分批请求它们,直到达到这个数量。对于您事先不知道要返回多少对象的情况,这会比较棘手,但我还没有遇到这种需要。
const long maxBatchSize = 50;
for (long q = 0; q < album.Count; q += maxBatchSize)
{
var facebook = new FacebookClient(FacebookSession.AccessToken);
facebook.GetCompleted += new EventHandler<FacebookApiEventArgs>(GetPhotosCallback);
long take = album.Count - q;
if (take > maxBatchSize)
take = maxBatchSize;
dynamic parameters = new ExpandoObject();
parameters.limit = take;
parameters.offset = q;
facebook.GetAsync("/" + album.Id + "/photos", parameters, null);
}
如果您查看 Facebook 返回的数据,结果中通常会有分页元素。分页元素包含下一个和上一个 url。这些 URL 由 Facebook 创建,“下一个”可用于检索更多信息。以下是 /me/posts -request 的令牌示例:
{
data: [ ... ],
"paging": {
"previous": "https://graph.facebook.com/6644332211/posts?limit=25&since=1374648795",
"next": "https://graph.facebook.com/6644332211/posts?limit=25&until=1374219441"
}
}
如果您想自动检索所有项目,您可以从“下一个”url 中选择相关参数并将其传递给 Facebook SDK get 方法。
您需要选择的相关参数取决于您检索的信息类型。在帖子中,您只有“直到”,对于签入,我还可以看到称为 pagingtoken 的东西。