.NET 的分析报告 API V4 客户端库

Analytics Reporting API V4 Client Library for .NET

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

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

从 C# 调用 Google Analytics Reporting API 并不是特别困难,但是在 Google Analytics API 文档。我将尝试将它们全部列在这里。虽然 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 Reporting Web 服务所需的客户端库以及许多其他依赖项。

为了调用网络服务,您需要为您的应用程序设置 OAuth 2.0 访问权限。此设置的文档 can be found here,但我将在下面进行总结:

  1. 登录Google云平台控制台https://console.cloud.google.com/。请务必使用有权访问您尝试查询报告 API.

  2. 的 Google Analytics 帐户的帐户登录
  3. 单击Google云平台菜单和selectAPI管理器.

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

  2. 创建项目后,如果尚未 selected,请再次单击 Credentials,然后单击 右侧面板中的 OAuth 同意屏幕 link。将向用户显示的产品名称设置为Google Analytics API Console,然后单击“保存”。

  3. 再次单击 Credentials,然后单击 Create Credentials,然后选择 OAuth Client ID 。 Select Other for Application type 然后输入 Google Analytics API Console 作为 Name然后单击 创建.

  4. 创建凭据后,您将看到一个客户端 ID 和一个客户端密码。您可以关闭对话框 window.

  5. 现在,在 Credentials 下,您应该会在 OAuth 2.0 client ids 下看到一个条目。单击该条目最右侧的下载图标以下载 client_secret.json 文件(此文件的名称会更长)。下载该文件后将该文件添加到项目的根级别并将其重命名为 client_secret.json.

  1. 既然已经创建了 OAuth 2.0 凭证,我们需要启用它来调用报告 API。 Select 概览 并确保 Google APIs select 是正确的控制板。在搜索框中输入 Reporting,然后从列表中输入 select Analytics Reporting API V4。在下一个屏幕上,单击 启用 。启用此 API 后,您应该能够在右侧面板的 Enabled APIs 列表下看到它。

现在我们已经创建了项目并创建了 OAuth 2.0 凭证,是时候调用 Reporting API V4 了。下面列出的代码将使用 Google API 和 client_secret.json 文件创建一个 Google.Apis.Auth.OAuth2.UserCredential 来查询给定日期范围内所有会话的报告 API一个视图。代码改编自 Java example here.

在执行代码之前,务必将 client_secret.json 文件上的 Build Action 设置为 ContentCopy to Output Directory 设置为 Copy if newer。还有两个变量需要正确设置。首先,在 GetCredential() 方法中,将 loginEmailAddress 值设置为用于创建 OAuth 2.0 凭证的电子邮件地址。然后,在 Main 方法中,务必将 reportRequest 变量中的 ViewId 设置为要使用 Reporting API 查询的视图。要查找 ViewId,请登录 Google Analytics 并 select Admin 选项卡。从那里,select 您要在最右侧的 View 下拉列表中查询的视图和 select View Settings . 视图 ID 将显示在 基本设置 下。

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

请注意,我相信这个场景会满足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"));
            }
        }
    }
}

我有同样的经历:Google 的文档非常深入,但在给出如何连接 .NET 的清晰示例方面却非常糟糕。

我终于意识到的一件重要事情是,您可以使用 OAuth2 凭据或服务帐户凭据进行连接。如果您拥有自己的 Google Analytics(分析)帐户,请使用服务帐户。如果您需要连接到其他用户的 Google Analytics(分析)帐户,请使用 OAuth2。

网上似乎有很多关于如何使用 OAuth2 凭据获取 Analytics API 数据的示例,但我拥有自己的 Analytics 帐户,只是想从中提取数据。我弄清楚了如何使用 ServiceAccountCredential 连接到 Analytics Reporting API v4,并且我在一个类似的 Stack Overflow 问题上写了 an answer 并提供了所有详细信息。

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

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

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

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

  1. 前往Google API Console。根据提示创建一个项目。
  2. 转到Service accounts
  3. 创建一个新的服务帐户。您应该有一个随机生成的电子邮件地址的帐户(我的以 xxx@xxx.iam.gserviceaccount.com 结尾)
  4. 找到创建密钥按钮。选择 JSON 并下载文件。这是您的私钥,也是您唯一的副本。别弄丢了。
  5. 转到您的 Google Analytics 管理面板。使用其电子邮件地址授予对服务帐户的访问权限,就像您向其他用户授予访问权限一样。

Google配置完成。现在跳转到 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);
        }
    }
}

这是您实际要查找的代码-

    protected void Page_Load(object sender, EventArgs e)
    {
        IRestRequest request = new RestRequest("", Method.POST, DataFormat.Json);
        string url = "https://analyticsreporting.googleapis.com/v4/reports:batchGet";

        RestClient restClient = new RestClient();
        RestRequest Tokenrequest = new RestRequest();
        Tokenrequest.AddQueryParameter("client_id", "<CLIENTID>");
        Tokenrequest.AddQueryParameter("client_secret", "<CLIENTSECRET>");
        Tokenrequest.AddQueryParameter("grant_type", "refresh_token");
        Tokenrequest.AddQueryParameter("refresh_token", "<REFRESH_TOKEN>");
        restClient.BaseUrl = new System.Uri("https://oauth2.googleapis.com/token");
        restClient.Post(Tokenrequest);
        var responseToken = restClient.Execute(Tokenrequest);
        //Response.Write(responseToken);
        dynamic Tokendata = JObject.Parse(responseToken.Content);
        var newToken = Tokendata.access_token.Value;

        request.AddHeader("authorization", string.Concat("Bearer "+newToken));
        string jsonString = "{" +
                "\"reportRequests\": [{" +
                    "\"dateRanges\" : [{\"" +
                     "startDate\" :'2021-07-01' ," +
                     "\"endDate\" : '2021-07-07'" +
                "}]," +
                
                "\"metrics\":["+
                "{\"expression\":'ga:totalEvents'},"+
                "{\"expression\": 'ga:pageviews'}"+
                  "]," +


                "\"dimensions\": ["+
            "{\"name\": 'ga:eventCategory'}" +
                ",{" +
            "\"name\": 'ga:eventAction'"+
                "},"+
                //"{\"name\": 'ga:deviceCategory'}"+
                "]," +


                "\"dimensionFilterClauses\": [{"+
            "\"filters\": [{"+
                "\"dimensionName\": 'ga:eventCategory',"+
          "\"operator\": 'EXACT',"+
          "\"expressions\": ["+
            "\"Login_Form"+
                "\"]}]}],"+



                "\"viewId\":'<VIEWID>'" +
                "}]" +
            "}";

        IRestClient client = new RestClient(url);
        request.AddHeader("Content-Type", "application/json; CHARSET=UTF-8");
        request.Resource = "";
        request.AddParameter("application/json", jsonString, ParameterType.RequestBody);
        var response = client.Execute(request);
        dynamic jdata = JObject.Parse(response.Content);

        var Row_data = jdata.reports[0].data.rows;
        Response.Write(Row_data);
       
    }

   

阅读文档以通过 refresh_token 获得 access_token。

https://developers.google.com/identity/protocols/oauth2/web-server#offline