1

如果我请求具有大量对象的东西(例如,如果您在相册中有 10000 个朋友或 10000 张照片),C# Facebook SDK 是否会自动为我跟随“Paging:Next”链接,或者有什么我需要去做?

我查看了他们的代码,没有看到任何关于分页的提及,但可能会错过它。

请注意,我不是在谈论批处理请求;我说的是一个简单的 api.Get("/me/friends") ,其中 Facebook 认为有太多对象无法放入单个响应中。不幸的是,我没有足够的帐户来测试结果...

4

3 回答 3

1

无论 Facebook 使用哪个 SDK,分页始终取决于 SDK 的用户。我认为他们在添加它时没有那么有创意,或者也许有一些他们没有的法律原因。

于 2012-06-05T17:33:35.447 回答
1

这是我最终使用的代码。因为我从专辑的“计数”中知道有多少张图片,所以我只是分批请求它们,直到达到这个数量。对于您事先不知道要返回多少对象的情况,这会比较棘手,但我还没有遇到这种需要。

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);
}
于 2012-06-05T21:24:48.880 回答
0

如果您查看 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 的东西。

于 2013-09-13T02:32:01.540 回答