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

使用Ruby调用YouTube Data API v3插入字幕始终返回invalidMetadata错误

解决YouTube Ruby SDK插入字幕的invalidMetadata错误

问题根源

你碰到的这个invalidMetadata错误,连传nil当body都触发,说明问题根本不在字段值本身,而是请求体的构造方式不符合Ruby SDK的要求——直接用原生哈希没法被SDK正确序列化,导致API认为元数据无效。

修复步骤

google-apis-youtube_v3 gem要求用它内置的模型类来构建请求体,不能直接用普通哈希。改法如下:

替换哈希为SDK内置模型实例

把原来的哈希body换成Google::Apis::YoutubeV3::Caption对象,同时用CaptionSnippet构造片段信息:

require 'googleauth'
require 'googleauth/stores/file_token_store'
require 'google-apis-youtube_v3'

def authorize [... auth code omitted ...] end

def get_service
  service = Google::Apis::YoutubeV3::YouTubeService.new
  service.key = API_KEY
  service.client_options.application_name = APPLICATION_NAME
  service.authorization = authorize
  service
end

# 用SDK提供的Snippet模型构造元数据
snippet = Google::Apis::YoutubeV3::CaptionSnippet.new(
  video_id: 'XYZ123',
  language: 'en',
  name: 'English'
)

# 构造完整的Caption请求体
body = Google::Apis::YoutubeV3::Caption.new(snippet: snippet)

s = get_service
# 第一个参数指定返回的字段集合,这里必须包含"snippet"
s.insert_caption('snippet', body, upload_source: '/path/to/my-captions.vtt')

额外需要检查的点

  • 字幕文件格式:.vtt要符合WebVTT规范,比如开头要有WEBVTT标识,时间格式正确
  • 账号权限:授权的Google账号必须是目标视频的所有者,或者有编辑权限
  • 语言代码:确保用的是标准ISO 639-1代码(比如en是合法的,别写错)

为什么原来的写法不行?

Ruby SDK的序列化逻辑只认自己内置的模型类,普通哈希没法被转换成YouTube API需要的合法JSON结构。哪怕你传了正确的字段,SDK也没把它们正确传递给API,导致API判定元数据无效——这也是传nil会得到同样错误的原因:请求体从一开始就没被正确构造。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 06:16:19