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

问题描述 投票:34回答:2

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

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

c# .net google-analytics-api google-api-dotnet-client google-analytics-v4
2个回答
62
投票

从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访问权限。这个设置can be found here的文档,但我将总结如下:

  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”。选择Other for Application type,然后输入Google Analytics API Console作为Name,然后单击Create。
  4. 创建凭证后,您将看到客户端ID和客户端密钥。您可以关闭对话框窗口。
  5. 现在,在凭据下,您应该在OAuth 2.0客户端ID下看到一个条目。单击该条目最右侧的下载图标以下载client_secret.json文件(此文件将具有更长的名称)。下载后,将该文件添加到根级别的项目中,并将其重命名为client_secret.json

Google Cloud Platform API Credentials

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

Google Cloud Platform Enabled Analytics Reporting

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

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

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

Google API Permission 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"));
            }
        }
    }
}

5
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.