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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 10:15:27