当前位置: 首页 > 知识库问答 >
问题:

使用Google Analytics API在C#中显示信息

商天逸
2023-03-14
    null

共有1个答案

傅安宁
2023-03-14

它需要在谷歌方面进行一些设置,但实际上相当简单。我会一步一步列出。

首先,您需要在Google cloud console中创建一个应用程序,并启用Analytics API。

    null
  • 转到http://code.google.com/apis/console,从下拉菜单中选择您创建的项目。
  • 接下来转到“API访问”部分,然后单击“创建另一个客户端ID”按钮。
  • 在创建客户端ID窗口中,选择服务帐户,然后单击创建客户端ID。
  • 如果该帐户不能自动开始下载,请下载该帐户的公钥。以后编写授权代码时将需要此公钥。
  • 退出之前,复制服务帐户自动生成的电子邮件地址,因为您将在下一步中需要此地址。客户端电子邮件类似于@developer.gserviceaccount.com

现在,我们有一个服务帐户,您将需要允许这个服务帐户访问您的个人资料/网站在谷歌分析。

  • 登录Google Analytics。
  • 登录后,单击管理按钮到屏幕左侧的bottem。
  • 在管理中,单击帐户下拉,选择您希望服务帐户能够访问的帐户/站点,然后单击帐户部分下的“用户管理”。
  • 输入为您的服务帐户生成的电子邮件地址,并授予其读取和分析权限。
  • 对您希望服务能够访问的任何其他帐户/站点重复这些步骤。

现在服务帐户通过API访问Google Analytics的设置已经完成,我们可以开始编写代码了。

using Google.Apis.Analytics.v3;
using Google.Apis.Analytics.v3.Data;
using Google.Apis.Services;
using System.Security.Cryptography.X509Certificates;
using Google.Apis.Auth.OAuth2;
using System.Collections.Generic; 
using System.Linq;

一些需要注意的事情是。

  • keypath是您下载的具有.p12文件扩展名的密钥文件的路径。
  • AccounteMailAddress是我们前面得到的api电子邮件。
  • scope是google.apis.analytics.v3.analyticService类中的枚举,它指定用于授权的url(例如:analyticsService.scope.analyticsReadOnly)。
  • 应用程序名称是您选择的名称,它告诉google api访问它的内容(也可以是您选择的内容)。

然后执行一些基本调用的代码如下所示。

public class GoogleAnalyticsAPI
{
    public AnalyticsService Service { get; set; }

    public GoogleAnalyticsAPI(string keyPath, string accountEmailAddress)
    {
        var certificate = new X509Certificate2(keyPath, "notasecret", X509KeyStorageFlags.Exportable);

        var credentials = new ServiceAccountCredential(
           new ServiceAccountCredential.Initializer(accountEmailAddress)
           {
               Scopes = new[] { AnalyticsService.Scope.AnalyticsReadonly }
           }.FromCertificate(certificate));

        Service = new AnalyticsService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credentials,
                ApplicationName = "WorthlessVariable"
            });
    }

    public AnalyticDataPoint GetAnalyticsData(string profileId, string[] dimensions, string[] metrics, DateTime startDate, DateTime endDate)
    {
        AnalyticDataPoint data = new AnalyticDataPoint();
        if (!profileId.Contains("ga:"))
            profileId = string.Format("ga:{0}", profileId);

        //Make initial call to service.
        //Then check if a next link exists in the response,
        //if so parse and call again using start index param.
        GaData response = null;
        do
        {
            int startIndex = 1;
            if (response != null && !string.IsNullOrEmpty(response.NextLink))
            {
                Uri uri = new Uri(response.NextLink);
                var paramerters = uri.Query.Split('&');
                string s = paramerters.First(i => i.Contains("start-index")).Split('=')[1];
                startIndex = int.Parse(s);
            }

            var request = BuildAnalyticRequest(profileId, dimensions, metrics, startDate, endDate, startIndex);
            response = request.Execute();
            data.ColumnHeaders = response.ColumnHeaders;
            data.Rows.AddRange(response.Rows);

        } while (!string.IsNullOrEmpty(response.NextLink));

        return data;
    }

    private DataResource.GaResource.GetRequest BuildAnalyticRequest(string profileId, string[] dimensions, string[] metrics,
                                                                        DateTime startDate, DateTime endDate, int startIndex)
    {
        DataResource.GaResource.GetRequest request = Service.Data.Ga.Get(profileId, startDate.ToString("yyyy-MM-dd"),
                                                                            endDate.ToString("yyyy-MM-dd"), string.Join(",", metrics));
        request.Dimensions = string.Join(",", dimensions);
        request.StartIndex = startIndex;
        return request;
    }

    public IList<Profile> GetAvailableProfiles()
    {
        var response = Service.Management.Profiles.List("~all", "~all").Execute();
        return response.Items;
    }

    public class AnalyticDataPoint
    {
        public AnalyticDataPoint()
        {
            Rows = new List<IList<string>>();
        }

        public IList<GaData.ColumnHeadersData> ColumnHeaders { get; set; }
        public List<IList<string>> Rows { get; set; }
    }
}

其他有用的链接:

分析API资源管理器-从Web查询API

Analytic API Explorer第2版-从Web查询API

尺寸和度量参考

希望这能帮助将来尝试这样做的人。

 类似资料:
  • 我正在编程。我想捕获并使用每一帧进行处理。视频流是根据协议从捕获的。我使用Vmax摄像机(型号:vx-1311FHB,支持)。我还使用库从以下URL捕获视频: rtsp://192.168.1.66:554/streaming/channels/1?transportmode=unicast&profile=profile_1 但我看不到卡默拉的任何回应或影像。 我在VLC媒体播放器上测试这个ur

  • 我正在使用thymeleaf和spring 3 mvc。当我尝试执行Ajax POST请求时,我不明白如何在html页面上显示来自控制器的响应消息: 这是一个代码片段: “响应”是来自控制器的i18n消息。现在,我想在使用thymeleaf(th:text=“response”)时显示这条消息。当然,这段代码不起作用,因为它认为响应变量是一个普通字符串。 问题是如何使用thymeleaf显示国际化

  • 我想在JavaFX上发出这样的错误消息。我该怎么做?

  • 图 7.1:本节实现的用户资料页面构思图 本节要实现的用户资料页面是完整页面的一小部分,只显示用户的名字和头像,构思图如图 7.1 所示。[1] 最终完成的用户资料页面会显示用户的头像、基本信息和微博列表,构思图如图 7.2 所示。[2](在图 7.2 中,我们第一次用到了“lorem ipsum”占位文字,这些文字背后的故事很有意思,有空的话你可以了解一下。)这个资料页面会和整个演示应用一起在第

  • 问题内容: 我正在尝试显示一个ProgressBar。 我是Android初学者。 当我按下按钮时,任务应该在后台运行,但是它不会显示ProgressBar。 怎么了 我不明白。 请帮我! 主要活动: 我的任务: 问题答案: 您没有调用的方法。

  • 我第一次使用Glide在ImageView中显示GIF。我已经按照几个站点的方式对其进行了编码。但它不起作用。我已经给出了以下所有代码:(如果我弄错了什么,请告诉我) 项目级build.gradle 应用程序级构建。gradle文件: activity_main.xml 活动Java代码: 单击“提交”按钮后,我没有看到GIF图像。