我正在尝试从我们的谷歌分析实例中获取一些数据,并且我想使用适用于.NET的Analytics Reporting API V4客户端库(https://developers.google.com/api-client-library/dotnet/apis/analyticsreporting/v4),以便我可以将这些数据烘焙到我们构建的管理站点中。我无法找到使用此代码的任何示例,文档似乎非常稀疏。我想使用服务帐户进行授权,因为我们只需要查看与我们控制的分析帐户相关联的数据。
如果有人能提供一些示例代码或指出我正确的方向使用.net api获取一些基本的报告数据,我将不胜感激
从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的文档,但我将总结如下:
Google Analytics API Console
的新项目。给它一些时间来创建新项目。Google Analytics API Console
,然后单击“保存”。Google Analytics API Console
作为Name,然后单击Create。client_secret.json
文件(此文件将具有更长的名称)。下载后,将该文件添加到根级别的项目中,并将其重命名为client_secret.json
。Reporting
,然后从列表中选择Analytics Reporting API V4。在下一个屏幕上,单击“启用”。启用此API后,您应该可以在右侧面板的“启用的API”列表中看到它。现在我们已经创建了项目并创建了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
目录中找到。
请注意,我相信这种情况将满足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数据的在线示例,但我拥有自己的Google Analytics帐户,只是想从中提取数据。我想出了如何使用ServiceAccountCredential
连接到Analytics Reporting API v4,并且我在类似的Stack Overflow问题上写了an answer并提供了所有细节。