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

如何使用Tweepy获取Twitter用户全部点赞?应对速率限制

解决方案:适配Twitter API限制获取全部点赞或按日期筛选

一、适配速率限制获取全部点赞内容

你的问题核心是/favorites/list接口的速率限制(Elevated权限下15分钟内75次调用),加上默认每次调用仅返回20条推文,导致75次调用只能拿到1400-1500条左右。可以通过以下方法优化:

1. 提升单次调用的推文返回量

在get_favorites中指定count=200(这是API允许的最大值),这样每次调用能拿到200条推文,75次调用可覆盖15000条点赞,大幅减少调用次数:

tweepy.Cursor(api.get_favorites, screen_name=twitterUsername, count=200).items()

2. 开启自动限流等待

初始化Tweepy API时设置wait_on_rate_limit=True,当触发限流时,库会自动计算等待时间并暂停,直到速率限制重置后继续执行,无需手动处理:

import tweepy

auth = tweepy.OAuthHandler(你的consumer_key, 你的consumer_secret)
auth.set_access_token(你的access_token, 你的access_token_secret)
# 开启自动等待限流,同时开启通知提示
api = tweepy.API(auth, wait_on_rate_limit=True, wait_on_rate_limit_notify=True)

3. 手动分页控制(进阶)

如果需要更精细的控制,可通过max_id参数手动分页,同时处理限流等待:

import time

favorites = []
max_id = None

while True:
    try:
        # 每次获取200条,用max_id实现翻页
        batch = api.get_favorites(screen_name=twitterUsername, count=200, max_id=max_id)
        if not batch:
            break  # 无更多内容,终止循环
        
        favorites.extend(batch)
        # 更新max_id为最后一条推文ID减1,避免重复获取
        max_id = batch[-1].id - 1
        
    except tweepy.RateLimitError:
        # 获取限流重置时间,计算等待时长
        reset_info = api.rate_limit_status()['resources']['favorites']['/favorites/list']
        wait_time = reset_info['reset'] - time.time() + 10  # 多等待10秒确保限制重置
        print(f"触发限流,等待{int(wait_time/60)}分钟...")
        time.sleep(wait_time)

二、按指定日期筛选点赞内容

Twitter的/favorites/list接口不支持直接按日期参数筛选,但可以通过本地过滤或分页终止的方式实现:

1. 本地过滤已获取的点赞

先获取足够多的点赞内容,再根据推文的created_at字段筛选目标日期范围内的内容:

from datetime import datetime

target_start = datetime(2023, 1, 1)
target_end = datetime(2023, 12, 31)

# 先获取全部(或批量)点赞
all_favorites = list(tweepy.Cursor(api.get_favorites, screen_name=twitterUsername, count=200).items())

# 筛选指定日期范围内的推文
filtered_favorites = [
    tweet for tweet in all_favorites
    if target_start <= tweet.created_at <= target_end
]

2. 分页时提前终止(高效方式)

当分页获取的推文全部早于目标日期时,直接终止循环,避免无效调用:

from datetime import datetime

target_date = datetime(2023, 1, 1)  # 获取此日期之后的点赞
favorites = []
max_id = None

while True:
    batch = api.get_favorites(screen_name=twitterUsername, count=200, max_id=max_id)
    if not batch:
        break
    
    # 过滤当前批次中符合日期要求的推文
    valid_tweets = [t for t in batch if t.created_at >= target_date]
    favorites.extend(valid_tweets)
    
    # 如果当前批次的第一条推文已早于目标日期,说明后续无符合条件的内容,终止循环
    if batch[0].created_at < target_date:
        break
    
    max_id = batch[-1].id - 1

关于之前返回更多内容的说明

你提到曾返回2500多条推文,大概率是之前调用时设置了count=200(单次拿200条),且跨了多个15分钟的速率限制周期;或者早期API的临时调整,但目前Elevated权限下/favorites/list的限制是稳定的15分钟75次调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 20:35:26