我正在尝试从我们的Google分析实例获取一些数据,并且我想使用适用于.NET的Analytics Reporting API V4客户端库(https://developers.google.com/api-client-library/dotnet/apis/analyticsreporting/v4),以便我可以将这些数据烘焙到我们建立的管理网站。我无法找到使用此代码的任何示例,文档似乎非常稀疏。我想使用服务帐户进行授权,因为我们只需要查看与我们控制的分析帐户相关联的数据。
如果有人能提供一些示例代码或指出我正确的方向使用.net api获取一些基本的报告数据,我们将不胜感激
答案 0 :(得分:59)
从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 Cloud Platform Console :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
。
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
文件中的构建操作设置为内容和复制到输出目录设置为如果更新则复制。还有两个变量需要正确设置。首先,在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"));
}
}
}
}
答案 1 :(得分:5)
我有同样的经历:Google的文档非常深入,但在提供如何连接.NET的明确示例方面非常糟糕。
我最终意识到的一个关键因素是您可以使用OAuth2凭据或服务帐户凭据进行连接。如果您拥有Google Analytics帐户,请使用服务帐户。如果您需要连接其他用户&#39; Google Analytics帐户,请使用OAuth2。
似乎有很多关于如何使用OAuth2凭据获取Analytics API数据的在线示例,但我拥有自己的Google Analytics帐户,只是想从中提取数据。我想出了如何使用ServiceAccountCredential
连接到Analytics Reporting API v4,并在类似的Stack Overflow问题上写了an answer并提供了所有详细信息。
答案 2 :(得分:4)
以下是 2019年9月更新的步骤。
首先,请了解OAuth下有两个选择:用户凭据和服务帐户凭据。当您不知道要连接到哪个Google Analytics(分析)帐户时,将使用用户凭据,因此用户将授予您的应用程序权限。打算使用服务帐户凭据,例如如果您为公司构建了自己的仪表板以显示Google Analytics(分析)数据。
在大多数情况下,如果您需要通过编程方式访问Google Analytics(分析)数据,则是第二种情况。
下面的步骤应该使您开始一个简单的C#示例。请注意,Google Web控制台部分可能会略有不同,但是仍然应该易于找到。
xxx@xxx.iam.gserviceaccount.com
结尾)Google配置完成。现在进入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);
}
}
}
答案 3 :(得分:0)
这是您实际要查找的代码-
protected void Page_Load(object sender, EventArgs e)
{
IRestRequest request = new RestRequest("", Method.POST, DataFormat.Json);
string url = "https://analyticsreporting.googleapis.com/v4/reports:batchGet";
RestClient restClient = new RestClient();
RestRequest Tokenrequest = new RestRequest();
Tokenrequest.AddQueryParameter("client_id", "<CLIENTID>");
Tokenrequest.AddQueryParameter("client_secret", "<CLIENTSECRET>");
Tokenrequest.AddQueryParameter("grant_type", "refresh_token");
Tokenrequest.AddQueryParameter("refresh_token", "<REFRESH_TOKEN>");
restClient.BaseUrl = new System.Uri("https://oauth2.googleapis.com/token");
restClient.Post(Tokenrequest);
var responseToken = restClient.Execute(Tokenrequest);
//Response.Write(responseToken);
dynamic Tokendata = JObject.Parse(responseToken.Content);
var newToken = Tokendata.access_token.Value;
request.AddHeader("authorization", string.Concat("Bearer "+newToken));
string jsonString = "{" +
"\"reportRequests\": [{" +
"\"dateRanges\" : [{\"" +
"startDate\" :'2021-07-01' ," +
"\"endDate\" : '2021-07-07'" +
"}]," +
"\"metrics\":["+
"{\"expression\":'ga:totalEvents'},"+
"{\"expression\": 'ga:pageviews'}"+
"]," +
"\"dimensions\": ["+
"{\"name\": 'ga:eventCategory'}" +
",{" +
"\"name\": 'ga:eventAction'"+
"},"+
//"{\"name\": 'ga:deviceCategory'}"+
"]," +
"\"dimensionFilterClauses\": [{"+
"\"filters\": [{"+
"\"dimensionName\": 'ga:eventCategory',"+
"\"operator\": 'EXACT',"+
"\"expressions\": ["+
"\"Login_Form"+
"\"]}]}],"+
"\"viewId\":'<VIEWID>'" +
"}]" +
"}";
IRestClient client = new RestClient(url);
request.AddHeader("Content-Type", "application/json; CHARSET=UTF-8");
request.Resource = "";
request.AddParameter("application/json", jsonString, ParameterType.RequestBody);
var response = client.Execute(request);
dynamic jdata = JObject.Parse(response.Content);
var Row_data = jdata.reports[0].data.rows;
Response.Write(Row_data);
}
阅读文档,通过refresh_token获取access_token。
https://developers.google.com/identity/protocols/oauth2/web-server#offline