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

如何用Tweepy获取特定Tweet ID之前的n条同用户推文?

使用Tweepy获取特定Tweet ID之前的n条推文的最优方法

嘿,这个需求我之前做项目的时候刚好碰到过,用Tweepy结合Twitter API v2来实现是最稳妥的方案,毕竟v1.1已经慢慢被弃用了。下面给你拆解最优的实现思路和代码:

核心思路

要拿到目标推文恰好之前的n条内容,关键是利用Twitter API的until_id参数——它会返回所有ID小于指定值的推文,完美匹配“位于目标推文之前”的需求。另外因为API单次最多返回100条,所以如果n>100,需要处理分页逻辑。

准备工作

首先确保你装了最新版的Tweepy,并且有有效的API凭证(公开推文用Bearer Token就行,私有推文需要OAuth 1.0a授权):

pip install tweepy --upgrade

完整代码实现

下面是封装好的函数,注释已经写得很清楚了:

import tweepy

def fetch_tweets_before_target(bearer_token, user_id, target_tweet_id, num_tweets):
    # 初始化Tweepy客户端
    client = tweepy.Client(bearer_token=bearer_token)
    
    collected_tweets = []
    next_page_token = None
    
    while len(collected_tweets) < num_tweets:
        # 计算还需要获取的条数,单次请求最多拿100条
        remaining = num_tweets - len(collected_tweets)
        batch_size = min(remaining, 100)
        
        # 发起请求,限定只拿目标ID之前的推文
        response = client.get_users_tweets(
            id=user_id,
            until_id=target_tweet_id,
            max_results=batch_size,
            pagination_token=next_page_token,
            tweet_fields=["created_at", "public_metrics"]  # 可选,按需添加字段
        )
        
        # 如果没有更多数据了,直接跳出循环
        if not response.data:
            break
        
        # 把当前页的推文加入列表
        collected_tweets.extend(response.data)
        # 获取下一页的token
        next_page_token = response.meta.get("next_token")
        
        # 没有下一页的话,终止循环
        if not next_page_token:
            break
    
    # 返回刚好n条(如果实际不足就返回所有拿到的)
    return collected_tweets[:num_tweets]

# ---------------------- 使用示例 ----------------------
# 替换成你的凭证和参数
MY_BEARER_TOKEN = "你的Bearer Token"
TARGET_USER_ID = "目标用户的数字ID(不是用户名)"
SPECIFIC_TWEET_ID = "你指定的那条推文的ID"
NEEDED_TWEETS_COUNT = 10

# 调用函数获取结果
result = fetch_tweets_before_target(MY_BEARER_TOKEN, TARGET_USER_ID, SPECIFIC_TWEET_ID, NEEDED_TWEETS_COUNT)

# 打印结果
for idx, tweet in enumerate(result, 1):
    print(f"第{idx}条推文 | ID: {tweet.id}")
    print(f"内容: {tweet.text}\n")

关键细节说明

  • 用户ID的问题:get_users_tweets只接受用户的数字ID,如果你只有用户名,可以先用client.get_user(username="xxx")来获取对应的数字ID。
  • 关于until_id:和v1.1里的max_id不同,v2的until_id更直观——直接传入目标推文的ID,就会返回所有发布在它之前的推文(ID更小的),完全符合需求。
  • 速率限制处理:Tweepy会自动处理API的429速率限制错误(自动重试),但如果要获取大量推文,最好还是在代码里加入适当的延迟,避免触发限制。
  • 私有推文的情况:如果目标用户设置了私有推文,你需要用OAuth 1.0a的凭证(consumer key、consumer secret、access token、access token secret)来初始化Tweepy客户端,并且需要获得该用户的授权。

特殊情况处理

如果目标推文之前的有效推文数量不足n条(比如有些被删除了),函数会返回所有能获取到的符合条件的推文,不会报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:38:50