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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:24:05