如何用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
相关产品推荐
相关产品推荐

