在C中調用的谷歌Analytics(分析)報告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
安裝該軟件包將下載到與其他一些依賴沿致電谷歌分析報告的Web服務所需的客戶端庫。
爲了調用Web服務,您需要爲應用程序設置OAuth 2.0訪問權限。此設置can be found here的文檔,但我會在下面總結:
登錄到谷歌雲平臺控制檯:https://console.cloud.google.com/。請務必使用有權訪問您嘗試使用報告API查詢的Google Analytics帳戶的帳戶進行登錄。
點擊谷歌雲平臺菜單和選擇API管理器。
在左手側,單擊憑據然後創建一個名爲Google Analytics API Console
新項目。給它一些時間來創建新項目。
創建項目後,再次單擊證書如果沒有被選中,然後單擊右側面板上的的OAuth同意畫面鏈接。將顯示給用戶的產品名稱設置爲Google Analytics API Console
,然後單擊保存。
點擊憑據一遍,然後單擊創建憑證,並選擇OAuth用戶端ID。選擇其他爲應用型,然後輸入Google Analytics API Console
爲名稱,然後單擊創建。
創建證書後,您將看到一個客戶端ID和一個客戶端密鑰。您可以關閉對話窗口。
現在,在證書你應該看到下OAuth 2.0用戶端編號的條目。單擊該條目最右側的下載圖標以下載client_secret.json
文件(該文件將具有更長的名稱)。一旦下載該文件並將其重命名爲client_secret.json
,將該文件添加到您的項目的根級別。
- 既然的OAuth 2.0憑證已經被創建,就需要使其能夠調用報告API。選擇概述並確保谷歌API被選中在右側面板。在搜索框中輸入
Reporting
,然後從列表中選擇Analytics Reporting API V4。在下一個屏幕上,單擊啓用。一旦啓用了此API,您應該可以在右側面板的啓用API列表下看到它。
現在,我們已經創建了項目,並創建了我們的OAuth 2.0憑證,它是時間打電話報告API V4。下面列出的代碼將使用Google API和client_secret.json
文件創建一個Google.Apis.Auth.OAuth2.UserCredential
來查詢報告API,以查看View的給定日期範圍之間的所有會話。代碼改編自Java example here。
之前執行的代碼,一定要在client_secret.json
文件中設置的生成操作到內容和複製到輸出目錄設置複製如果新。還有兩個變量需要適當設置。首先,在GetCredential()
方法中,將loginEmailAddress
值設置爲用於創建OAuth 2.0憑據的電子郵件地址。然後,在Main
方法中,請確保將變量中的ViewId
設置爲您要使用報告API查詢的視圖。要找到ViewId
,請登錄Google Analytics並選擇Admin選項卡。從那裏,在最右側的查看下拉列表中選擇要查詢的查看,然後選擇查看設置。該查看ID將在基本設置顯示。
執行代碼中的第一次,它會彈出一個網頁,詢問您是否要允許Google Analytics API Console
能夠訪問的API數據。選擇允許繼續。從那時起,該許可將存儲在GoogleAnalyticsApiConsole
FileDataStore
中。如果該文件被刪除,則需要再次授予權限。該文件可以在%APPDATA%\GoogleAnalyicsApiConsole
目錄中找到。
請注意,我beleive此方案將滿足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"));
}
}
}
}
的[客戶端庫docuementation(https://developers.google.com/api-client-library/dotnet/get_started)適用於所有谷歌的API。至於提出特定請求,您可以使用各種語言查看[V4 API示例](https://developers.google.com/analytics/devguides/reporting/core/v4/samples),並將其映射到dot net。 – Matt
我終於弄清楚如何使用.net客戶端庫發出請求,但這絕對不是直觀的。我會張貼一些示例代碼,如果我有一些額外的時間 – Ben
會很好,如果你發現時間:) –