【发布时间】:2022-08-19 03:43:10
【问题描述】:
问题
使用 google-apis-youtube_v3 gem,我可以上传视频、删除视频、插入字幕、删除字幕并设置缩略图。唯一由于某种原因不起作用的是update_video 调用,它总是返回错误。
环境
- 操作系统:MacOS 11.5.2
- Ruby 版本:2.7.6
- Gem 名称和版本:google-apis-youtube_v3-0.22.0
重现步骤
- 按照method documentation 中的说明,实例化服务对象并调用update_video 方法,其中part = \'id,sn-p,status\' 和指定视频ID、sn-p 和状态的视频对象。
代码示例
require \'googleauth\' require \'googleauth/stores/file_token_store\' require \'google-apis-youtube_v3\' REDIRECT_URI = \'http://localhost\' APPLICATION_NAME = \'...\' API_KEY = \'...\' SCOPE = Google::Apis::YoutubeV3::AUTH_YOUTUBE_FORCE_SSL def authorize client_id = Google::Auth::ClientId.from_file(\'secrets/client_secret.json\') token_store = Google::Auth::Stores::FileTokenStore.new(file: \"secrets/youtube-creds.yml\") authorizer = Google::Auth::UserAuthorizer.new(client_id, SCOPE, token_store) user_id = \'default\' credentials = authorizer.get_credentials(user_id) if credentials.nil? url = authorizer.get_authorization_url(base_url: REDIRECT_URI) puts \"Open the following URL in the browser and enter the resulting code after authorization\" puts url code = gets credentials = authorizer.get_and_store_credentials_from_code(user_id: user_id, code: code, base_url: REDIRECT_URI) end credentials 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 o = { \"id\": \'XYZ123\', \"snippet\": { \"category_id\": \"27\", \"default_language\": \"en\", \"description\": \"Testing updating description and title.\", \"tags\": [ \"tag1\", \"tag2\", \"tag3\" ], \"title\": \"Test video upload using Ruby SDK\" }, \"status\": { \"privacy_status\": \"private\" } } resp = s.update_video(\'id,snippet,status\', o)结果
ArgumentError (unknown keywords: :id, :snippet, :status)请注意,视频对象与最初用于创建视频的对象几乎相同。除了视频标题和描述的细微修改之外,唯一的变化是添加了
id属性来标识视频。
-
据我从您链接的方法文档中可以看出,
update_video的第二个参数是Google::Apis::YoutubeV3::Video对象,但您传入的是解释器正在读取的 ruby 哈希作为关键字参数。 -
非常感谢!我永远不会抓住那个。
update_video方法将使用普通哈希,但由于它恰好是方法调用中的最后一个参数,Ruby 确实将其视为要单独传递给方法的关键字参数的集合,而不是单个值作为video_object参数传递。如果您发布您的评论作为答案,我将很乐意将其标记为正确。
标签: ruby youtube-data-api google-api-ruby-client