3

我在 Facebook Graph API 资源管理器中查询数据:

access_token="SECRET"
GET https://graph.facebook.com/me/home?limit=20&until=1334555920&fields=id

结果:

{
  "data": [
  ]
}

我很震惊,因为我的“家”上有很多饲料。

然后我尝试将限制设置为 100,然后我得到了一个提要列表。

这里发生了什么?“limit”参数会影响graph api的结果吗?


我尝试将限制增加到 25 并再次查询,有一个提要。

那么“限制”和“直到”之间的关系是什么?

4

1 回答 1

3

Facebook 的 API 有时会因为您尝试访问的数据而有点奇怪,而且这个问题有几个部分。

限制

在返回数据时应用限制,但生成权限和访问控制之前,这在去年的这篇博文中进行了解释:Graph API 中的限制

权限

更重要的是,即使您给自己一个拥有所有 FB 权限的令牌,您仍然无法访问您创建的所有内容。假设您在朋友的提要上发布了一些内容,但他们的提要未设置为公开隐私。使用您的令牌对该朋友的提要进行的任何查询都将永远不会返回数据(或者至少一年前是这种情况)。

API 本身

去年我在使用 Graph API 时发现的最棒的错误之一是它处理分页的方式。Graph API 允许三个过滤器:limit、offset 和 since/until。在某处 Facebook 建议(并且正确地如此)您尽可能仅使用开始/截止日期进行分页。忽略关于为什么要在理论基础上与偏移量相比的争论,在实际情况下,以下查询会随着时间的推移而退化:

// This obviously isn't valid as written, but you the params change as described
limit=fixed-value&offset=programmatic-increase&since=some-fixed-date-here

原因:日期范围和偏移量彼此之间表现不佳。例如,假设我进行了以下初始查询:

// My example query
limit=20&since=1334555920

--> {#1,#2, ... #20}

自然,您会想要分页更多数据。结果将是这样的(我不记得确切的模式,但顶部n会重复,结果列表会被截断n/2或类似的东西):

// My example query
limit=20&since=1334555920&offset=20

---> {#10, #11 ... #25}

我从来不知道为什么会这样,但最终查询会逐渐减少,什么也不返回,你只会得到大约 50-100 个唯一值。但是,如果您只使用日期进行分页,则只要数据允许,您就可以继续。

这是一个警告,这是一个错误,这是不久前的。这里的主要教训是,如果不修改我的查询以使结果完全相同,我永远不会发现这个错误(基于帖子#10-30 的特定日期范围与限制 = 20,偏移量 = 10 相比)但是结果完全不同。

于 2012-04-17T10:23:58.963 回答