我想使用YouTube API将视频上传到非交互式计划中的公司帐户。我试图在没有提示进行身份验证和授权的情况下实现上传(因为没有交互式用户)。如果有人可以验证以下断言,我将不胜感激:
无法使用简单API访问来上传视频。
对于OAuth,无法使用“使用服务帐户代表您的应用程序而非最终用户来调用Google API。”正如Justin Smith's Blog post.中所述,这本来是我想要的解决方案。这是我尝试使用的代码。它执行,但总是返回“未授权”(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登录过程,保存刷新令牌,然后在将来使用该刷新令牌获取新内容访问令牌?我知道我可以做这个工作,但看起来很尴尬。如果我沿着这条路走下去,是否有任何问题需要注意?
进一步的问题:
提前感谢您的意见。
答案 0 :(得分:1)
目前您无法使用服务帐户。来自doc:
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版的错误,但错误的含义仍然适用。
&#34;移动上传&#34;电子邮件视频的功能似乎有效
答案 1 :(得分:0)
服务帐户是一个不断变化的目标。但你是对的,如果你能获得刷新令牌,那么你应该好好去。