我正在尝试使用Ruby SDK自动将视频上传到YouTube。插入视频、删除视频和设置视频缩略图都很好,但由于某种原因,无论我使用什么参数,尝试添加字幕都会导致无效的元数据客户端错误。
我根据文档和其他语言的代码示例编写了代码(我在Ruby中找不到任何使用当前gem这样做的示例(。我使用的是google-apis-youtube_v3
gem,版本0.22.0。
以下是我的代码的相关部分(假设我上传了一个id为"XYZ123"的视频(:
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
body = {
"snippet": {
"videoId": 'XYZ123',
"language": 'en',
"name": 'English'
}
}
s = get_service
s.insert_caption('snippet', body, upload_source: '/path/to/my-captions.vtt')
我尝试过很多不同的组合,但结果总是一样的:
Google::Apis::ClientError:invalidMetadata:请求包含无效的元数据值,这些值会阻止创建曲目。确认请求为
snippet.language
、snippet.name
和snippet.videoId
属性指定了有效值。snippet.isDraft
属性也可以包含在内,但不是必需的。状态代码:400
语言和视频ID值似乎真的没有太多选择,并且将字幕命名为"英语";。我真的不知道我传递的价值观可能出了什么问题。
顺便说一句,即使我以零分的成绩通过,我也会得到和身体完全一样的反应。
我查看了google-apis-youtube_v3gem中包含的OVERVIEW.md文件,它引用了谷歌简单REST客户端使用指南,该指南又提到大多数对象属性不使用camel大小写(这是底层JSON表示所使用的(。相反,在大多数情况下,属性必须使用Ruby的";蛇_色";习俗
因此,代码片段应该指定video_id
,而不是videoId
。
这似乎让请求通过了,所以这解决了这个问题。
我现在得到的回复的状态是";失败";以及故障原因";processingFailed";,但如果我搞不清楚的话,这可能是另一个问题的主题。