使用X(Twitter) API上传MP4视频失败:媒体ID无效问题求助
解决X API视频发布时「媒体ID无效」问题
核心问题分析
你遇到的「Your media IDs are invalid」错误,主要和API权限限制、接口版本不兼容有关,关键结论如下:
- 当前X免费API账号无法通过v2 API发布带媒体的推文,必须升级到Basic付费账号(每月$10);
- 若不想付费,可改用v1.1的
statuses/update接口发布带媒体的推文; - 你的视频上传流程(INIT/APPEND/FINALIZE)是正确的,媒体ID本身有效,问题出在发布环节的权限或接口版本匹配上。
具体解决方案
方案1:升级到Basic付费账号
在X开发者平台将项目升级到Basic付费版后,即可直接使用现有代码通过v2 API关联媒体发布推文,无需修改代码。
方案2:改用v1.1接口发布推文(免费可用)
修改代码中发布推文的逻辑,替换为v1.1的statuses/update接口,免费账号即可实现带媒体的推文发布:
# 替换原代码中Step5的所有内容 # Step 5 — Post tweet with v1.1 API tweet_text = title if title else "Video tweet" # v1.1接口要求media_ids为单个字符串(无需数组) payload = { "status": tweet_text, "media_ids": media_id } print(f" 📤 Payload: {payload}") tweet_resp = requests.post( "https://api.twitter.com/1.1/statuses/update.json", auth=self.oauth, data=payload # v1.1接口使用form-data格式,而非JSON ) if tweet_resp.ok: tweet_data = tweet_resp.json() tweet_id = tweet_data.get("id_str") print(f"✅ Tweet posted successfully! ID: {tweet_id}") return tweet_data else: error_detail = tweet_resp.text raise Exception(f"Failed to post tweet with media: {error_detail}")
额外检查项
- 权限验证:在X开发者平台确认API密钥已启用以下权限:
- v1.1:
upload-media、statuses/update - v2(若使用):
tweet.write、media.write
- v1.1:
- 视频格式检查:确保MP4符合X要求:
- 编码:H.264视频 + AAC音频
- 分辨率≤1920x1080
- 时长≤140秒
- 媒体状态确认:在
_wait_for_processing方法结束后,打印完整的status_data,确认media_url字段存在且processing_info.state为succeeded。
内容的提问来源于stack exchange,提问作者john houses
相关产品推荐
相关产品推荐

