在Worker进程C#上验证Youtube API

时间:2016-09-02 05:09:02

标签: c# process youtube 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",
            });

2 个答案:

答案 0 :(得分:0)

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

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

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

  • 每个请求都必须指定API密钥(使用key参数)或提供OAuth 2.0令牌。 您的API密钥位于项目的Developer Console's API访问窗格中。

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

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

  • API支持OAuth 2.0身份验证协议。您可以通过以下任一方式提供OAuth 2.0令牌:

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

  • 像这样使用HTTP Authorization标头:Authorization: Bearer oauth2-token 有关在您的应用程序中实施OAuth 2.0身份验证的完整说明,请参阅authentication guide

答案 1 :(得分:0)

所以我设法通过创建控制台应用程序来解决这个问题。 身份验证机制进入控制台应用程序并将结果传递给服务。在一个服务中每n秒调用一次该应用程序。这个解决方案就像一个魅力。丑陋的,但它的确有效。现在我可以给应用程序访问配置文件数据并在我想要的地方使用它。 如果有人有更好的解决方案,我会很高兴看到它。