Tweepy Twitter机器人求助:403错误与媒体上传问题
解决方案:Tweepy批量推文(含媒体)避免403错误
一、批量发布文本推文
403错误核心原因是触发了Twitter免费API的速率限制(每15分钟最多15条推文)或请求频率过高。以下是修正后的代码:
import tweepy import time # 填入你的密钥信息 api_key = "YOUR_API_KEY" api_secret = "YOUR_API_SECRET" bearer_token = "YOUR_BEARER_TOKEN" access_token = "YOUR_ACCESS_TOKEN" access_token_secret = "YOUR_ACCESS_TOKEN_SECRET" # 初始化认证,开启自动速率限制等待 client = tweepy.Client( bearer_token, api_key, api_secret, access_token, access_token_secret, wait_on_rate_limit=True # 关键:自动等待速率限制重置 ) # 待发布的文本列表 tweet_texts = [ "第一条测试推文", "第二条测试推文", "第三条测试推文" ] for text in tweet_texts: try: response = client.create_tweet(text=text) print(f"成功发布推文:{response.data['id']}") # 额外短延迟避免触发反垃圾机制(可选,按需调整) time.sleep(2) except tweepy.TweepyException as e: print(f"发布失败:{e}")
关键说明:
wait_on_rate_limit=True:让Tweepy自动检测速率限制,达到上限时自动等待至限制重置,无需手动计算延迟。- 循环内复用同一个
client实例,不要重复创建认证对象。 - 额外的
time.sleep(2)用于避免短时间连续请求触发反垃圾机制,可根据实际情况调整时长。
二、发布带媒体的推文
免费层级无法直接使用Twitter API v2的媒体上传端点,必须通过v1.1 API上传媒体,再结合v2 API发布推文。完整代码如下:
import tweepy import time # 填入你的密钥信息 api_key = "YOUR_API_KEY" api_secret = "YOUR_API_SECRET" bearer_token = "YOUR_BEARER_TOKEN" access_token = "YOUR_ACCESS_TOKEN" access_token_secret = "YOUR_ACCESS_TOKEN_SECRET" # 初始化v2 Client(发推文)和v1.1 API(上传媒体) client = tweepy.Client( bearer_token, api_key, api_secret, access_token, access_token_secret, wait_on_rate_limit=True ) auth = tweepy.OAuth1UserHandler(api_key, api_secret, access_token, access_token_secret) api = tweepy.API(auth, wait_on_rate_limit=True) # 单条带媒体推文发布函数 def post_tweet_with_media(text, media_path): try: # 用v1.1 API上传媒体 media = api.media_upload(filename=media_path) # 用v2 Client发布带媒体的推文 response = client.create_tweet(text=text, media_ids=[media.media_id_string]) print(f"成功发布带媒体推文:{response.data['id']}") return response except tweepy.TweepyException as e: print(f"发布失败:{e}") return None # 批量带媒体推文示例 tweet_media_pairs = [ ("带第一条图片的推文", "image1.jpg"), ("带第二条图片的推文", "image2.png") ] for text, media_path in tweet_media_pairs: post_tweet_with_media(text, media_path) time.sleep(5) # 媒体上传速率限制更严格,适当延长延迟
关键说明:
- 免费层级媒体限制:单张图片最大5MB,支持JPG、PNG、静态GIF格式;每15分钟最多上传30个媒体文件。
- 必须通过v1.1的
api.media_upload()上传媒体,将返回的media_id_string传入v2的create_tweet接口。 - 开启
wait_on_rate_limit=True,同时处理媒体上传和推文发布的双重速率限制。
常见403错误排查点
- 确认所有密钥/令牌正确,且权限为Read and write(必须开启写权限才能发布推文)。
- 检查推文内容是否违反Twitter社区规则(如垃圾信息、重复内容)。
- 免费层级无法使用部分高级功能,确保只调用免费权限范围内的API端点。
内容的提问来源于stack exchange,提问作者Promo7zeros
相关产品推荐
相关产品推荐

