跳转到主要内容

介绍

分页是 X API v2 各个 endpoint 提供的一项功能,用于在单个响应无法容纳全部结果时,将结果分成多次返回。当出现这种情况时,data 会以一系列“页面”的形式返回。分页是指通过编程方式请求所有页面,以检索完整的结果数据集。并非所有 API endpoint 都支持或需要分页,但在结果集较大时通常会用到。

分页的使用场景

检索某个请求的全部结果: 应使用分页来获取与特定请求及其参数相关的所有数据。当匹配结果数量超过该请求的 max_results 时,需要使用分页。通过使用分页令牌循环发送请求,可以检索全部结果。一旦返回的响应中不包含 next_token 值,即可认为所有结果都已分页获取。分页不应用于轮询。若要获取自上次请求以来的最新结果,请参阅使用 since_id 的轮询说明。 遍历请求的结果: 分页通过使用响应中的 next_tokenprevious_token 值,为浏览请求结果提供前后导航。可以在后续请求中将这些令牌设置为 pagination_token,以跳转到结果的下一页或上一页。

分页令牌定义

  • next_token - 在支持分页的 endpoint 上,返回于 meta 对象中的不透明字符串。表示还有更多结果可用,可在下一次请求中作为 pagination_token 参数使用,以返回下一页结果。最后一页结果不会包含 next_token
    • previous_token - 在支持分页的 endpoint 上,返回于 meta 对象中的不透明字符串。表示存在上一页结果,可在下一次请求中将其设为 pagination_token 参数以返回上一页结果。
    • pagination_token - 用于分页请求的参数。将其设置为 next_token 的值以获取下一页结果;将其设置为 previous_token 的值以获取上一页结果。

分页基础

  • 使用分页的 endpoint 会在初始请求中返回第一页结果;如果还有更多结果页可用,会在 JSON 响应的 meta 对象中提供一个 next_token。要获取全部结果,请重复此流程,直到响应中不再包含 next_token
    • 结果按时间倒序返回。这一点在单个页面内以及跨多个页面都适用:
      • 第一个响应中的第一个 Post 是最新的。
      • 最后一个响应中的最后一个 Post 是最早的。
    • max_results 请求参数用于配置每个响应页返回的 Post 数量。max_results 具有默认值和上限值。
    • 所有分页实现都需要从响应负载中解析令牌,以用于后续请求。
    • 在某些情况下,每页返回的结果可能少于 max_results。不要假设每页结果总是等于 max_results 参数值。
    • 获取完整结果的最佳分页方式是:在集成代码中使用循环逻辑,或使用支持 X API v2 的

分页示例

此处由于将 max_results 设为 100,且在 2019 年 1 月 1 日 17:00:00 UTC 至 12 月 12 日 00:00:00 UTC 期间,用户 ID 2244994945(@XDevelopers)大约创建了 295 条 Post,因此结果共有三页。第一页的第一条 Post(1337498609819021312)是最新的,第三页的最后一条 Post(1082718487011885056)是最早的。

初始请求

      https://api.x.com/2/users/2244994945/tweets?tweet.fields=created_at&max_results=100&start_time=2019-01-01T17:00:00Z&end_time=2020-12-12T01:00:00Z

序列表格

首次请求第二页第三页第四页
请求参数- max_results = 100 - tweet.fields = created_at - start_time = 2019-01-01T17:00:00Z - end_time = 2020-12-12T01:00:00Z- max_results = 100 - tweet.fields = created_at - start_time = 2019-01-01T17:00:00Z - end_time = 2020-12-12T01:00:00Z - pagination_token = 7140w- max_results = 100 - tweet.fields = created_at - start_time = 2019-01-01T17:00:00Z - end_time = 2020-12-12T01:00:00Z - pagination_token = 7140k9- max_results = 100 - tweet.fields = created_at - start_time = 2019-01-01T17:00:00Z - end_time = 2020-12-12T01:00:00Z - pagination_token = 71408hi
响应json { "data": [ { "created_at": "2020-12-11T20:44:52.000Z", "id": "1337498609819021312", "text": "Thanks to everyone who tuned in today..." }, ... , { "created_at": "2020-05-06T17:24:31.000Z", "id": "1258085245091368960", "text": "It’s now easier to understand Tweet impact..." } ], "meta": { "oldest_id": "1258085245091368960", "newest_id": "1337498609819021312", "result_count": 100, "next_token": "7140w" } } json { "data": [ { "created_at": "2020-04-29T17:01:44.000Z", "id": "1255542797765013504", "text": "Our developer community is full of inspiring ideas..." }, ... , { "created_at": "2019-11-21T16:17:23.000Z", "id": "1197549579035496449", "text": "Soon, we'll be releasing tools in..." } ], "meta": { "oldest_id": "1197549579035496449", "newest_id": "1255542797765013504", "result_count": 100, "next_token": "7140k9", "previous_token": "77qp8" } } json { "data": [ { "created_at": "2019-11-21T16:17:23.000Z", "id": "1197549578418941952", "text": "We know that some people who receive a large volume of replies may..." }, ... , { "created_at": "2019-01-08T19:19:37.000Z", "id": "1082718487011885056", "text": "Updates to Grid embeds..." } ], "meta": { "oldest_id": "1082718487011885056", "newest_id": "1197549578418941952", "result_count": 95, "next_token": "71408hi", "previous_token": "77qplte" } } json { "meta": { "result_count": 0, "previous_token": "77qpw8l" } }
下一次请求需采取的操作要获取下一页,请直接从响应中取出 next_token 的值(7140w),并将其设置为下一次请求的 pagination_token若要继续获取全部结果:请直接从响应中取出 next_token 的值(7140k9),并将其设置为下一次请求的 pagination_token。若要跳转到上一页:请直接从响应中取出 previous_token 的值(77qp8),并将其设置为下一次请求的 pagination_token若要继续获取全部结果:请直接从响应中取出 next_token 的值(71408hi),并将其设置为下一次请求的 pagination_token。若要跳转到上一页:请直接从响应中取出 previous_token 的值(77qplte),并将其设置为下一次请求的 pagination_token请注意没有 next_token,这表示已收到全部结果。若要跳转到上一页:请直接从响应中取出 previous_token 的值(77qpw8l),并将其设置为下一次请求的 pagination_token
I