1

我想使用 YouTube API 在非交互式程序中将视频上传到公司帐户。我试图在不提示身份验证和授权的情况下实现上传(因为没有交互式用户)。如果有人可以验证以下断言,我将不胜感激:

  1. 无法使用简单 API 访问来上传视频。

  2. 对于 OAuth,不能使用“使用服务帐户代表您的应用程序而不是最终用户调用 Google API ”。如贾斯汀史密斯的博客文章中所述。这将是我想要的解决方案。这是我尝试使用的代码。它执行,但总是返回“未经授权”(401):

    public async Task AnnounceAsync(Recording recording)
    {
        const string emailAddress =
            "xxxxxxx.gserviceaccount.com";
    
        const string keyFile = @"C:\Temp\xxxxxxx-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 登录过程至少一次,保存刷新令牌,然后在将来使用该刷新令牌来获取新的访问令牌?我知道我可以完成这项工作,但这似乎很尴尬。如果我走这条路,有什么需要注意的地方吗?

进一步的问题:

  1. 未来是否计划支持服务帐户 OAuth 与 YouTube API 一起使用?
  2. 我的程序可以使用“移动上传”功能将视频通过电子邮件发送到其 YouTube 帐户吗?

提前感谢您的意见。

4

2 回答 2

1

目前您无法使用服务帐号。从文档:

https://developers.google.com/youtube/v3/docs/errors

错误/未经授权/youtubeSignupRequired

如果您尝试使用 OAuth 2.0 服务帐户流程,则通常会出现此错误。YouTube 不支持服务帐户,如果您尝试使用服务帐户进行身份验证,则会收到此错误消息。

YouTube API 博客文章:

http://apiblog.youtube.com/2011/10/introducing-google-account-support-and.html

介绍 Google 帐户支持还更详细地讨论了 youtubeSignupRequired 错误。虽然博客文章解释了 API 版本 2.1 的错误,但错误的含义仍然适用。

电子邮件视频的“移动上传”功能似乎有效

于 2013-05-29T04:07:18.400 回答
0

服务帐户是一个移动的目标。但是你是对的,如果你能得到一个刷新令牌,那么你应该很高兴。

于 2013-05-31T23:24:21.740 回答