Пример #1
0
 /// <summary>
 /// Gets historical data based on the specified <paramref name="options"/>.
 /// </summary>
 /// <param name="options">The options for the request to the API.</param>
 /// <returns>An instance of <see cref="AnalyticsGetDataResponse"/> representing the response.</returns>
 public AnalyticsGetDataResponse GetData(AnalyticsGetDataOptions options)
 {
     if (options == null)
     {
         throw new ArgumentNullException(nameof(options));
     }
     return(AnalyticsGetDataResponse.ParseResponse(Raw.GetData(options)));
 }
 /// <summary>
 /// Gets historical data based on the specified <paramref name="options"/>.
 /// </summary>
 /// <param name="options">The options for the call to the API.</param>
 /// <returns>An instance of <see cref="IHttpResponse"/> representing the response.</returns>
 public IHttpResponse GetData(AnalyticsGetDataOptions options)
 {
     if (options == null)
     {
         throw new ArgumentNullException(nameof(options));
     }
     return(Client.GetResponse(options));
 }
Пример #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
            });
        }