You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Twitter API中如何实现推文的渐进式爬取?

嘿,我来帮你把Twitter Search API的渐进式爬取逻辑讲清楚,这其实是个很常见的分页需求,咱们一步步来~

如何用Twitter Search API实现推文的渐进式爬取?

1. 分页获取下一批推文:靠max_id参数搞定

Twitter Search API单次最多返回100条内容,当相关推文超过100条时,就得靠分页参数来遍历剩余的内容。最常用的就是max_id,它的作用很简单:让API返回ID小于等于该值的推文(说白了就是比这条推文发布时间更早的内容)。

具体操作步骤:

  • 首次请求不用加max_id,API会返回当前最新的一批推文(最多100条)
  • 拿到返回结果后,从所有推文里找出最小的那个id_str(一定要用字符串格式的ID,避免数字溢出问题)
  • 下一次请求时,在请求参数里加上&max_id=最小ID-1(减1是为了避免重复获取上一页的最后一条推文)

给你扩展一下你提供的PHP代码示例:

// 初始请求(获取最新的100条#thanksgiving推文)
$url = 'https://api.twitter.com/1.1/search/tweets.json';
$getfield = '?q=' . urlencode("#thanksgiving") . '&count=100&tweet_mode=extended&sort=recent';
// 这里别忘了加上你的API认证逻辑(比如Bearer Token或者OAuth)

// 假设已经拿到了解析后的JSON结果$result
$minTweetId = PHP_INT_MAX;
foreach ($result['statuses'] as $tweet) {
    $currentId = (int)$tweet['id_str'];
    if ($currentId < $minTweetId) {
        $minTweetId = $currentId;
    }
}

// 构造下一页的请求参数
$nextGetfield = $getfield . '&max_id=' . ($minTweetId - 1);
// 用这个新的$getfield发起请求,就能拿到下100条更早的推文了

另外,还有个更省心的方法:返回结果里的search_metadata.next_results字段已经帮你拼接好了下一页的完整参数(包含max_id),你直接把这个字符串拼到API URL后面就行,不用自己计算ID,比如:

if (isset($result['search_metadata']['next_results'])) {
    // 注意要补上tweet_mode=extended,因为next_results里不会包含这个参数
    $nextUrl = $url . $result['search_metadata']['next_results'] . '&tweet_mode=extended';
    // 发起请求获取下一页内容
}

2. 返回结果的时间相关性问题

没错!首次请求默认(或者指定sort=recent时)会返回最新的100条相关推文,结果是按发布时间降序排列的(最新的在前)。如果没指定sort参数,API会混合相关性和时间排序,可能会夹杂一些热度高但不是最新的推文,所以如果想严格按时间从新到旧爬取,建议加上&sort=recent参数。

一些额外注意事项

  • 速率限制:Twitter API有请求次数限制,比如免费版的Search API每15分钟最多允许180次请求,爬取的时候要做好速率控制,别触发限流
  • ID处理:推文ID是64位整数,在PHP等语言里直接用数字类型可能会溢出,所以一定要用id_str字段来获取和处理ID
  • 终止条件:当返回的推文数量不足100条,或者search_metadata.next_results不存在时,就说明已经没有更多内容可以爬取了

内容的提问来源于stack exchange,提问作者aandroidtest

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:58:31