适用于.NET的Analytics Reporting API V4客户端库

Ben*_*Ben 36 .net c# google-analytics-api google-api-dotnet-client google-analytics-firebase

我正在尝试从我们的Google分析实例中获取一些数据,并且我想使用适用于.NET的Analytics Reporting API V4客户端库(https://developers.google.com/api-client-library/dotnet/apis/analyticsreporting/v4)这样我就可以将一些数据烘焙到我们构建的管理站点中.我无法找到使用此代码的任何示例,文档似乎非常稀疏.我想使用服务帐户进行授权,因为我们只需要查看与我们控制的分析帐户相关联的数据.

如果有人能提供一些示例代码或指出我正确的方向使用.net api获取一些基本的报告数据,我将不胜感激

rsb*_*rro 63

从C#调用Google Analytics Reporting API并不是特别困难,但Google AnalyticsAPI文档中似乎没有详细说明所有必要步骤.我会尝试将它们全部列在这里.虽然YMMV,我相信这些步骤在2016年7月20日是正确的.

您可以从创建新的C#项目开始.我们将制作一个控制台应用程序来测试GoogleAnalyticsApiConsole.创建项目后,我们将使用NuGet包管理器控制台(位于Visual Studio 2015中的"工具"菜单下)添加对Google Analytics Reporting API V4 Client Library for .NET的引用.启动控制台并在PM>提示符处发出以下命令:

PM> Install-Package Google.Apis.AnalyticsReporting.v4

安装该软件包将下载调用Google Analytics报告Web服务所需的客户端库以及许多其他依赖项.

要调用Web服务,您需要为应用程序设置OAuth 2.0访问权限.可以在此处找到此设置的文档,但我将在下面进行总结:

  1. 登录Google云端控制台:https://console.cloud.google.com/.请务必使用可以访问您尝试使用报告API查询的Google Analytics帐户的帐户登录.

  2. 单击Google Cloud Platform菜单,然后选择API Manager.

Google Cloud Platform API Manager

  1. 在左侧,单击Credentials,然后创建一个名为的新项目Google Analytics API Console.给它一些时间来创建新项目.

  2. 创建项目后,如果尚未选择" 凭据",请再次单击" 凭据",然后单击右侧面板中的" OAuth同意屏幕"链接.设置向用户显示的产品名称Google Analytics API Console,然后点击保存.

  3. 再次单击" 凭据",然后单击" 创建凭据",并选择" OAuth客户端ID".选择其他应用程序类型,然后输入Google Analytics API Console作为名称,然后点击创建.

  4. 创建凭证后,您将看到客户端ID和客户端密钥.您可以关闭对话框窗口.

  5. 现在,在凭据下,您应该在OAuth 2.0客户端ID下看到一个条目.单击该条目最右侧的下载图标以下载client_secret.json文件(此文件将具有更长的名称).下载后将该文件添加到根级别的项目并重命名为client_secret.json.

Google Cloud Platform API凭据

  1. 现在已经创建了OAuth 2.0凭据,我们需要启用它来调用Reporting API.选择概述,确保在右侧面板中选择了Google API.在Reporting搜索框中输入,然后从列表中选择Analytics Reporting API V4.在下一个屏幕上,单击" 启用".启用此API后,您应该可以在右侧面板的" 启用的API"列表中看到它.

Google Cloud Platform支持分析报告

现在我们已经创建了项目并创建了OAuth 2.0凭据,现在是时候调用Reporting API V4了.下面列出的代码将使用Google API和client_secret.json文件创建一个Google.Apis.Auth.OAuth2.UserCredential查询Reporting API,以查看View的给定日期范围之间的所有会话.代码在这里改编自Java示例.

在执行代码之前,请确保将文件上的" 构建操作"设置为" 内容",将" 复制到输出目录"设置为"如果更新则复制".还有两个变量需要正确设置.首先,在该方法中,将值设置为用于创建OAuth 2.0凭据的电子邮件地址.然后,在该方法中,确保将变量设置为要使用Reporting API查询的视图.要查找,请登录Google Analytics并选择" 管理"标签.从那里,在最右侧的" 查看"下拉列表中选择要查询的视图,然后选择" 查看设置".该视图ID将下显示基本设置.client_secret.jsonGetCredential()loginEmailAddressMainViewIdreportRequestViewId

第一次执行代码时,它将显示一个网页,询问您是否允许Google Analytics API Console访问API数据.选择允许继续.从那时起,该权限将被存储在GoogleAnalyticsApiConsole FileDataStore.如果删除该文件,则需要再次授予权限.该文件可以在%APPDATA%\GoogleAnalyicsApiConsole目录中找到.

Google API权限OAuth 2.0

请注意,我相信这种情况将满足OP的需求.如果要将此应用程序分发给客户端,则很可能需要使用不同的OAuth 2.0方案.

这是代码:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Google.Apis.AnalyticsReporting.v4;
using Google.Apis.AnalyticsReporting.v4.Data;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Services;
using Google.Apis.Util.Store;

namespace GoogleAnalyticsApiConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                var credential = GetCredential().Result;
                using(var svc = new AnalyticsReportingService(
                    new BaseClientService.Initializer
                    {
                        HttpClientInitializer = credential,
                        ApplicationName = "Google Analytics API Console"
                    }))
                {    
                    var dateRange = new DateRange
                    {
                        StartDate = "2016-05-01",
                        EndDate = "2016-05-31"
                    };
                    var sessions = new Metric
                    {
                        Expression = "ga:sessions",
                        Alias = "Sessions"
                    };
                    var date = new Dimension { Name = "ga:date" };

                    var reportRequest = new ReportRequest
                    {
                        DateRanges = new List<DateRange> { dateRange },
                        Dimensions = new List<Dimension> { date },
                        Metrics = new List<Metric> { sessions },
                        ViewId = "<<your view id>>"
                    };
                    var getReportsRequest = new GetReportsRequest {
                        ReportRequests = new List<ReportRequest> { reportRequest } };
                    var batchRequest = svc.Reports.BatchGet(getReportsRequest);
                    var response = batchRequest.Execute();
                    foreach (var x in response.Reports.First().Data.Rows)
                    {
                        Console.WriteLine(string.Join(", ", x.Dimensions) +
                        "   " + string.Join(", ", x.Metrics.First().Values));
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }

        static async Task<UserCredential> GetCredential()
        {
            using (var stream = new FileStream("client_secret.json", 
                 FileMode.Open, FileAccess.Read))
            {
                const string loginEmailAddress = "<<your account email address>>";
                return await GoogleWebAuthorizationBroker.AuthorizeAsync(
                    GoogleClientSecrets.Load(stream).Secrets,
                    new[] { AnalyticsReportingService.Scope.Analytics },
                    loginEmailAddress, CancellationToken.None, 
                    new FileDataStore("GoogleAnalyticsApiConsole"));
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 一个非常有用且写得很好的答案,特别是考虑到缺乏可用的文档. (4认同)
  • 请注意,`AnalyticsReportingService`实现了`IDisposable`,应该包含在`using'块中. (3认同)
  • @TrueWill感谢您的评论 - 你是对的.我更新了代码,在`AnalyticsReportingService`实例周围包含一个`using`语句. (3认同)

kev*_*vin 24

以下是2019 年 9 月更新的步骤。

首先,了解 OAuth 下有两个选择:用户凭据服务帐户凭据。当您不知道将连接到哪个 Google Analytics 帐户时,将使用用户凭据,因此用户授予您的应用程序权限。服务帐户凭据旨在用于,例如,如果您为公司构建自己的仪表板以显示 Google Analytics 数据。

大多数情况下,如果您需要以编程方式访问 Analytics 数据,则是第二种情况。

下面的步骤应该让您开始学习一个简单的 C# 示例。请注意,Google 网络控制台部分可能略有不同,但应该很容易找到。

  1. 转至Google API 控制台。如果出现提示,请创建一个项目。
  2. 转到服务帐户
  3. 创建一个新的服务帐户。您应该有一个随机生成的电子邮件地址的帐户(我的以 结尾xxx@xxx.iam.gserviceaccount.com
  4. 找到创建密钥按钮。选择JSON并下载文件。这是您的私钥,也是您唯一的副本。不要失去它。
  5. 转到您的 Google Analytics(分析)管理面板。使用其电子邮件地址授予对服务帐户的访问权限,与授予其他用户访问权限的方式相同。

谷歌配置完成。现在跳转到 Visual Studio。

  1. 创建一个新的 C# 控制台项目。
  2. 获取 Nuget 包Google.Apis.AnalyticsReporting.v4。它还应该自动下载核心包。
  3. 获取之前下载的 JSON 文件,将其放入项目中,将其属性设置为Content始终复制
using Google.Apis.AnalyticsReporting.v4.Data;
using System;

namespace ConsoleApplication {
    class Program {
        static void Main(string[] args) {
            var credential = Google.Apis.Auth.OAuth2.GoogleCredential.FromFile("serviceAccount.json")
                .CreateScoped(new[] { Google.Apis.AnalyticsReporting.v4.AnalyticsReportingService.Scope.AnalyticsReadonly });

            using (var analytics = new Google.Apis.AnalyticsReporting.v4.AnalyticsReportingService(new Google.Apis.Services.BaseClientService.Initializer {
                HttpClientInitializer = credential
            })) {
                var request = analytics.Reports.BatchGet(new GetReportsRequest {
                    ReportRequests = new[] {
                        new ReportRequest{
                            DateRanges = new[] { new DateRange{ StartDate = "2019-01-01", EndDate = "2019-01-31" }},
                            Dimensions = new[] { new Dimension{ Name = "ga:date" }},
                            Metrics = new[] { new Metric{ Expression = "ga:sessions", Alias = "Sessions"}},
                            ViewId = "99999999"
                        }
                    }
                });
                var response = request.Execute();
                foreach (var row in response.Reports[0].Data.Rows) {
                    Console.Write(string.Join(",", row.Dimensions) + ": ");
                    foreach (var metric in row.Metrics) Console.WriteLine(string.Join(",", metric.Values));
                }
            }

            Console.WriteLine("Done");
            Console.ReadKey(true);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这正是我一直在寻找的。谢谢你,这真的很有帮助 (7认同)

Joh*_*ham 5

我有相同的经验:Google的文档非常深入,但在提供如何连接.NET的明确示例方面非常糟糕.

我最终意识到的一个关键事项是,您可以使用OAuth2凭据或服务帐户凭据进行连接.如果您拥有Google Analytics帐户,请使用服务帐户.如果您需要连接到其他用户的Google Analytics帐户,请使用OAuth2.

似乎有很多关于如何使用OAuth2凭据获取Analytics API数据的在线示例,但我拥有自己的Google Analytics帐户,只是想从中提取数据.我想出了如何使用a连接到Analytics Reporting API v4 ServiceAccountCredential,我在类似的Stack Overflow问题上写了一个答案,其中包含所有细节.