示例#1
0
 public void Method1(GARequestConfig requestConfig)
 {
     GAApiHelper helper = ClassFactory.Get <GAApiHelper>(
         new ConstructorArgument("userConnection", UserConnection)
         );
     DataTable result = helper.GetData(requestConfig);
 }
示例#2
0
        public DataTable GetData(GARequestConfig requestConfig)
        {
            var reportRequest = requestConfig.CreateReportRequest();
            GetReportsRequest requestContainer = new GetReportsRequest
            {
                ReportRequests = new List <ReportRequest> {
                    reportRequest
                }
            };
            DataTable dt = new DataTable();

            foreach (var dimension in reportRequest.Dimensions)
            {
                dt.Columns.Add(dimension.Name);
            }

            foreach (var metric in reportRequest.Metrics)
            {
                dt.Columns.Add(metric.Alias ?? metric.Expression);
            }

            while (requestContainer.ReportRequests.Count > 0)
            {
                GetReportsResponse response = AnalyticsService.Reports.BatchGet(requestContainer).Execute();
                requestContainer.ReportRequests = new List <ReportRequest>();
                foreach (Report report in response.Reports)
                {
                    var dimensionHeaders = report.ColumnHeader.Dimensions;
                    var metricHeaders    = report.ColumnHeader.MetricHeader.MetricHeaderEntries;

                    foreach (ReportRow row in report.Data.Rows)
                    {
                        var dimensionValues = row.Dimensions;
                        var metricValues    = row.Metrics;
                        var dataRow         = dt.NewRow();

                        for (int i = 0; i < dimensionHeaders.Count && i < dimensionValues.Count; i++)
                        {
                            dataRow[dimensionHeaders[i]] = dimensionValues[i];
                        }

                        for (int l = 0; l < metricValues.Count; l++)
                        {
                            DateRangeValues values = metricValues[l];
                            for (int i = 0; i < values.Values.Count && i < metricHeaders.Count; i++)
                            {
                                dataRow[metricHeaders[i].Name] = values.Values[i];
                            }
                        }

                        dt.Rows.Add(dataRow);
                    }

                    if (!String.IsNullOrEmpty(report.NextPageToken))
                    {
                        requestConfig.NextPageToken = report.NextPageToken;
                        requestContainer.ReportRequests.Add(requestConfig.CreateReportRequest());
                    }
                }
            }
            return(dt);
        }