[C#] 使用 Google Analytics 取得 report資訊
近來有個專案需求是利用Google Analytics 將頁面的報表資訊回傳回來,此篇文章我會先大致介紹一些操作流程,還有如何取得他人已建立的Google Analytics資訊,之後有機會再跟大家介紹怎麼讓網站或blogger可以被Google Analytics追蹤。
Google API 設定
1.先登入個人的google帳號,並建立一個Google Api專案
2.點擊「啟用API和服務」
3.在上方搜尋框 輸入 關鍵字「Analytics」,找到「Google Analytics Reporting API」並啟用
4.建立憑證=>服務帳戶
5.輸入服務帳戶名稱,其他可以不要填,直接儲存到建立完成
6.點擊編輯=>金鑰=>新增金鑰=>建立新的金鑰
7.選擇Json 按建立(此Json檔請勿丟失,無法再建立出同一組金鑰)
新增Google Analytics 使用者
1.前往Google Analytics 點擊「 管理」
2.在三個區塊的 「帳戶存取管理」加入剛剛新增的服務帳戶(Google Api 的 服務帳戶 ID),並選擇給予的權限
實作:
1.建立 GoogleAnalyticsHelper
/// <summary>
/// Google Analytics Helper
/// </summary>
public static class GoogleAnalyticsHelper
{
#region 參數
///<summary>
/// 基礎路徑
/// </summary>
private static string BaseDirectory = AppDomain.CurrentDomain.BaseDirectory;
/// <summary>
/// Google Analytics Reporting API Key
/// </summary>
private static string _GAKeyPath = BaseDirectory + "你下載的金鑰Json.json";
/// <summary>
/// Google Analytics 資料檢視Id
/// </summary>
private static string _ViewId = "你的資料檢視Id";
#endregion
/// <summary>
/// 取得 Google Analytics Report
/// </summary>
/// <param name="dateTime">查詢日期</param>
/// <returns></returns>
public static GetReportsResponse GetGetReportsResponse(DateTime dateTime)
{
//建立憑證物件
var googleCredential = GoogleCredential.FromFile(_GAKeyPath).CreateScoped(AnalyticsReportingService.Scope.Analytics);
//建立 AnalyticsReportingService 物件
var analyticsReporting = new AnalyticsReportingService(new BaseClientService.Initializer
{
HttpClientInitializer = googleCredential,
ApplicationName = "GA Lab"
});
//建立 Dimension 物件
var dimension = new Dimension { Name = "ga:pagePath" };
//建立 Metric 物件
var users = new Metric { Expression = "ga:users" };
var pageviews = new Metric { Expression = "ga:pageviews" };
//建立 DateRange 物件
var date = dateTime.ToString("yyyy-MM-dd");
var january = new DateRange { StartDate = date, EndDate = date };
var reportRequest = new ReportRequest
{
ViewId = _ViewId,
Metrics = new List<Metric> { users, pageviews },
Dimensions = new List<Dimension> { dimension },
DateRanges = new List<DateRange> { january }
};
var reportGetRequest = new GetReportsRequest { ReportRequests = new List<ReportRequest> { reportRequest } };
var response = analyticsReporting.Reports.BatchGet(reportGetRequest).Execute();
return response;
}
/// <summary>
/// 取得report詳細資訊
/// </summary>
/// <param name="reports"></param>
/// <returns></returns>
public static StringBuilder GetReportDetailStringBuilder(IList<Report> reports)
{
var sb = new StringBuilder();
if (reports == null || !reports.Any())
{
return sb;
}
foreach (Report report in reports)
{
ColumnHeader header = report.ColumnHeader;
List<string> dimensionHeaders = (List<string>)header.Dimensions;
List<MetricHeaderEntry> metricHeaders = (List<MetricHeaderEntry>)header.MetricHeader.MetricHeaderEntries;
List<ReportRow> rows = (List<ReportRow>)report.Data.Rows;
foreach (ReportRow row in rows)
{
List<string> dimensions = (List<string>)row.Dimensions;
List<DateRangeValues> metrics = (List<DateRangeValues>)row.Metrics;
for (int i = 0; i < dimensionHeaders.Count() && i < dimensions.Count(); i++)
{
sb.AppendLine(dimensionHeaders[i] + ": " + dimensions[i]);
}
for (int j = 0; j <metrics.Count(); j++)
{
sb.AppendLine("Date Range (" + j + "): ");
DateRangeValues values = metrics[j];
for (int k = 0; k < values.Values.Count() && k < metricHeaders.Count(); k++)
{
sb.AppendLine(metricHeaders[k].Name + ": " + values.Values[k]);
}
}
}
}
return sb;
}
}
2.查詢與結果
//查詢日期(昨天)
var searchDate = DateTime.Now.AddDays(-1);
//取得 Google Analytics Report
var report = GoogleAnalyticsHelper.GetGetReportsResponse(searchDate);
//取得report詳細資訊
var sb = GoogleAnalyticsHelper.GetReportDetailStringBuilder(report.Reports);
Console.WriteLine(sb.ToString());
Console.ReadLine();
留言
張貼留言