Tweepy调用Twitter API v2无法上传图片/媒体并获取media_ids问题
问题原因分析
tweepy.Client是Tweepy专门用于对接Twitter API v2的客户端类,本身不包含media_upload方法,该方法属于对接Twitter API v1.1的tweepy.API类,你直接用Client调用不存在的方法自然会抛出异常。- 目前Twitter官方并未在API v2中提供独立的媒体上传端点,所有媒体上传操作都必须调用v1.1版本的媒体上传接口。你不需要单独申请Twitter API v1的全量访问权限,正常的v2开发者权限默认包含了v1.1媒体上传接口的调用权限,只要你配置了正确的读写权限即可。
解决步骤
1. 先确认开发者平台权限配置
进入Twitter开发者平台你的项目对应App的「Permissions」设置页,将App权限调整为读和写(或包含读写的更高权限),只读权限无法调用媒体上传接口。修改权限后需要重新生成全套密钥才能生效。
2. 调整代码结构
你需要同时初始化v1.1客户端用于上传媒体、v2客户端用于后续的v2接口操作,参考代码如下:
import tweepy ACCESS_KEY = '你的ACCESS_KEY' ACCESS_SECRET = '你的ACCESS_SECRET' CONSUMER_KEY = '你的CONSUMER_KEY' CONSUMER_SECRET = '你的CONSUMER_SECRET' BEARER_TOKEN = '你的BEARER_TOKEN' # 初始化v1.1客户端 用于上传媒体 auth = tweepy.OAuth1UserHandler( consumer_key=CONSUMER_KEY, consumer_secret=CONSUMER_SECRET, access_token=ACCESS_KEY, access_token_secret=ACCESS_SECRET ) api_v1 = tweepy.API(auth, wait_on_rate_limit=True) # 初始化v2客户端 用于调用v2接口 api_v2 = tweepy.Client( bearer_token=BEARER_TOKEN, consumer_key=CONSUMER_KEY, consumer_secret=CONSUMER_SECRET, access_token=ACCESS_KEY, access_token_secret=ACCESS_SECRET ) # 上传媒体 获取media_id media = api_v1.media_upload(filename="file.jpg") media_id = media.media_id_string # 用v2接口发推文时传入media_id即可 response = api_v2.create_tweet(text="测试推文内容", media_ids=[media_id])
3. 额外注意事项
- 上传的媒体需要符合Twitter的格式、大小要求:静态图片单张最大5MB,GIF单张最大15MB,视频单张最大512MB,支持的格式包含JPG、PNG、GIF、MP4等。
- 如果返回403权限错误,优先检查密钥是否是修改权限后重新生成的,以及四个用户密钥、消费者密钥是否填写正确。
内容的提问来源于stack exchange,提问作者JuneXP
相关产品推荐
相关产品推荐

