如何在ASP Core 5项目中调用Google Analytics API展示统计图表?
从Google Analytics获取数据并在ASP.NET Core 5中展示图表
一、先搞定Google Analytics API凭据
要调用GA的数据,得先拿到合法的API访问权限:
- 登录Google Cloud Console,创建新项目(或用现有项目)。
- 搜索并启用「Analytics Reporting API v4」。
- 进入「IAM与管理」→「服务账号」,点击「创建服务账号」,填写信息后保存。
- 给服务账号生成密钥:进入服务账号详情页,切换到「密钥」标签,点击「添加密钥」→「创建新密钥」,选择JSON格式下载,把密钥文件放到ASP.NET Core项目根目录。
- 登录Google Analytics后台,找到要获取数据的视图:进入「管理员」→「用户管理」,添加服务账号的邮箱(从下载的JSON密钥里的
client_email字段获取),权限设为「查看者」。
二、ASP.NET Core 5项目配置
- 安装必要的NuGet包:
Install-Package Google.Apis.AnalyticsReporting.v4 Install-Package Google.Apis.Auth.AspNetCore3
- 在
appsettings.json里添加GA配置:
"GoogleAnalytics": { "KeyFilePath": "google-analytics-key.json", "ViewId": "ga:XXXXXX" // 替换成你的GA视图ID,从GA后台「视图设置」里找 }
- 把密钥文件的属性设置为「复制到输出目录」→「如果较新则复制」,确保部署时能拿到文件。
三、编写数据获取服务
创建一个服务类来封装GA数据的获取逻辑:
// 定义接口 public interface IGoogleAnalyticsService { Task<IEnumerable<PageViewStats>> GetTopPageViewsAsync(DateTime startDate, DateTime endDate); } // 数据模型 public class PageViewStats { public string PagePath { get; set; } public int PageViews { get; set; } } // 实现类 public class GoogleAnalyticsService : IGoogleAnalyticsService { private readonly AnalyticsReportingService _gaService; private readonly string _viewId; public GoogleAnalyticsService(IConfiguration config) { var keyPath = config["GoogleAnalytics:KeyFilePath"]; _viewId = config["GoogleAnalytics:ViewId"]; // 加载服务账号凭据 var credential = ServiceAccountCredential.FromFile(keyPath); _gaService = new AnalyticsReportingService(new BaseClientService.Initializer { HttpClientInitializer = credential, ApplicationName = "ASP.NET Core GA Dashboard" }); } public async Task<IEnumerable<PageViewStats>> GetTopPageViewsAsync(DateTime startDate, DateTime endDate) { var request = new GetReportsRequest { ReportRequests = new List<ReportRequest> { new ReportRequest { ViewId = _viewId, DateRanges = new List<DateRange> { new DateRange { StartDate = startDate.ToString("yyyy-MM-dd"), EndDate = endDate.ToString("yyyy-MM-dd") } }, Metrics = new List<Metric> { new Metric { Expression = "ga:pageviews", Alias = "PageViews" } }, Dimensions = new List<Dimension> { new Dimension { Name = "ga:pagePath" } }, OrderBys = new List<OrderBy> { new OrderBy { FieldName = "ga:pageviews", SortOrder = "DESCENDING" } }, PageSize = 10 // 取Top 10页面 } } }; var response = await _gaService.Reports.BatchGet(request).ExecuteAsync(); var report = response.Reports.FirstOrDefault(); if (report?.Data?.Rows == null) return Enumerable.Empty<PageViewStats>(); return report.Data.Rows.Select(row => new PageViewStats { PagePath = row.Dimensions[0], PageViews = int.Parse(row.Metrics[0].Values[0]) }); } }
然后在Program.cs(或Startup.cs)里注册服务:
builder.Services.AddScoped<IGoogleAnalyticsService, GoogleAnalyticsService>();
四、前端用Chart.js展示图表
用Chart.js做前端可视化,步骤如下:
- 控制器里调用服务获取数据:
public class AnalyticsController : Controller { private readonly IGoogleAnalyticsService _gaService; public AnalyticsController(IGoogleAnalyticsService gaService) { _gaService = gaService; } public async Task<IActionResult> Dashboard() { // 获取过去30天的数据 var startDate = DateTime.Now.AddDays(-30); var endDate = DateTime.Now; var pageViews = await _gaService.GetTopPageViewsAsync(startDate, endDate); return View(pageViews); } }
- 视图文件
Dashboard.cshtml里渲染图表:
@{ ViewData["Title"] = "网站访问统计"; } <h2>Top 10页面访问量(近30天)</h2> <canvas id="pageViewsChart" width="600" height="300"></canvas> @section Scripts { <script src="https://cdn.jsdelivr.net/npm/chart.js"></script> <script> // 把后端数据转成JS对象 const pageViewsData = @Json.Serialize(Model); // 提取标签和数值 const labels = pageViewsData.map(item => item.PagePath); const values = pageViewsData.map(item => item.PageViews); // 初始化图表 const ctx = document.getElementById('pageViewsChart').getContext('2d'); new Chart(ctx, { type: 'bar', data: { labels: labels, datasets: [{ label: '访问次数', data: values, backgroundColor: 'rgba(75, 192, 192, 0.6)', borderColor: 'rgba(75, 192, 192, 1)', borderWidth: 1 }] }, options: { scales: { y: { beginAtZero: true, title: { display: true, text: '访问次数' } }, x: { title: { display: true, text: '页面路径' } } } } }); </script> }
五、新客户端登录报错排查
你提到的新客户端登录报错,大概率是以下几种原因,按顺序排查:
- 服务账号未授权GA视图:确认GA后台已经添加了服务账号邮箱,且权限是「查看者」。
- 密钥文件问题:检查密钥文件路径是否正确,文件是否损坏(可以重新下载一份),确保部署时文件已复制到输出目录。
- API未启用:回到Google Cloud Console,确认「Analytics Reporting API v4」是启用状态。
- ViewId格式错误:必须是
ga:XXXXXX格式,不要漏了前缀ga:。 - invalid_grant错误:如果报这个错,检查服务器系统时间是否与网络时间同步,密钥文件里的
private_key是否完整。
内容的提问来源于stack exchange,提问作者Sahar
相关产品推荐
相关产品推荐

