我想使用YouTube API将视频上传到非交互式程序中的企业帐户。我试图在没有提示身份验证和授权的情况下实现上传(因为没有交互式用户)。如果有人能验证以下断言,我将不胜感激:
-
无法使用Simple API Access上传视频
-
对于OAuth,不可能使用"使用服务帐户代表您的应用程序而不是最终用户调用Google api。"正如Justin Smith的博客文章所描述的那样。这就是我想要的解。这是我试图做到这一点的代码。它执行,但总是返回为"unauthorized" (401):
public async Task AnnounceAsync(Recording recording) { const string emailAddress = "xxxxxxx.gserviceaccount.com"; const string keyFile = @"C:Tempxxxxxxx-privatekey.p12"; var key = new X509Certificate2(keyFile, "notasecret", X509KeyStorageFlags.Exportable); var client = new AssertionFlowClient(GoogleAuthenticationServer.Description, key) { ServiceAccountId = emailAddress, Scope = YoutubeService.Scopes.Youtube.GetStringValue() }; var auth = new OAuth2Authenticator<AssertionFlowClient>(client, AssertionFlowClient.GetState); var youtube = new YoutubeService(new BaseClientService.Initializer {Authenticator = auth}); var video = new Video { Snippet = new VideoSnippet { Title = recording.Title, Description = recording.Description, CategoryId = "22" }, Status = new VideoStatus { PrivacyStatus = "public", } }; using (var fileStream = new FileStream(recording.Path, FileMode.Open)) { var videosInsertRequest = youtube.Videos.Insert(video, "snippet,status", fileStream, "video/*"); videosInsertRequest.ProgressChanged += videosInsertRequest_ProgressChanged; videosInsertRequest.ResponseReceived += videosInsertRequest_ResponseReceived; await Task.Run(() => videosInsertRequest.Upload()); } }
所以,我得出的结论是,我需要使用"已安装的应用程序"API访问方法来交互式地通过OAuth登录过程至少一次,保存刷新令牌,然后在将来使用刷新令牌来获得新的访问令牌?我知道我能解决这个问题,但这看起来很尴尬。如果我沿着这条路走下去,有什么需要注意的吗?
进一步问题:- 未来是否计划允许服务帐户OAuth与YouTube API一起使用?
- 我的程序可以使用"移动上传"功能将视频通过电子邮件发送到其YouTube帐户吗?
提前感谢您的输入
目前您不能使用服务帐户。来自文档:
https://developers.google.com/youtube/v3/docs/errors 错误/授权/youtubeSignupRequired如果您尝试使用OAuth 2.0服务帐户流程,通常会出现此错误。YouTube不支持服务帐户,如果您尝试使用服务帐户进行身份验证,您将得到此错误。
YouTube API blog post:
http://apiblog.youtube.com/2011/10/introducing-google-account-support-and.html介绍谷歌帐户支持也讨论了更详细的youtubesignurequired错误。虽然这篇博文解释了API 2.1版本的错误,但错误的含义仍然适用。
电子邮件视频的"移动上传"功能似乎起作用了
服务帐户是一个移动的目标。但你是正确的,如果你能得到一个刷新令牌,那么你应该很好。