调用 Google Analytics Reporting API 从 C# 并不特别困难,然而所有必要的步骤在 Google Analytics API 文档中似乎没有被清晰地概述。我将在此尝试列出它们。虽然因人而异,但我相信这些步骤在 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访问。可以在此处找到有关此设置的文档
链接,但我将在下面进行概述:
登录Google Cloud平台控制台: https://console.cloud.google.com/。请确保使用具有访问要使用报告API查询的Google Analytics帐户的帐户登录。
单击Google Cloud平台菜单,然后选择API管理器。
3. 在左侧点击“凭据”,然后创建一个名为“Google Analytics API Console”的新项目。请耐心等待一段时间以创建新项目。
4. 创建项目后,如果尚未选择,则再次单击“凭据”,然后在右侧面板中单击“OAuth同意屏幕”链接。将“向用户显示的产品名称”设置为“Google Analytics API Console”,然后单击保存。
5. 再次单击“凭据”,然后单击“创建凭据”,并选择“OAuth客户端ID”。选择“其他”作为“应用程序类型”,然后输入“Google Analytics API Console”作为“名称”,最后单击“创建”。
6. 创建凭据后,您将看到客户端ID和客户端密钥。您可以关闭对话框窗口。
7. 现在,在“凭据”下,您应该看到“OAuth 2.0客户端ID”下的一个条目。单击该条目极右侧的下载图标以下载“client_secret.json”文件(此文件名称会更长)。下载完成后,请将该文件添加到项目的根级别,并将其重命名为“client_secret.json”。
现在OAuth 2.0凭据已创建,我们需要启用它来调用Reporting API。选择
概览并确保右侧面板中选中了
Google APIs。在搜索框中键入
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。该代码改编自
此处的Java示例。
在执行代码之前,请确保将
client_secret.json
文件的
Build Action设置为
Content,并将
Copy to Output Directory设置为
Copy if newer。还有两个需要正确设置的变量。首先,在
GetCredential()
方法中,将
loginEmailAddress
值设置为用于创建OAuth 2.0凭据的电子邮件地址。然后,在
Main
方法中,确保将
reportRequest
变量中的
ViewId
设置为您想要使用Reporting API查询的视图。要查找
ViewId
,请登录Google Analytics并选择
管理选项卡。从那里,在右侧的
视图下拉菜单中选择要查询的视图,然后选择
视图设置。
View 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"));
}
}
}
}