Ben*_*Ben 36 .net c# google-analytics-api google-api-dotnet-client google-analytics-firebase
我正在尝试从我们的Google分析实例中获取一些数据,并且我想使用适用于.NET的Analytics Reporting API V4客户端库(https://developers.google.com/api-client-library/dotnet/apis/analyticsreporting/v4)这样我就可以将一些数据烘焙到我们构建的管理站点中.我无法找到使用此代码的任何示例,文档似乎非常稀疏.我想使用服务帐户进行授权,因为我们只需要查看与我们控制的分析帐户相关联的数据.
如果有人能提供一些示例代码或指出我正确的方向使用.net api获取一些基本的报告数据,我将不胜感激
rsb*_*rro 63
从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访问权限.可以在此处找到此设置的文档,但我将在下面进行总结:
登录Google云端控制台:https://console.cloud.google.com/.请务必使用可以访问您尝试使用报告API查询的Google Analytics帐户的帐户登录.
单击Google Cloud Platform菜单,然后选择API Manager.
在左侧,单击Credentials,然后创建一个名为的新项目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.
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示例.
在执行代码之前,请确保将文件上的" 构建操作"设置为" 内容",将" 复制到输出目录"设置为"如果更新则复制".还有两个变量需要正确设置.首先,在该方法中,将值设置为用于创建OAuth 2.0凭据的电子邮件地址.然后,在该方法中,确保将变量设置为要使用Reporting API查询的视图.要查找,请登录Google Analytics并选择" 管理"标签.从那里,在最右侧的" 查看"下拉列表中选择要查询的视图,然后选择" 查看设置".该视图ID将下显示基本设置.client_secret.jsonGetCredential()loginEmailAddressMainViewIdreportRequestViewId
第一次执行代码时,它将显示一个网页,询问您是否允许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"));
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
kev*_*vin 24
以下是2019 年 9 月更新的步骤。
首先,了解 OAuth 下有两个选择:用户凭据和服务帐户凭据。当您不知道将连接到哪个 Google Analytics 帐户时,将使用用户凭据,因此用户授予您的应用程序权限。服务帐户凭据旨在用于,例如,如果您为公司构建自己的仪表板以显示 Google Analytics 数据。
大多数情况下,如果您需要以编程方式访问 Analytics 数据,则是第二种情况。
下面的步骤应该让您开始学习一个简单的 C# 示例。请注意,Google 网络控制台部分可能略有不同,但应该很容易找到。
xxx@xxx.iam.gserviceaccount.com)谷歌配置完成。现在跳转到 Visual Studio。
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我有相同的经验:Google的文档非常深入,但在提供如何连接.NET的明确示例方面非常糟糕.
我最终意识到的一个关键事项是,您可以使用OAuth2凭据或服务帐户凭据进行连接.如果您拥有Google Analytics帐户,请使用服务帐户.如果您需要连接到其他用户的Google Analytics帐户,请使用OAuth2.
似乎有很多关于如何使用OAuth2凭据获取Analytics API数据的在线示例,但我拥有自己的Google Analytics帐户,只是想从中提取数据.我想出了如何使用a连接到Analytics Reporting API v4 ServiceAccountCredential,我在类似的Stack Overflow问题上写了一个答案,其中包含所有细节.