Tweepy中api.get_retweeter_ids()无法获取全部转推ID问题排查
获取推文全部转推用户ID的解决方案
问题原因
你调用的api.get_retweeter_ids对应Twitter v1.1的statuses/retweeters/ids接口,这个接口天生存在上限——最多仅能返回100个转推用户ID,无论目标推文实际转推量多大,都无法通过分页获取更多数据,这就是你只能拿到50-90条ID的核心原因。
可行替代方案
要获取全部转推用户ID,需改用Twitter的搜索接口,精准搜索所有转推该推文的内容,再从中提取用户ID。具体思路:
- 使用搜索关键词
retweeted_status_id:你的推文ID,定位所有转推目标推文的内容 - 用
tweepy.Cursor处理分页,同时自动处理API速率限制 - 用集合存储ID实现自动去重,避免同一用户多次转推导致的重复统计
修正后的代码
import tweepy import pandas as pd from time import sleep def get_all_retweeter_ids(tweetid): retweeter_ids = set() # 集合自动去重 search_query = f"retweeted_status_id:{tweetid}" try: # 遍历所有搜索结果,每次请求拉满100条上限 for tweet in tweepy.Cursor(api.search_tweets, q=search_query, tweet_mode="extended", count=100).items(): retweeter_ids.add(tweet.user.id) print(f"已收集 {len(retweeter_ids)} 个唯一转推用户ID") except tweepy.TooManyRequests: # 触发速率限制时,等待15分钟(Twitter官方限制窗口)后重试 print("API调用次数超限,等待15分钟...") sleep(900) return get_all_retweeter_ids(tweetid) except Exception as e: print(f"执行出错: {str(e)}") # 转换为列表和DataFrame格式返回 id_list = list(retweeter_ids) df = pd.DataFrame(id_list, columns=["retweeter_id"]) return id_list, df
注意事项
- 确保你的Twitter开发者账号已完成认证,且
tweepy的API密钥、令牌配置正确 - 搜索接口存在速率限制:每15分钟最多180次请求,每次最多返回100条结果,针对3万条转推的场景需要多次请求和等待
- 搜索接口无法100%保证返回所有历史转推(尤其是时间较久的内容),但这是当前能获取最多转推用户数据的可行方案
内容的提问来源于stack exchange,提问作者Hadi Harb
相关产品推荐
相关产品推荐

