如何在C#中实现无交互自动上传视频至YouTube频道?
实现YouTube无交互视频上传的解决方案
核心问题拆解
- API Key仅能用于读取公开数据,无法完成视频上传这类需要用户权限的操作,因此报错属于正常限制。
- 标准OAuth流程首次需要浏览器授权,但可通过离线授权模式持久化凭据,后续无需再手动确认。
- YouTube Data API明确不支持服务账号,此方案完全不可行。
具体实现步骤
1. 首次授权并持久化凭据
修改OAuth授权代码,添加凭据文件存储逻辑,首次运行完成浏览器授权后,令牌会自动保存到本地,后续直接复用:
UserCredential credential; string credPath = "token.json"; // 存储凭据的本地文件路径 using (var stream = new FileStream("client_secrets.json", FileMode.Open, FileAccess.Read)) { credential = await GoogleWebAuthorizationBroker.AuthorizeAsync( GoogleClientSecrets.Load(stream).Secrets, new[] { YouTubeService.Scope.YoutubeUpload }, "user", CancellationToken.None, new FileDataStore(credPath, true) // 开启本地文件存储 ); } var youtubeService = new YouTubeService(new BaseClientService.Initializer() { HttpClientInitializer = credential, ApplicationName = Assembly.GetExecutingAssembly().GetName().Name });
首次运行代码时,会弹出浏览器引导完成授权,授权成功后token.json文件会自动生成,其中包含了可自动刷新的令牌信息。
2. 后续无交互运行
之后每次启动程序,FileDataStore会自动读取token.json中的凭据,当访问令牌过期时,会自动通过刷新令牌获取新的有效令牌,全程无需浏览器介入,实现无确认上传。
3. 关键注意事项
- 确保Google Cloud控制台中,你的OAuth客户端ID类型为桌面应用(适配本地运行的程序场景)。
token.json和client_secrets.json包含敏感授权信息,禁止泄露或公开。- 若需要切换上传账号,直接删除
token.json文件,重新运行程序完成新账号的授权即可。
原代码问题说明
你之前的OAuth代码未配置凭据持久化,每次运行都会重新发起授权请求,导致必须打开浏览器确认。添加FileDataStore后,凭据被本地保存,后续运行直接复用授权信息,无需重复验证。
内容的提问来源于stack exchange,提问作者Vladislav Yurevich
相关产品推荐
相关产品推荐

