C# YouTube分析API

C# YouTube分析API,c#,youtube-api,C#,Youtube Api,我是谷歌API的新手,希望开始使用YouTube分析API生成报告。我在谷歌开发者控制台中创建了项目。当我单击凭据时,有两个选项-OAuth和公共API访问。我无法理解我应该使用哪种方式访问OAuth或公共API访问。对于OAuth,在创建新客户端id有三个选项-Web应用程序、服务帐户和已安装的应用程序,所以这里也推荐使用哪种方式?请帮助我了解这一点 注意:我们的要求是使用YouTube Analytics API在我们的客户频道上为上传的视频生成报告。对于私人用户数据,OAuth 2.0是分

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


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

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

从文件中:

  • 服务器端流支持能够安全存储持久信息的web应用程序
  • 客户端流支持在浏览器中运行的JavaScript应用程序
  • 安装的应用程序流支持安装在设备上的应用程序,如电话或计算机
从服务帐户选项的文档中:

服务帐户流支持不访问用户信息的服务器到服务器交互。但是,YouTube分析API不支持此流。由于无法将服务帐户链接到YouTube帐户,因此尝试使用此流授权请求将生成错误

提供给您的所有这些选项都有很多文档,我建议您通读全文,以确保您牢牢掌握这些概念

干杯


编辑:要完全清楚,如果您是通过后端应用程序收集数据,请使用“服务帐户”选项生成OAuth客户端ID。但是,如果您正在通过web/已安装的应用程序与API报告交互,则应选择“web/已安装的应用程序”。我希望这是有帮助的和明确的。

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

下面是从Youtube API和Youtube analytics API获取数据的函数

别忘了将客户端\u 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);
        }
    }
public异步void FetchYoutubeAnalyticsAPI()
{
用户凭证;
使用(var stream=newfilestream(“client_secrets.json”、FileMode.Open、FileAccess.Read))
{
凭证=等待GoogleWebAuthorizationBroker.AuthorizationAsync(
GoogleClientSecrets.Load(stream.Secrets),
新[]{YouTubeService.Scope.YoutubeReadonly},
“用户”,
取消令牌。无
);
}
var youtubeeanalyticsservice=new youtubeeanalyticsservice(new BaseClientService.Initializer()
{
HttpClientInitializer=凭证,
ApplicationName=Assembly.GetExecutionGassembly().GetName().Name
});
var request=youtubeanalyticservice.Reports.Query();
请求开始日期=(“2019-01-01”);
request.EndDate=(“2020-09-30”);
id=(“通道==UCmLQ3sdAd6CypJIne5ZANaA”);
request.Metrics=(“视图、评论、喜欢、不喜欢、estimatedMinutesWatched、averageViewDuration”);
QueryResponse requestquery=request.Execute();
List myChannelDataList=新列表();
int listsize=0;
foreach(requestquery.Rows[0]中的对象obj)
{ 
int值=转换为32(obj);
myChannelDataList.Add(值);
/*Debug.WriteLine(“值:”+Value);
Debug.WriteLine(“LISTE/”+myChannelDataList[0]);
Debug.WriteLine(“Count:+myChannelDataList.Count”)*/
listsize=myChannelDataList.Count;
}
列表指标=新列表{“VUE”、“评论”、“喜欢”、“不喜欢”、“分钟数”、“MoyenneTemps”};
for(int i=0;i

嘿,有人能帮我解决上面提到的问题吗?我不明白:你说的是“如果你在收集数据,我就不知道了。”