适用于.NET的Analytics Reporting API V4客户端库
我正在尝试从我们的Google分析实例中获取一些数据,并且我想使用适用于.NET的Analytics Reporting API V4客户端库( https://developers.google.com/api-client-library/dotnet/apis / analyticsreporting / v4 )这样我就可以将一些数据烘焙到我们构建的管理站点中。 我无法找到使用此代码的任何示例,文档似乎非常稀疏。 我想使用服务帐户进行授权,因为我们只需要查看与我们控制的分析帐户相关联的数据。
如果有人可以提供一些示例代码或指出我正确的方向使用.net api获取一些基本的报告数据,我将不胜感激
从C#调用Google Analytics Reporting API并不是特别困难,但Google Analyics 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报告Web服务所需的客户端库以及许多其他依赖项。
要调用Web服务,您需要为应用程序设置OAuth 2.0访问权限。 可以在此处找到此设置的文档,但我将在下面进行总结:
-
登录Google云端控制台 : https : //console.cloud.google.com/ 。 请务必使用可以访问您尝试使用报告API查询的Google Analytics帐户的帐户登录。
-
单击Google Cloud Platform菜单,然后选择API Manager 。
-
在左侧,单击“ 凭据” ,然后创建一个名为
Google Analytics API Console
的新项目。 给它一些时间来创建新项目。 -
创建项目后,如果尚未选择“ 凭据” ,请再次单击“ 凭据” ,然后单击右侧面板中的“ OAuth同意屏幕”链接。 将显示给用户的产品名称设置为
Google Analytics API Console
,然后点击保存。 -
再次单击“ 凭据” ,然后单击“ 创建凭据” ,并选择“ OAuth客户端ID” 。 选择其他 应用程序类型 ,然后输入
Google Analytics API Console
作为名称 ,然后单击创建 。 -
创建凭证后,您将看到客户端ID和客户端密钥。 您可以关闭对话框窗口。
-
现在,在凭据下,您应该在OAuth 2.0客户端ID下看到一个条目。 单击该条目最右侧的下载图标以下载
client_secret.json
文件(此文件将具有更长的名称)。 下载后,将该文件添加到根级别的项目中,并将其重命名为client_secret.json
。
- 现在已经创建了OAuth 2.0凭据,我们需要启用它来调用Reporting API。 选择概述 ,确保在右侧面板中选择了Google API 。 在搜索框中键入
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示例 。
在执行代码之前 ,请确保将client_secret.json
文件上的Build Action设置为Content ,将Copy to Output Directory设置为Copy by newer 。 还有两个变量需要正确设置。 首先,在GetCredential()
方法中,将loginEmailAddress
值设置为用于创建OAuth 2.0凭据的电子邮件地址。 然后,在Main
方法中,确保将reportRequest
变量中的ViewId
设置为要使用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 }, Dimensions = new List { date }, Metrics = new List { sessions }, ViewId = "<>" }; var getReportsRequest = new GetReportsRequest { ReportRequests = new List { 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 GetCredential() { using (var stream = new FileStream("client_secret.json", FileMode.Open, FileAccess.Read)) { const string loginEmailAddress = "<>"; return await GoogleWebAuthorizationBroker.AuthorizeAsync( GoogleClientSecrets.Load(stream).Secrets, new[] { AnalyticsReportingService.Scope.Analytics }, loginEmailAddress, CancellationToken.None, new FileDataStore("GoogleAnalyticsApiConsole")); } } } }
我有相同的经验:谷歌的文档非常深入,但在提供如何连接.NET的明确示例方面非常糟糕。
我最终意识到的一个关键因素是您可以使用OAuth2凭据或服务帐户凭据进行连接。 如果您拥有Google Analytics帐户,请使用服务帐户。 如果您需要连接到其他用户的Google Analytics帐户,请使用OAuth2。
似乎有很多关于如何使用OAuth2凭据获取Analytics API数据的在线示例,但我拥有自己的Google Analytics帐户,只是想从中提取数据。 我想出了如何使用ServiceAccountCredential
连接到Analytics Reporting API v4,并且我在类似的Stack Overflow问题上写了一个答案 ,其中包含所有细节。