在工作进程c#上验证Youtube API



我正在运行一个没有UI的过程,从youtube检索上传的视频。在开发机器上,它代表用户进行身份验证并工作。

问题是当进程在服务器上运行时:浏览器窗口不会触发用户让使用他的帐户(它应该只需要这样做一次)。

事件查看器没有显示任何错误。服务帐户似乎不工作与youtube,与API密钥是太少的权限和宣誓是认证和播放视频的唯一途径。还是我错了?

所以问题是:如何运行一个服务作为一个单一的用户和检索他的视频没有UI?

         private async Task Run()
                {
                    try
                    {
                        UserCredential credential;
                        using (var stream = new FileStream(StartPath + "\client_secrets.json", FileMode.Open, FileAccess.Read))
                        {
                            credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
                                GoogleClientSecrets.Load(stream).Secrets,
                                new[] { YouTubeService.Scope.YoutubeReadonly, YouTubeService.Scope.Youtube  },
                                "user",
                                CancellationToken.None,
                                new FileDataStore("Store")
                            );
                        }
                        var youtubeService = new YouTubeService(new BaseClientService.Initializer()
                        {
                            HttpClientInitializer = credential,
                            ApplicationName = this.GetType().ToString()
                        });
    ....
                 }

我也试过了:

 String serviceAccountEmail = "e-mail";
            var certificate = new X509Certificate2(HostingEnvironment.MapPath("~/Content/key.p12"), "notasecret", X509KeyStorageFlags.Exportable);
            ServiceAccountCredential credential = new ServiceAccountCredential(
               new ServiceAccountCredential.Initializer(serviceAccountEmail)
              {
                   Scopes = new[] { YouTubeService.Scope.Youtube, YouTubeService.Scope.YoutubepartnerChannelAudit, YouTubeService.Scope.YoutubeUpload }
               }.FromCertificate(certificate));
            var youtubeService = new YouTubeService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName = "api",
            });

YouTube Data API允许您将通常在YouTube网站上执行的功能合并到您自己的网站或应用程序中。下面的列表列出了可以使用API检索的不同类型的资源。该API还支持插入、更新或删除这些资源的方法。

这个参考指南解释了如何使用API来执行所有这些操作。该指南是按资源类型组织的。资源表示一种类型的项目,它包含YouTube体验的一部分,例如视频、播放列表或订阅。对于每种资源类型,指南列出了一个或多个数据表示形式,资源表示为JSON对象。该指南还为每种资源类型列出了一个或多个支持的方法(LIST, POST, DELETE, etc.),并解释了如何在应用程序中使用这些方法。

以下要求适用于YouTube Data API请求:

  • 每个请求必须指定API密钥(带有key参数)或提供OAuth 2.0令牌。您的API密钥可在开发控制台的API Access窗格中为您的项目使用。

  • 必须为每个插入、更新和删除请求发送授权令牌。您还必须为检索已验证用户的私有数据的任何请求发送授权令牌。

此外,一些用于检索资源的API方法可能支持需要授权的参数,或者在授权请求时可能包含额外的元数据。例如,如果请求得到特定用户的授权,则检索用户上传的视频的请求也可能包含私有视频。

  • API支持OAuth 2.0认证协议。您可以通过以下两种方式提供OAuth 2.0令牌:

  • 使用access_token查询参数如下:?access_token=oauth2-token

  • 使用HTTP Authorization标头如下:Authorization: Bearer oauth2-token在认证指南中可以找到在应用程序中实现OAuth 2.0认证的完整说明。

所以我通过创建控制台应用程序来解决这种情况。身份验证机制转移到控制台应用程序,并将结果传递给服务。在一个服务中,每n秒调用一次该应用程序。这个解决方案非常有效。虽然很丑,但很管用。现在我可以让应用程序访问配置文件数据,并在我想要的地方使用它。如果有人有更好的解决方案,我很乐意阅读。

相关内容

  • 没有找到相关文章

最新更新