コード例 #1
0
 public static AnalyticsDataResponse GetData(this AnalyticsEndpoint endpoint, string profileId, DateTime startDate, DateTime endDate, string[] metrics, string[] dimensions, string[] filters, string[] sort)
 {
     return(AnalyticsDataResponse.ParseJson(endpoint.Service.Client.Analytics.GetData(profileId, startDate, endDate, metrics, dimensions, filters, sort)));
 }
コード例 #2
0
 internal AnalyticsDataEndpoint(AnalyticsEndpoint analytics) {
     Analytics = analytics;
 }
コード例 #3
0
        private object GetHistory(AnalyticsEndpoint analytics, string profileId, IPublishedContent content, AnalyticsDataMode mode, Period period)
        {
            // Declare the options for the request
            AnalyticsGetDataOptions options = new AnalyticsGetDataOptions {
                ProfileId  = profileId,
                StartDate  = period.StartDate,
                EndDate    = period.EndDate,
                Metrics    = AnalyticsMetrics.Sessions + AnalyticsMetrics.Pageviews,
                Dimensions = AnalyticsDimensions.Hour
            };

            if (mode == AnalyticsDataMode.Page)
            {
                // Google Analytics sees the same URL with and without a trailing slash as two different pages, so we should tell the query to check both
                string pageUrlTrimmed = content.Url.TrimEnd('/');
                string pageUrlSlashed = pageUrlTrimmed + '/';

                options.Filters.Add(new AnalyticsDimensionFilter(AnalyticsDimensions.PagePath, AnalyticsDimensionOperator.ExactMatch, pageUrlTrimmed));
                options.Filters.Add(new AnalyticsDimensionFilter(AnalyticsDimensions.PagePath, AnalyticsDimensionOperator.ExactMatch, pageUrlSlashed));
            }

            // Determine the dimension based on the length of the period
            if (period.Days <= 1)
            {
                options.Dimensions = AnalyticsDimensions.Hour;
            }
            else if (period.Days <= 31)
            {
                options.Dimensions = AnalyticsDimensions.Date;
            }
            else
            {
                options.Dimensions = AnalyticsDimensions.YearWeek;
            }

            // Get the data from the Analytics API
            AnalyticsGetDataResponse response = analytics.Data.GetData(options);

            // Return an empty model if there are no valid rows
            if (response.Body.Rows.All(x => x.GetInt32(AnalyticsMetrics.Sessions) == 0))
            {
                return(new AnalyticsHistory());
            }

            // Initialize the data sets
            ChartJsDataSet pageviews = new ChartJsDataSet("Pageviews", "#F1BFBD");
            ChartJsDataSet sessions  = new ChartJsDataSet("Sessions", "#1D274E");

            // Initialize the chart data
            ChartJsData chart = new ChartJsData {
                DataSets = new List <ChartJsDataSet> {
                    pageviews, sessions
                }
            };

            // Populate the labels and data of each data set
            foreach (AnalyticsDataRow row in response.Body.Rows)
            {
                if (row.TryGetValue(AnalyticsDimensions.Date, out string date))
                {
                    DateTime dt = DateTime.ParseExact(date, "yyyyMMdd", CultureInfo.InvariantCulture);
                    chart.Labels.Add(dt.ToString("MMM d"));
                }
                else if (row.TryGetValue(AnalyticsDimensions.Hour, out string hour))
                {
                    chart.Labels.Add(hour);
                }
                else if (row.TryGetValue(AnalyticsDimensions.YearWeek, out string yearWeek))
                {
                    chart.Labels.Add("W" + Int32.Parse(yearWeek.Substring(4)));
                }
                else
                {
                    chart.Labels.Add(row.Cells[0].Value);
                }

                chart.Rows.Add(row);

                pageviews.Data.Add(row.GetString(AnalyticsMetrics.Pageviews));
                sessions.Data.Add(row.GetString(AnalyticsMetrics.Sessions));
            }

            return(new AnalyticsHistory {
                Chart = chart
            });
        }
コード例 #4
0
 internal AnalyticsManagementEndpoint(AnalyticsEndpoint analytics) {
     Analytics = analytics;
 }
コード例 #5
0
        public async Task <bool> PutAnalyticAsync(Guid id, EditAnalyticCommand command)
        {
            var response = await this._httpClient.PutAsJsonAsync(AnalyticsEndpoint.Update(id), command);

            return(response.IsSuccessStatusCode);
        }