Facebook图谱API中基于游标的分页

时间:2017-03-23 14:04:33

标签: json facebook-graph-api pagination swift3

根据graphApi的文档:

  

基于游标的分页

     

基于游标的分页是最有效的分页方法,应尽可能使用。一个   cursor指的是一个标记特定字符的随机字符串   数据列表中的项目。除非删除此项,否则光标将   始终指向列表的相同部分,但如果是,则无效   项目已删除。因此,您的应用不应存储任何旧游标   或者假设它们仍然有效。

     

当读取支持光标分页的边缘时,您将看到   遵循JSON响应:

    {
  "data": [
     ... Endpoint data is here
  ],
  "paging": {
    "cursors": {
      "after": "MTAxNTExOTQ1MjAwNzI5NDE=",
      "before": "NDMyNzQyODI3OTQw"
    },
    "previous": "https://graph.facebook.com/me/albums?limit=25&before=NDMyNzQyODI3OTQw"
    "next": "https://graph.facebook.com/me/albums?limit=25&after=MTAxNTExOTQ1MjAwNzI5NDE="
  }
}

但我不知道这里发生了什么,任何人都可以指出我们如何做基于光标的分页?我通过传递Max_id做了类似的事情,但在这里并非如此

这就是我第一次打电话的方式

    accessKey = "\(appID)|\(appSecret)"
    let connection = GraphRequestConnection()

    let request = GraphRequest.init(graphPath:"/myPageName/posts", parameters: [ "access_token" : accessKey, "fields" : "message,full_picture,created_time,story,type,permalink_url" , "limit": "10"], accessToken: nil, httpMethod: .GET, apiVersion: "2.8") 



        connection.add(request) { httpResponse, result in
        switch result {
        case .success(let response):

//FETCHED DATA HERE///

 case .failed(let error):
            print("Graph Request Failed: \(error)")
        }
 }
    connection.start()

2 个答案:

答案 0 :(得分:0)

(代表OP发布)

在参数中传递偏移完成了工作。

答案 1 :(得分:0)

For this lets first understand Cursor paging with an example :

假设我们想要从最近的用户分页到最老的用户。当客户端第一次请求时,假设我们通过查询选择第一页:

SELECT * FROM users
WHERE team_id = %team_id
ORDER BY id DESC
LIMIT %limit

限制 等于限制加一,以获取比客户端指定的计数多一个结果。额外结果不会在结果集中返回,但我们使用值的ID作为 next_cursor

服务器的响应是:

{
   "users": [...],
   "next_cursor": "1234",  # the user id of the extra result
}

然后客户端会在第二个请求中提供 next_cursor 作为游标。

SELECT * FROM users
WHERE team_id = %team_id
AND id <= %cursor
ORDER BY id DESC
LIMIT %limit
  

回到Facebook实施:顾名思义 next 光标将为您提取下一组结果和 previous 光标将获取上一组结果。

如果您仍然无法理解游标及其使用原因,可以查看此article。上面的例子引用了相同的内容。