查询Facebook Graph API时如何发现我在最后一页?



作为练习,我正在编写简单(以及尽可能无状态的)客户端应用程序(在React)显示在单个Facebook实体中的帖子中显示帖子。该应用程序从Facebook Graph API获取数据。

我使用Facebook JS SDK查询以下URL:/<entity-id>/feed?limit=20&fields=...

我有简单的分页按钮("上一个"&amp;" next"),它们分别在response.paging.previousresponse.paging.next中分别查询API响应中收到的分页URL。

问题是我不知道如何找到我是否在最后一页上正确禁用"下一个"按钮。

有几件事我尝试过,但是我仍然没有得到我想要的。

选项1:允许单击"下一个",直到没有更多数据中的数据

  • response.data.length == 0时禁用按钮。

  • paging对象即使没有更多的数据,也包含 next URL,因此我在没有数据的页面之前无法检查它。

  • 问题是,当我到达该页面时,response中也没有paging对象。结果,我无法使用"上一个"按钮与数据返回最后一页。

选项2:允许单击"下一个",直到我收到比查询限制少的数据

  • response.data.length < limit时禁用按钮。

  • data.length % limit != 0的收藏中效果很好。

  • 问题在相反的情况下,例如,当集合中有40个对象并且我在第二页上,我仍然可以单击"下一步",但随后我最终进入了页面没有更多的对象,如选项1所述。

选项3:请记住上一个请求的URL

  • 最后一个请求URL存储在变量中,即使在response中没有paging数据的情况下,"上一个"按钮也可以工作。

  • 仅解决"您不能回去"问题。

  • 无法正确禁用"下一个"按钮来解决问题。仍然可以单击带有数据的最后一页上的"下一步",然后进入没有数据的空页。

所以问题是:

如何找到我已经收到了集合中的最后一项,并单击"下一步",我将获得无效的空页面?

  • 对于我来说,Graph API即使在集合的开始/结尾都提供response.paging URL似乎很奇怪。

  • 例如,如果我有10篇文章的供稿,并且我使用limit 20查询,则我在paging.previous和CC_18和paging.next中都带有data: Array[10]paging对象,即使没有"以前",并且下一" 数据。

  • 查询这些URL会在response中使用空的data数组,并且没有paging对象,因此我无法返回无状态应用程序。

  • 如果集合的开头没有paging.previous,而收藏结束时没有paging.next

  • ,不会更好

对于任何人看到的人 - 这实际上是可行的。我不确定以前是否曾经返回上一个和下一个或OP是否在任何地方犯错误。但是,我可以确认当数据能够按照您的期望向前或向后返回上一个/下一个。

以下示例来自Graph API分页文档,并显示结果集是集合的第一页。

"data": [
       *data returned*
],
"paging": {
  "cursors": {
    "before": "WTI5dGJXVnVkRjlqZAFhKemIzSTZANVGd3T1Rrek9UZAzROVGN3TlRNNE5Eb3hOVEV6TURnM09UTTIZD",
    "after": "WTI5dGJXVnVkRjlqZAFhKemIzSTZANVGd4TURBd09UazROVFk1T0RNM05Eb3hOVEV6TURreU5qQXoZD"
  },
  "next": "https://graph.intern.facebook.com/v2.11/1809938745705498/comments?access_token=valid_token_goes_here"
}

请注意对象中没有"以前的"属性。仅检查下一个或上一个出现是否足以让我继续禁用/隐藏按钮。

通过基于Graph API光标的分页。https://developers.facebook.com/docs/graph-api/using-graph-api#cursors

没有匹配的方法可以按照您的意愿进行操作。您应该分别管理左记录和下一个按钮,分别是图形API分页。作为解决方案预付的下一页,此外还包括当前。

也保存以前的光标是不良习惯:"不要存储光标。如果添加或删除项目,光标可能会很快变得无效。"

相关内容

最新更新