如何通过Twitter API获取用户时间线3200条推文及page参数相关问题
嘿,这问题我太熟了!确实是Twitter API从v1.0升级到v1.1后彻底废弃了page参数,改用基于推文ID的分页机制来获取更多内容。下面我给你详细说怎么用python-twitter库拿到最多3200条用户推文:
一、为什么page参数消失了?
完全和API版本升级直接相关!Twitter API v1.1移除了page参数,因为这种分页方式容易出现数据重复或遗漏的问题。取而代之的是基于推文ID的分页,通过max_id参数来控制每次请求的起始位置,这是目前官方唯一推荐的分页方式。
二、用python-twitter库获取最多3200条推文的方法
Twitter API的用户时间线接口本身最多允许回溯获取3200条推文,刚好是16次请求(每次最多200条)。你可以通过循环调用GetUserTimeline,每次更新max_id参数来实现:
具体步骤:
- 初始化一个空列表来存储所有收集到的推文
- 第一次调用
GetUserTimeline时不指定max_id,直接获取最新的200条推文 - 从返回的推文中找到最小的推文ID,将其减1后作为下一次请求的
max_id(这样就能获取比上一批更早的推文) - 重复上述步骤,直到获取的推文总数达到3200条,或者返回的推文数量不足200条(说明没有更多历史内容了)
代码示例:
import twitter # 初始化API对象(替换成你的API密钥信息) api = twitter.Api(consumer_key='YOUR_CONSUMER_KEY', consumer_secret='YOUR_CONSUMER_SECRET', access_token_key='YOUR_ACCESS_TOKEN', access_token_secret='YOUR_ACCESS_TOKEN_SECRET') target_screen_name = "目标用户的用户名" max_total_tweets = 3200 all_collected_tweets = [] last_tweet_id = None while len(all_collected_tweets) < max_total_tweets: # 每次请求最多拉取200条,通过max_id控制获取更早的内容 current_batch = api.GetUserTimeline(screen_name=target_screen_name, count=200, max_id=last_tweet_id) if not current_batch: break # 没有更多推文可拉取,退出循环 all_collected_tweets.extend(current_batch) # 更新last_tweet_id为当前批次最后一条推文的ID减1,避免重复拉取 last_tweet_id = current_batch[-1].id - 1 # 打印进度方便调试 print(f"已累计获取 {len(all_collected_tweets)} 条推文") # 后续可以处理all_collected_tweets列表中的内容 print(f"最终成功获取到 {len(all_collected_tweets)} 条推文")
注意事项:
- 确保你的API密钥拥有只读权限(用户时间线接口属于基础权限,一般默认开通)
- Twitter API有请求速率限制,用户时间线接口的限制是每15分钟最多900次请求,16次请求完全在限制范围内,不用担心触发限流
- 如果目标用户的历史推文总数不足3200条,循环会提前终止,返回实际存在的所有推文
内容的提问来源于stack exchange,提问作者Wouterr
相关产品推荐
相关产品推荐

