【问题标题】:YouTube Analytics APIYouTube 分析 API
【发布时间】:2014-08-18 09:14:02
【问题描述】:

我是 Google api 的新手,想开始使用 YouTube Analytics API 来生成报告。我在 Google 开发者控制台中创建了项目。当我点击凭据时,有两个选项 - OAuth 和公共 API 访问。我是无法理解我应该使用哪种方式进行 OAuth 或公共 API 访问。对于创建新客户端 ID 时的 OAuth,有三个选项 - Web 应用程序、服务帐户和已安装的应用程序,所以这里也是推荐的方式?请帮助我理解这一点东西。

注意:我们的要求是使用 YouTube Analytics API 为我们客户频道上上传的视频生成报告。

【问题讨论】:

  • 嘿,有人能帮我解决上面提到的问题吗?

标签: c# youtube-api


【解决方案1】:

对于私人用户数据,OAuth 2.0 是 Google Analytics(分析)API 的推荐授权方法。如果您要收集和存储最终要使用的数据,您很可能希望使用服务器端应用程序方法。

来自文档:

  • 服务器端流支持可以安全存储持久信息的 Web 应用程序。
  • 客户端流支持在浏览器中运行的 JavaScript 应用程序。
  • 已安装的应用程序流支持安装在设备(例如手机或计算机)上的应用程序。

来自服务帐户选项的文档:

服务帐户流程支持不访问用户信息的服务器到服务器交互。但是,YouTube Analytics API 不支持此流程。由于无法将服务帐户与 YouTube 帐户相关联,因此尝试使用此流程授权请求会产生错误。

有很多关于所有这些选项的文档提供给您,我建议您通读它的全部内容,以确保您牢牢掌握这些概念。 Click here to read about OAuth 2.0 with the YouTube Analytics API

干杯!

编辑:为了完全清楚,如果您通过后端应用程序收集数据,请使用“服务帐户”选项生成 OAuth 客户端 ID。但是,如果您通过 Web/已安装的应用程序与 API 报告进行交互,则应选择“Web/已安装的应用程序”。我希望这对您有所帮助且清晰。

【讨论】:

  • 我不明白:您是在说“如果您通过后端应用程序收集数据,请使用“服务帐户”选项生成 OAuth 客户端 ID”,但在此之上您引用的文档说 YouTube Analytics API 不支持服务帐户流。
  • 好点@giac_man。我从经验中知道,即使数据 API 和分析 API 的文档都说您不能使用服务帐户流程,但如果您是 Youtube 合作伙伴或 MCN,它确实可以工作,我就是。话虽如此,YouTube 已弃用 Analytics API,他们建议您现在使用 Reporting API。
  • @NickKnuckle 您可以与服务帐户共享您的授权码 sn-p 吗?我玩得很开心......
  • @CSharpMinor 嘿!自从我写这个答案以来,这个包已经更新了很多次,所以我写的(并且仍在使用)的代码使用的是过时的语法。如果您使用的是 python,我建议您阅读 googleapi github 页面中的this doc。如果您使用其他语言,请找到您首选语言的 API here 的链接(位于页面底部)。我希望这会有所帮助!
  • @NickKnuckle 不用担心,朋友,我在 .NET 上,我只是用 HttpClient 推出自己的产品,没什么大不了的。
【解决方案2】:

从开发者控制台创建项目后,您可以尝试关注this tutorial(法语),底部有完整的功能,用于报告来自 Youtube API 分析的所有内容。

这是从 Youtube API 和 Youtube 分析 API 获取数据的函数

不要忘记将你的 client_secrets.json 添加到你的 \bin\Debug\netcoreapp3.1

    public async void FetchYoutubeAnalyticsAPI()
    {
        UserCredential credential;
        using (var stream = new FileStream("client_secrets.json", FileMode.Open, FileAccess.Read))
        {
            credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
            GoogleClientSecrets.Load(stream).Secrets,
            new[] { YouTubeService.Scope.YoutubeReadonly },
            "user",
            CancellationToken.None
            );
        }

        var youTubeAnalyticsService = new YouTubeAnalyticsService(new BaseClientService.Initializer()
        {
            HttpClientInitializer = credential,
            ApplicationName = Assembly.GetExecutingAssembly().GetName().Name
        });

        var request = youTubeAnalyticsService.Reports.Query();
        request.StartDate = ("2019-01-01");
        request.EndDate = ("2020-09-30");
        request.Ids = ("channel==UCmLQ3sdAd6CypJIne5ZANaA");
        request.Metrics = ("views,comments,likes,dislikes,estimatedMinutesWatched,averageViewDuration");
      
        QueryResponse requestquery = request.Execute();

        List<int> myChannelDataList = new List<int>();

        int listsize = 0;
        foreach (object obj in requestquery.Rows[0])
        { 
            int value = Convert.ToInt32(obj);
            myChannelDataList.Add(value);
      /*      Debug.WriteLine("Value : " + value);
            Debug.WriteLine("LISTE / " + myChannelDataList[0]);
            Debug.WriteLine("Count : " + myChannelDataList.Count);*/
            listsize = myChannelDataList.Count;
        }
        List<string> metrics = new List<string> { "Vues", "Commentaires", "Likes", "Dislike", "Minutes", "MoyenneTemps" };
        for (int i = 0; i < listsize; i++)
        {
            Label labels = new Label();
            labels.Top = (i + 4) * 20;
            labels.Left = 100;
            labels.AutoSize = true;
            labels.TextAlign = ContentAlignment.MiddleLeft;
            labels.Text = metrics[i] + " :" + myChannelDataList[i].ToString();
            this.Controls.Add(labels);
        }


        // https://developers.google.com/youtube/v3/docs/channels/list
        var youtubeService = new YouTubeService(new BaseClientService.Initializer()
        {
            HttpClientInitializer = credential,
            ApplicationName = Assembly.GetExecutingAssembly().GetName().Name
        });
        var requestSub = youtubeService.Channels.List("statistics");
        requestSub.Mine = (true);

        ChannelListResponse responsesub = requestSub.Execute();

        foreach (var sresults in responsesub.Items)
        {
            var substats = sresults.Statistics;
            var subcount = substats.SubscriberCount;
            var viewCount = substats.ViewCount;
            var videoCount = substats.VideoCount;
            var commentsCount = substats.CommentCount;

            Debug.WriteLine("SubCount : " + subcount);

            Label labels = new Label();
            labels.Top = 16;
            labels.Left = 280;
            labels.AutoSize = true;
            labels.TextAlign = ContentAlignment.MiddleLeft;
            labels.Text = "Subs :" + subcount;
            this.Controls.Add(labels);
        }
    }

【讨论】:

    【解决方案3】:

    使用 Oauth2.0 身份验证,并选择 Web 应用程序,这将需要对您要从中检索数据的特定频道(作为频道所有者或贡献者)进行身份验证。

    认证后可以将token保存到文件中,token会自动刷新,token过期后使用thread保存文件。

    From Documentation : 访问令牌会定期过期并成为无效凭证 相关的 API 请求。您可以在不提示的情况下刷新访问令牌 用户的权限(包括当用户不存在时)如果 您请求离线访问与令牌关联的范围。

    不要将服务帐户用于 Youtube Analytics Api,因为它不受支持:

    YouTube Analytics API 不支持服务帐户流程。 From Documentation

    【讨论】:

      猜你喜欢
      • 2023-04-08
      • 2015-12-30
      • 2012-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-08
      • 2014-01-08
      相关资源
      最近更新 更多