Как отладить AnalyticsReporting V4? - PullRequest
0 голосов
/ 17 января 2019

Я пытаюсь отладить этот код, чтобы выяснить, где он дает ошибку, но не могу это сделать.

Я не уверен, должно ли viewId быть просто int или ga:<viewId>, я пробовал оба способа и все еще получаю нулевые данные.

List<Report>.Data всегда возвращает ноль.

Код:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using Google.Apis.Analytics.v3;
using Google.Apis.Analytics.v3.Data;
using Google.Apis.Services;
using Google.Apis.AnalyticsReporting.v4;
using Google.Apis.AnalyticsReporting.v4.Data;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Util;
using Google.Apis.Logging;

public class GoogleAnalyticsApi
{
    private const string keyPath = @"<JsonFileAbsolutePath>";
    private string accountEmailAddress = "googleaccount@mail";
    private string keyPassword = "<secret>";
    private string viewId;
    public AnalyticsService Service { get; set; }
    private AnalyticsReportingService gaService;

    public GoogleAnalyticsApi(string viewId)
    {
        try
        {
            var logger = new ConsoleLogger(LogLevel.Error);
            GoogleCredential credentials;
            using (var stream = new FileStream(keyPath, FileMode.Open, FileAccess.Read))
            {

                string[] scopes = {AnalyticsReportingService.Scope.AnalyticsReadonly};
                var googleCredential = GoogleCredential.FromStream(stream);
                credentials = googleCredential.CreateScoped(scopes).ThrowIfNull("");

            }

            this.gaService = new AnalyticsReportingService(
                new BaseClientService.Initializer
                {
                    ApplicationName = "Testing",
                    HttpClientInitializer = credentials
                });
        }
        catch (Exception e)
        {
            throw new Exception("Can't start Google service.");
        }

        this.viewId = viewId;
    }

    public IList<Report> GetReports(DateRange dateRange, List<Metric> metrics, List<Dimension> dimensions, string filters = null, List<OrderBy> orderBys = null)
    {
        var reportRequest = new ReportRequest
        {
            DateRanges = new List<DateRange> { dateRange },
            Dimensions = dimensions,
            Metrics = metrics,
            FiltersExpression = filters,
            ViewId = this.viewId,
            OrderBys = orderBys
        };

        var getReportsRequest = new GetReportsRequest
        {

            ReportRequests = new List<ReportRequest> { reportRequest }
        };
        ReportsResource.BatchGetRequest batchRequest = this.gaService.Reports.BatchGet(getReportsRequest);
        GetReportsResponse resp = batchRequest.Execute();
        return resp.Reports;
    }

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

Категория, которую я пытаюсь отфильтровать, существует, и если я попытаюсь использовать эти точные метрики, измерения и фильтры по адресу: https://ga -dev-tools.appspot.com / query-explorer / # report -end все работает просто отлично.

И я звоню с этого контроллера:



    private void Test(HttpContext ctx)
    {
        var dateRange = new DateRange
        {
            StartDate = "2018-01-01",
            EndDate = "2018-02-01"
        };
        List<Metric> metrics = GenerateMetricsListFromStrings(new ArrayList()
        {
            "ga:pageviews",
            "ga:totalEvents",
            "ga:pageviewsPerSession",
            "ga:users",
            "ga:sessions"
        });
        List<Dimension> dimensions = GenerateDimensionsListFromStrings(new ArrayList()
        {
            "ga:browser",
            "ga:operatingSystem",
            "ga:country",
            "ga:hour",
            "ga:date"
        });
        string filters = "ga:eventCategory==Test";
        IList<Report> data = this.ga.GetReports(dateRange, metrics, dimensions, filters);
        foreach (var item in data.First().Data.Rows)
        {
            ctx.Response.Write(
                String.Join(", ", item.Dimensions) + " " + String.Join(", ", item.Metrics.First().Values)
            );
        }
    }

    /**
     * ...
     */
    private List<Metric> GenerateMetricsListFromStrings(ArrayList metrics)
    {
        List<Metric> metrictsList = new List<Metric>();
        foreach (string metric in metrics)
        {
            metrictsList.Add(new Metric()
            {
                Expression = metric
            });
        }

        return metrictsList;
    }

    /**
     * ...
     */
    private List<Dimension> GenerateDimensionsListFromStrings(ArrayList dimensions)
    {
        List<Dimension> dimensionsList = new List<Dimension>();
        foreach (string dim in dimensions)
        {
            dimensionsList.Add(new Dimension()
            {
                Name =  dim
            });
        }

        return dimensionsList;
    }

Спасибо.

1 Ответ

0 голосов
/ 18 января 2019

Боже, я ошибся с датой ...

Я пытался получить данные с 2018 года, а не с этого года ...


        var dateRange = new DateRange
        {
            StartDate = "2018-01-01",
            EndDate = "2019-02-01"
        };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...