示例#1
0
        public IEnumerable <AnalyticsReport> GetAnalyticsReport()
        {
            var service = new AnalyticsReportingService(new AnalyticsReportingService.Initializer()
            {
                HttpClientInitializer = _credential,
                ApplicationName       = "app",
            });

            var request = new GetReportsRequest
            {
                ReportRequests = new[] {
                    new ReportRequest
                    {
                        ViewId  = _viewId,
                        Metrics = new[] { new Metric {
                                              Expression = "ga:pageviews"
                                          } },
                        Dimensions = new[] { new Dimension {
                                                 Name = "ga:pagePath"
                                             } },
                        DateRanges = new[] { new DateRange {
                                                 StartDate = "2018-04-01", EndDate = "today"
                                             } },
                        OrderBys = new [] { new OrderBy {
                                                FieldName = "ga:pageviews", SortOrder = "DESCENDING"
                                            } }
                    }
                }
            };

            var batchRequest = service.Reports.BatchGet(request);
            var response     = batchRequest.Execute();

            return(response.Reports[0].Data.Rows.Select(x => new AnalyticsReport()
            {
                Dimensions = x.Dimensions[0], Views = x.Metrics[0].Values[0]
            }));
        }
示例#2
0
        public async Task <IEnumerable <SendReportBody> > GetReports(Guid?jobId = null)
        {
            if (LOG.IsEnabled(LogLevel.Trace))
            {
                LOG.LogTrace(nameof(GetReports));
            }

            AssertInit();

            var serverConfig = Configuration.ReportServer;

            AssertServerConfig(serverConfig);

            var dscRequ = new GetReportsRequest
            {
                AgentId = Configuration.AgentId,
                JobId   = jobId,
            };

            if (jobId == null)
            {
                var dscResp = new GetReportsAllResponse();

                await SendDscAsync(serverConfig, GetReportsRequest.VERB,
                                   GetReportsRequest.ROUTE_ALL, dscRequ, dscResp);

                return(dscResp.Body.Value);
            }
            else
            {
                var dscResp = new GetReportsSingleResponse();

                await SendDscAsync(serverConfig, GetReportsRequest.VERB,
                                   GetReportsRequest.ROUTE_SINGLE, dscRequ, dscResp);

                return(new[] { dscResp.Body });
            }
        }
示例#3
0
        public IActionResult GetReportsAll(GetReportsRequest input)
        {
            if (_logger.IsEnabled(LogLevel.Trace))
            {
                _logger.LogTrace($"{nameof(GetReportsAll)}:  {GetReportsRequest.VERB}");
            }

            if (ModelState.IsValid)
            {
                _logger.LogDebug($"AgentId=[{input.AgentId}]");
                var sr = _dscHandler.GetReports(input.AgentId.Value, null);

                return(this.Model(new GetReportsAllResponse
                {
                    Body = new Model.GetReportsAllResponseBody
                    {
                        Value = sr,
                    },
                }));
            }

            return(BadRequest(ModelState));
        }
示例#4
0
        public void GetGoogleReport(string viewIds, string apiQuery, DateTime startDate, DateTime endDate, string tempFileLocation, string localFilePath)
        {
            try
            {
                if (svc == null)
                {
                    throw new Exception("No service available");
                }

                var headers = new List <string>();

                foreach (var viewId in viewIds.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
                {
                    string pageToken  = "";
                    var    allResults = new List <Report>();
                    while (pageToken != null)
                    {
                        // pageToken = null;
                        var       request   = new ReportRequest();
                        var       firstDate = startDate.ToString("yyyy-MM-dd");
                        var       lastDate  = endDate.ToString("yyyy-MM-dd");
                        DateRange dateRange = new DateRange()
                        {
                            StartDate = firstDate, EndDate = lastDate
                        };
                        request.DateRanges = new List <DateRange>()
                        {
                            dateRange
                        };
                        request.PageSize      = 10000;
                        request.SamplingLevel = "LARGE";
                        request.ViewId        = "ga:" + viewId;
                        request.Metrics       = GetMetrics(apiQuery);
                        request.Dimensions    = GetDimensions(apiQuery);
                        request.PageToken     = pageToken == "" ? null : pageToken; // send null for 1st request
                                                                                    // get the report
                        var body = new GetReportsRequest();
                        body.ReportRequests = new List <ReportRequest>()
                        {
                            request
                        };

                        var reports = svc.Reports.BatchGet(body).Execute();
                        Thread.Sleep(1000);
                        if (reports?.Reports?[0]?.Data?.RowCount != null)
                        {
                            allResults.AddRange(reports.Reports);
                            pageToken = reports.Reports[0].NextPageToken;
                            reports   = null;
                        }
                        else
                        {
                            pageToken = null;
                        }
                    }
                    if (allResults.Count > 0)
                    {
                        var apiResults = new ReportsTable(allResults, viewId);
                        headers = apiResults.Headers;
                        // add the report to the file
                        AddToTempFile(apiResults, tempFileLocation);
                        allResults = null;
                        apiResults = null;
                    }
                }

                MergeTempFileToFile(localFilePath, tempFileLocation, headers);
            }
            catch (Exception ex)
            {
                // error ocurred
                errorCount++;
                // remove tempfile
                File.Delete(tempFileLocation);
                // try again
                if (errorCount < 10)
                {
                    Thread.Sleep(1000);
                    GetGoogleReport(viewIds, apiQuery, startDate, endDate, tempFileLocation, localFilePath);
                }
            }
            finally
            {
                svc.Dispose();
            }
        }
        public List <KeywordResult> ReadKeywords()
        {
            var response = new GetReportsResponse();
            var serviceAccountCredentialFilePath = Path.GetFullPath("Secret.json");

            try
            {
                if (string.IsNullOrEmpty(serviceAccountCredentialFilePath))
                {
                    throw new Exception("Path to the service account credentials file is required.");
                }
                if (!File.Exists(serviceAccountCredentialFilePath))
                {
                    throw new Exception("The service account credentials file does not exist at: " + serviceAccountCredentialFilePath);
                }
                if (string.IsNullOrEmpty(ConfigurationManager.AppSettings["GoogleServiceAccount"]))
                {
                    throw new Exception("ServiceAccountEmail is required.");
                }

                // These are the scopes of permissions you need. It is best to request only what you need and not all of them
                string[] scopes = new string[] { AnalyticsReportingService.Scope.Analytics };             // View your Google Analytics data

                // For Json file
                if (Path.GetExtension(serviceAccountCredentialFilePath).ToLower() == ".json")
                {
                    GoogleCredential credential;
                    using (var stream = new FileStream(serviceAccountCredentialFilePath, FileMode.Open, FileAccess.Read))
                    {
                        credential = GoogleCredential.FromStream(stream)
                                     .CreateScoped(scopes);
                    }
                    // Create the  Analytics service.
                    using (var svc = new AnalyticsReportingService(new BaseClientService.Initializer()
                    {
                        HttpClientInitializer = credential,
                        ApplicationName = "AnalyticsReporting Service account Authentication"
                    }))
                    {
                        var dateRange = new DateRange
                        {
                            StartDate = DateTime.Now.AddDays(-30).ToString("yyyy-MM-dd"),
                            EndDate   = DateTime.Now.ToString("yyyy-MM-dd"),
                        };
                        var pageviews = new Metric
                        {
                            Expression = "ga:pageviews",
                            Alias      = "Pageviews"
                        };
                        var searchKeyword = new Dimension {
                            Name = "ga:searchKeyword"
                        };
                        var orderBy = new OrderBy {
                            FieldName = "ga:pageviews"
                        };

                        var reportRequest = new ReportRequest
                        {
                            DateRanges = new List <DateRange> {
                                dateRange
                            },
                            Dimensions = new List <Dimension> {
                                searchKeyword
                            },
                            Metrics = new List <Metric> {
                                pageviews
                            },
                            PageSize = 10000,
                            OrderBys = new List <OrderBy> {
                                orderBy
                            },
                            ViewId = ConfigurationManager.AppSettings["GoogleAnalyticsProfileId"]
                        };
                        var getReportsRequest = new GetReportsRequest
                        {
                            ReportRequests = new List <ReportRequest> {
                                reportRequest
                            }
                        };
                        var batchRequest = svc.Reports.BatchGet(getReportsRequest);
                        response = batchRequest.Execute();
                    }
                }
                else
                {
                    throw new Exception("Unsupported Service account credentials.");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Create service account AnalyticsReportingService failed " + ex.Message);
                throw new Exception("CreateServiceAccountAnalyticsReportingFailed ", ex);
            }
            return(GoogleDataFeedToRemoveDuplicatesOrBadWords(response));
        }
        public virtual async Task <GoogleAnalyticsResult> GetDataByDevice(DateTime startDate, DateTime endDate)
        {
            if (await _analyticsReportingService() == null)
            {
                return(ReturnEmpty());
            }
            IList <DateRange> dateRanges = new List <DateRange>();

            dateRanges.Add(new DateRange()
            {
                StartDate = startDate.ToString("yyyy-MM-dd"), EndDate = endDate.ToString("yyyy-MM-dd")
            });

            //Metric
            IList <Metric> metrics = new List <Metric>();

            metrics.Add(new Metric()
            {
                Expression = "ga:users", Alias = "Users"
            });
            metrics.Add(new Metric()
            {
                Expression = "ga:newUsers", Alias = "Unique users"
            });
            metrics.Add(new Metric()
            {
                Expression = "ga:pageviews", Alias = "Views"
            });

            //Dimension
            IList <Dimension> dimensions = new List <Dimension>();

            //dimensions.Add(new Dimension() { Name = "ga:browser" });
            dimensions.Add(new Dimension()
            {
                Name = "ga:mobileDeviceInfo"
            });

            //OrderBy
            IList <OrderBy> orderBys = new List <OrderBy>();

            orderBys.Add(new OrderBy()
            {
                FieldName = "ga:pageviews", SortOrder = "DESCENDING", OrderType = "VALUE"
            });

            //final assembling
            var request = new ReportRequest()
            {
                ViewId     = _googleAnalyticsSettings.gaviewID,
                DateRanges = dateRanges,
                Metrics    = metrics,
                Dimensions = dimensions,
                OrderBys   = orderBys
            };

            var requests = new List <ReportRequest>();

            requests.Add(request);

            var reportsRequest = new GetReportsRequest();

            reportsRequest.ReportRequests = requests;

            var response = await(await _analyticsReportingService()).Reports.BatchGet(reportsRequest).ExecuteAsync();

            return(ParseResponse(response, startDate, endDate));
        }
        /// <summary>
        /// Fetches all required reports from Google Analytics
        /// </summary>
        /// <param name="reportRequests"></param>
        /// <returns></returns>
        private static GetReportsResponse GetReport(GetReportsRequest getReportsRequest, string jsonCredential)
        {
            var analyticsService = GetAnalyticsReportingServiceInstance(jsonCredential);

            return(analyticsService.Reports.BatchGet(getReportsRequest).Execute());
        }
        public GCustomReport Get(GCustomReportInitializer initializer)
        {
            var credetials =
                (config.CredentialServiceAccountJsonPath != null) ?
                new GCommonCredentialManager <GServiceAccountFileCredentialReceiver, GServiceAccountFileCredentialInitializer>().Get(new GServiceAccountFileCredentialInitializer(config.CredentialServiceAccountJsonPath, GConstants.Scopes)):
                new GCommonCredentialManager <GRestUserCredentialReceiver, GRestUserCredentialInitializer>().Get(new GRestUserCredentialInitializer(config.CredentialUserAccountJsonPath, GConstants.Scopes));
            DateRange dateRange = new DateRange
            {
                StartDate = initializer.DateStart.ToString(GConstants.DateParamFormat),
                EndDate   = initializer.DateEnd.ToString(GConstants.DateParamFormat)
            };

            // Create the Metrics object.
            //Metric sessions = new Metric { Expression = "ga:sessions", Alias = "Sessions" };

            //Create the Dimensions object.
            //Dimension browser = new Dimension { Name = "ga:browser" };
            string nextPageToken = null;
            List <GetReportsResponse> responseList = new List <GetReportsResponse>();

            // Create the ReportRequest object.
            do
            {
                ReportRequest reportRequest = new ReportRequest
                {
                    ViewId           = initializer.View.Id,
                    PageToken        = nextPageToken,
                    IncludeEmptyRows = true,
                    DateRanges       = new List <DateRange>()
                    {
                        dateRange
                    },
                    Dimensions = initializer.Dimensions.Select(x => new Dimension {
                        Name = x.Name
                    }).ToList(),
                    Metrics = initializer.Metrics.Select(x => new Metric {
                        Expression = x.Name, Alias = x.Name
                    }).ToList()
                };

                List <ReportRequest> requests = new List <ReportRequest>
                {
                    reportRequest
                };

                // Create the GetReportsRequest object.
                GetReportsRequest getReport = new GetReportsRequest()
                {
                    ReportRequests = requests
                };

                // Call the batchGet method.
                AnalyticsReportingService s = new AnalyticsReportingService(new Google.Apis.Services.BaseClientService.Initializer {
                    HttpClientInitializer = credetials.GoogleCredential
                });
                GetReportsResponse response = s.Reports.BatchGet(getReport).Execute();
                responseList.Add(response);
                nextPageToken = response.Reports.FirstOrDefault().NextPageToken;
            }while (nextPageToken != null);

            GCustomReport customReport = new GCustomReport(initializer)
            {
                Rows = new List <CustomReportRow>()
            };

            foreach (var response in responseList)
            {
                var apiReport = response.Reports.FirstOrDefault();
                if (apiReport?.Data?.Rows != null)
                {
                    foreach (var row in apiReport.Data.Rows)
                    {
                        List <CustomReportCell> reportRowCells = new List <CustomReportCell>();
                        if (apiReport?.ColumnHeader?.Dimensions != null)
                        {
                            for (int i = 0; i < apiReport.ColumnHeader.Dimensions.Count; i++)
                            {
                                reportRowCells.Add(new GCustomDimensionValued(initializer.Dimensions.Where(x => x.Name == apiReport.ColumnHeader.Dimensions[i]).FirstOrDefault(), row.Dimensions[i]));
                            }
                        }
                        if (apiReport?.ColumnHeader?.MetricHeader != null)
                        {
                            for (int i = 0; i < apiReport.ColumnHeader.MetricHeader.MetricHeaderEntries.Count; i++)
                            {
                                reportRowCells.Add(new GCustomMetricValued(initializer.Metrics.Where(x => x.Name == apiReport.ColumnHeader.MetricHeader.MetricHeaderEntries[i].Name).FirstOrDefault(), row.Metrics.FirstOrDefault().Values[i]));
                            }
                        }
                        // reportRowCells.Add(new CustomReportCell(initializer.Columns[]))
                        customReport.Rows.Add(new CustomReportRow(reportRowCells));
                    }
                }
            }
            return(customReport);
        }
        public List <KeywordResult> ReadKeywords()
        {
            var response = new GetReportsResponse();

            try
            {
                var credential = GetCredential().Result;

                using (var svc = new AnalyticsReportingService(
                           new BaseClientService.Initializer
                {
                    HttpClientInitializer = credential,
                    ApplicationName = "Google Analytics API Console"
                }))
                {
                    var dateRange = new DateRange
                    {
                        StartDate = DateTime.Now.AddDays(-30).ToString("yyyy-MM-dd"),
                        EndDate   = DateTime.Now.ToString("yyyy-MM-dd"),
                    };
                    var pageviews = new Metric
                    {
                        Expression = "ga:pageviews",
                        Alias      = "Pageviews"
                    };
                    var searchKeyword = new Dimension {
                        Name = "ga:searchKeyword"
                    };
                    var orderBy = new OrderBy {
                        FieldName = "ga:pageviews"
                    };

                    var reportRequest = new ReportRequest
                    {
                        DateRanges = new List <DateRange> {
                            dateRange
                        },
                        Dimensions = new List <Dimension> {
                            searchKeyword
                        },
                        Metrics = new List <Metric> {
                            pageviews
                        },
                        PageSize = 10000,
                        OrderBys = new List <OrderBy> {
                            orderBy
                        },
                        ViewId = ConfigurationManager.AppSettings["GoogleAnalyticsProfileId"]
                    };
                    var getReportsRequest = new GetReportsRequest
                    {
                        ReportRequests = new List <ReportRequest> {
                            reportRequest
                        }
                    };
                    var batchRequest = svc.Reports.BatchGet(getReportsRequest);
                    response = batchRequest.Execute();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
            return(GoogleDataFeedToRemoveDuplicatesOrBadWords(response));
        }
        private GetReportsResponse QueryAnalyticsApi()
        {
            if (string.IsNullOrEmpty(_configs.GoogleConfigFilePath))
            {
                throw new Exception("google credentials config file path is not provided");
            }

            string json           = System.IO.File.ReadAllText(_configs.GoogleConfigFilePath);
            var    credentialsObj = JsonConvert.DeserializeObject <GoogleCredentialsModel>(json);

            var xCred = new ServiceAccountCredential(new ServiceAccountCredential.Initializer(credentialsObj.Client_email)
            {
                Scopes = new[] { AnalyticsReportingService.Scope.AnalyticsReadonly }
            }.FromPrivateKey(credentialsObj.Private_key));

            var baseClientInitializer = new BaseClientService.Initializer
            {
                HttpClientInitializer = xCred,
                ApplicationName       = _configs.ApplicationName
            };

            using (var svc = new AnalyticsReportingService(baseClientInitializer))
            {
                var pageViewsRequest = new ReportRequest
                {
                    ViewId     = _configs.ViewId,
                    Dimensions = new List <Dimension> {
                        new Dimension {
                            Name = "ga:pagePath"
                        }
                    },
                    Metrics = new List <Metric> {
                        new Metric {
                            Expression = "ga:pageviews", Alias = "PageViews"
                        }
                    },
                    OrderBys = new List <OrderBy> {
                        new OrderBy {
                            FieldName = "ga:pageviews", SortOrder = "descending"
                        }
                    },
                    HideValueRanges = true,
                };

                if (StartDate.HasValue && EndDate.HasValue)
                {
                    pageViewsRequest.DateRanges = new List <DateRange>()
                    {
                        new DateRange()
                        {
                            StartDate = StartDate.Value.ToString("yyyy-MM-dd"), EndDate = EndDate.Value.ToString("yyyy-MM-dd")
                        }
                    };
                }
                if (!string.IsNullOrEmpty(_configs.Filter))
                {
                    pageViewsRequest.FiltersExpression = $"ga:pagePath={_configs.Filter}";
                }
                if (_configs.PageSize != 0)
                {
                    pageViewsRequest.PageSize = _configs.PageSize;
                }

                // Create the GetReportsRequest object.
                GetReportsRequest getReport = new GetReportsRequest()
                {
                    ReportRequests = new List <ReportRequest>
                    {
                        pageViewsRequest
                    }
                };

                var response = svc.Reports.BatchGet(getReport).Execute();
                return(response);
            }
        }
示例#11
0
        public async Task <List <Dictionary <string, object> > > Read()
        {
            List <Dictionary <string, object> > result = new List <Dictionary <string, object> >();

            try
            {
                var credential = await CGoogleAnalyticsGetCredential.GetCredential(this.authDetails.UserName);

                using (var svc = new AnalyticsReportingService(
                           new BaseClientService.Initializer
                {
                    HttpClientInitializer = credential,
                    ApplicationName = "Google Analytics API Console"
                }))
                {
                    var dateRange = new DateRange
                    {
                        StartDate = from.ToString("yyyy-MM-dd"),
                        EndDate   = to.ToString("yyyy-MM-dd")
                    };


                    var reportRequest = new ReportRequest
                    {
                        DateRanges = new List <DateRange> {
                            dateRange
                        },
                        Dimensions = dimensions,
                        Metrics    = metrics,
                        ViewId     = authDetails.ViewId
                    };
                    var getReportsRequest = new GetReportsRequest
                    {
                        ReportRequests = new List <ReportRequest> {
                            reportRequest
                        }
                    };
                    var batchRequest = svc.Reports.BatchGet(getReportsRequest);
                    var response     = batchRequest.Execute();

                    if (response.Reports.First().Data.Rows == null)
                    {
                        return(null);
                    }

                    foreach (var x in response.Reports.First().Data.Rows)
                    {
                        Dictionary <string, object> row = new Dictionary <string, object>();

                        for (int i = 0; i < dimensions.Count; i++)
                        {
                            row.Add(dimensions[i].Name, x.Dimensions[i]);
                        }

                        result.Add(row);
                    }

                    return(result);
                }
            }
            catch (Exception ex)
            {
                return(null);
            }
        }
示例#12
0
        protected void Page_Load(object sender, EventArgs e)
        {
            string credFile, filePath, csvFile, fromDate, toDate;

            fromDate = Request.QueryString["fromDate"];
            toDate   = Request.QueryString["toDate"];

            if (string.IsNullOrEmpty(fromDate) || string.IsNullOrEmpty(toDate))
            {
                Response.Write("Date range not specified. Must be in format yyyy-mm-dd");
            }
            else
            {
                if (Request.IsLocal)
                {
                    filePath = "C:\\Projects\\lyonsplace\\website\\FrontEnd\\App_Data\\";
                    credFile = "bryanston.json";
                }
                else
                {
                    filePath = "D:\\websites\\lyonsplace\\live\\App_Data\\";
                    credFile = "lyonsplace.json";
                }

                csvFile = DateTime.Now.ToString("yyyyMMddHHmmss") + ".csv";

                try
                {
                    // These are the scopes of permissions you need. It is best to request only what you need and not all of them
                    string[] scopes = new string[] { AnalyticsReportingService.Scope.Analytics };                                 // View your Google Analytics data

                    GoogleCredential credential;
                    using (var stream = new FileStream(filePath + credFile, FileMode.Open, FileAccess.Read))
                    {
                        credential = GoogleCredential.FromStream(stream)
                                     .CreateScoped(scopes);
                    }

                    // Create the Analytics service.
                    AnalyticsReportingService svc = new AnalyticsReportingService(new BaseClientService.Initializer()
                    {
                        HttpClientInitializer = credential,
                        ApplicationName       = "Almacantar",
                    });

                    var dateRange = new DateRange
                    {
                        StartDate = fromDate,
                        EndDate   = toDate
                    };
                    var metric = new Metric
                    {
                        Expression = "ga:pageviews",
                        Alias      = "Sessions"
                    };

                    List <Dimension> dimensions = new List <Dimension>();
                    dimensions.Add(new Dimension {
                        Name = "ga:source"
                    });
                    dimensions.Add(new Dimension {
                        Name = "ga:medium"
                    });
                    dimensions.Add(new Dimension {
                        Name = "ga:adContent"
                    });
                    dimensions.Add(new Dimension {
                        Name = "ga:userAgeBracket"
                    });
                    dimensions.Add(new Dimension {
                        Name = "ga:userGender"
                    });
                    dimensions.Add(new Dimension {
                        Name = "ga:country"
                    });
                    dimensions.Add(new Dimension {
                        Name = "ga:language"
                    });
                    dimensions.Add(new Dimension {
                        Name = "ga:userType"
                    });

                    var reportRequest = new ReportRequest
                    {
                        Dimensions = dimensions,
                        Metrics    = new List <Metric> {
                            metric
                        },
                        ViewId = "150454507"                         //lyons place = 183611330, almacantar = "150454507"
                    };

                    var getReportsRequest = new GetReportsRequest
                    {
                        ReportRequests = new List <ReportRequest> {
                            reportRequest
                        }
                    };

                    var batchRequest = svc.Reports.BatchGet(getReportsRequest);
                    var response     = batchRequest.Execute();

                    StringBuilder sb = new StringBuilder();

                    // csv header
                    sb.Append("source,medium,adContent,age,gender,country,language,userType,pageViews" + Environment.NewLine);

                    foreach (var x in response.Reports.First().Data.Rows)
                    {
                        sb.Append(string.Join(",", x.Dimensions) + "," + string.Join(", ", x.Metrics.First().Values) + "<br/>");
                    }

                    Response.Write(sb.ToString());

                    #region write to file

                    /*
                     * StreamWriter sw = File.CreateText(filePath + csvFile);
                     * sw.WriteLine(sb.ToString());
                     * sw.Close();
                     *
                     * Response.ContentType = "text/csv";
                     * Response.AppendHeader("Content-Disposition", "attachment; filename=" + csvFile);
                     * Response.TransmitFile(filePath + csvFile);
                     * Response.End();
                     */
                    #endregion
                }
                catch (Exception ex)
                {
                }
            }
        }
        static async Task Main(string[] args)
        {
            // Instantiate the output delegates.
            HandelGetReportsResponse handlerConsole = WriteResponseToConsole;
            HandelGetReportsResponse handlerFile    = WriteResponseToFile;

            // Setup authentication.
            var scope      = new string[] { Google.Apis.AnalyticsReporting.v4.AnalyticsReportingService.Scope.AnalyticsReadonly };
            var credential = Oauth2Example.GetUserCredential(_credFileName, "user", scope);
            var serviceV4  = Oauth2Example.GetAnalyticsReportingService(credential);
            var serviceV3  = Oauth2Example.GetAnalyticsService(credential);

            // get views.
            var summeries = await serviceV3.Management.AccountSummaries.List().ExecuteAsync();

            foreach (var accountSummary in summeries.Items)
            {
                Console.WriteLine($"{accountSummary.Name}");
                foreach (var accountSummaryWebProperty in accountSummary.WebProperties)
                {
                    Console.WriteLine($"     {accountSummaryWebProperty.Name}");
                    foreach (var profileSummary in accountSummaryWebProperty.Profiles)
                    {
                        Console.WriteLine($"          {profileSummary.Name}: {profileSummary.Id }");
                    }
                }
            }

            string requestedView = string.Empty;

            do
            {
                Console.WriteLine($"Please select profile id");
                requestedView = Console.ReadLine();
            } while (!long.TryParse(requestedView, out _viewNumber));

            Console.WriteLine($"Requesting data for: {_viewNumber}");

            // Create the DateRange object.
            var dateRange = new DateRange()
            {
                StartDate = "2010-01-01", EndDate = "2019-01-01"
            };

            // Create the Metrics object.
            var dimensions = new List <Dimension>()
            {
                new Dimension {
                    Name = "ga:browser"
                },
                new Dimension {
                    Name = "ga:date"
                },
                new Dimension {
                    Name = "ga:userType"
                }
            };

            //Create the Dimensions object.
            var metrics = new List <Metric>()
            {
                new Metric {
                    Expression = "ga:sessions", Alias = "Sessions"
                },
                new Metric {
                    Expression = "ga:users", Alias = "Users"
                },
                new Metric {
                    Expression = "ga:newUsers", Alias = "New Users"
                }
            };

            // Create the ReportRequest object.
            var reportRequest = new ReportRequest
            {
                ViewId     = _viewNumber.ToString(),
                DateRanges = new List <DateRange>()
                {
                    dateRange
                },
                Dimensions = dimensions,
                Metrics    = metrics,
                PageSize   = _pageSize
            };

            var requests = new List <ReportRequest> {
                reportRequest
            };

            // Create the GetReportsRequest object.
            var getReport = new GetReportsRequest()
            {
                ReportRequests = requests
            };

            do
            {
                Console.WriteLine($"Requesting data for Pagetoken: {getReport.ReportRequests.FirstOrDefault().PageToken}");

                // Call the batchGet method.
                var response = await serviceV4.Reports.BatchGet(getReport).ExecuteAsync();

                getReport.ReportRequests.FirstOrDefault().PageToken = response.Reports.FirstOrDefault().NextPageToken;

                // Call the delegate.
                handlerConsole(response, null);
                handlerFile(response, new string[] { @".\GAOutPut" });
            } while (getReport.ReportRequests.FirstOrDefault().PageToken != null);


            Console.ReadLine();
        }
示例#14
0
        public IList <Report> GetReportMyNormal1()
        {
            var    credential = GetCredential();
            string today      = DateTime.Now.ToString("yyyy-MM-dd");
            string yesterday  = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd");

            var service = new AnalyticsReportingService(new AnalyticsReportingService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName       = "NoobowNotifier",
            });

            ;

            var request = new GetReportsRequest
            {
                ReportRequests = new[] {
                    new ReportRequest
                    {
                        ViewId  = this.viewId,
                        Metrics = new[] { new Metric {
                                              Expression = "ga:users"
                                          } },
                        Dimensions = new[] { new Dimension {
                                                 Name = "ga:date"
                                             } },
                        DateRanges = new[] { new DateRange {
                                                 StartDate = yesterday, EndDate = today
                                             } },
                    },
                    new ReportRequest
                    {
                        ViewId  = this.viewId,
                        Metrics = new[] { new Metric {
                                              Expression = "ga:sessions"
                                          } },
                        Dimensions = new[] { new Dimension {
                                                 Name = "ga:date"
                                             } },
                        DateRanges = new[] { new DateRange {
                                                 StartDate = yesterday, EndDate = today
                                             } },
                    },
                    new ReportRequest
                    {
                        ViewId  = this.viewId,
                        Metrics = new[] { new Metric {
                                              Expression = "ga:pageviews"
                                          } },
                        Dimensions = new[] { new Dimension {
                                                 Name = "ga:date"
                                             } },
                        DateRanges = new[] { new DateRange {
                                                 StartDate = yesterday, EndDate = today
                                             } },
                    }
                }
            };

            var batchRequest = service.Reports.BatchGet(request);

            return(batchRequest.Execute().Reports);
        }
        static void Main(string[] args)
        {
            UserCredential userCredential;

            userCredential = GetCredential();

            // Create AnalyticsReportingService API service.
            var service = new AnalyticsReportingService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = userCredential,
                ApplicationName       = config.APPLICATION_NAME,
            });

            // Create the DataRange Object
            DateRange dataRange = new DateRange()
            {
                StartDate = "2018-01-01", EndDate = "2018-03-07"
            };

            //Create the Metrics Object "ga:pageviews,ga:entrances"
            Metric sessions = new Metric {
                Expression = "ga:sessions", Alias = "Session"
            };

            //Crate the Dimensions Object. "ga:date,ga:pagePath,ga:landingPagePath,ga:source"
            Dimension browser = new Dimension {
                Name = "ga:browser"
            };

            //Create the ReportRequest Object
            ReportRequest reportRequest = new ReportRequest
            {
                ViewId     = config.VIEW_ID,
                DateRanges = new List <DateRange>()
                {
                    dataRange
                },
                Dimensions = new List <Dimension>()
                {
                    browser
                },
                Metrics = new List <Metric>()
                {
                    sessions
                }
            };

            List <ReportRequest> requests = new List <ReportRequest>();

            requests.Add(reportRequest);

            //Create the GetReportsRequest object
            GetReportsRequest getReport = new GetReportsRequest()
            {
                ReportRequests = requests
            };

            //Call the batchGet Method
            GetReportsResponse response = service.Reports.BatchGet(getReport).Execute();

            printResults(response.Reports);
            //writeResultsToFile();
        }
        public async Task <IActionResult> GoogleAnalyticsReport([FromServices] IGoogleAuthProvider auth, [FromServices] ClientInfo clientInfo, long ViewId)
        {
            var cred = await auth.GetCredentialAsync();

            var service = new AnalyticsReportingService(new BaseClientService.Initializer
            {
                HttpClientInitializer = cred
            });

            var dateRange = new DateRange()
            {
                StartDate = "2018-06-01", EndDate = "2019-01-01"
            };

            // Create the Metrics object.
            var dimensions = new List <Dimension>()
            {
                new Dimension {
                    Name = "ga:browser"
                },
                new Dimension {
                    Name = "ga:date"
                },
                new Dimension {
                    Name = "ga:userType"
                }
            };

            //Create the Dimensions object.
            var metrics = new List <Metric>()
            {
                new Metric {
                    Expression = "ga:sessions", Alias = "Sessions"
                },
                new Metric {
                    Expression = "ga:users", Alias = "Users"
                },
                new Metric {
                    Expression = "ga:newUsers", Alias = "New Users"
                }
            };

            // Create the ReportRequest object.
            var reportRequest = new ReportRequest
            {
                ViewId     = ViewId.ToString(),
                DateRanges = new List <DateRange>()
                {
                    dateRange
                },
                Dimensions = dimensions,
                Metrics    = metrics,
                PageSize   = 10000
            };

            var requests = new List <ReportRequest> {
                reportRequest
            };

            // Create the GetReportsRequest object.
            var getReport = new GetReportsRequest()
            {
                ReportRequests = requests
            };

            var rows = new List <ReportRow>();

            try
            {
                do
                {
                    Console.WriteLine($"Requesting data for Pagetoken: {getReport.ReportRequests.FirstOrDefault().PageToken}");

                    // Call the batchGet method.
                    var response = service.Reports.BatchGet(getReport).Execute();

                    rows.AddRange(response.Reports.FirstOrDefault().Data.Rows);

                    getReport.ReportRequests.FirstOrDefault().PageToken = response.Reports.FirstOrDefault().NextPageToken;
                } while (getReport.ReportRequests.FirstOrDefault().PageToken != null);

                return(View(new ReportResponseModel {
                    Rows = rows
                }));
            }
            catch (Exception)
            {
                return(RedirectToAction("Logout"));
            }
        }
        public GoogleAnalyticsResult GetDataByLocalization(DateTime startDate, DateTime endDate)
        {
            if (_analyticsReportingService == null)
            {
                return(ReturnEmpty());
            }

            IList <DateRange> dateRanges = new List <DateRange>();

            dateRanges.Add(new DateRange()
            {
                StartDate = startDate.ToString("yyyy-MM-dd"), EndDate = endDate.ToString("yyyy-MM-dd")
            });

            //Metric
            IList <Metric> metrics = new List <Metric>();

            metrics.Add(new Metric()
            {
                Expression = "ga:users", Alias = "Users"
            });
            metrics.Add(new Metric()
            {
                Expression = "ga:newUsers", Alias = "Unique users"
            });
            metrics.Add(new Metric()
            {
                Expression = "ga:pageviews", Alias = "Views"
            });

            //Dimension
            IList <Dimension> dimensions = new List <Dimension>();

            dimensions.Add(new Dimension()
            {
                Name = "ga:country"
            });
            dimensions.Add(new Dimension()
            {
                Name = "ga:city"
            });

            //OrderBy
            IList <OrderBy> orderBys = new List <OrderBy>();

            orderBys.Add(new OrderBy()
            {
                FieldName = "ga:pageviews", SortOrder = "DESCENDING", OrderType = "VALUE"
            });

            //ReportRequest - final assembling
            ReportRequest request = new ReportRequest()
            {
                ViewId     = _googleAnalyticsSettings.gaviewID,
                DateRanges = dateRanges,
                Metrics    = metrics,
                Dimensions = dimensions,
                OrderBys   = orderBys,
            };

            List <ReportRequest> requests = new List <ReportRequest>();

            requests.Add(request);

            GetReportsRequest reportsRequest = new GetReportsRequest();

            reportsRequest.ReportRequests = requests;

            var response = _analyticsReportingService.Reports.BatchGet(reportsRequest).Execute();

            return(ParseResponse(response, startDate, endDate));
        }
示例#18
0
        public static List <GoogleAnalyticsSearchResult> GetData(GoogleAnalyticsSearchParams param)
        {
            var credential = GetCredential(param.IsStageSite);

            using (var svc = new AnalyticsReportingService(
                       new BaseClientService.Initializer
            {
                HttpClientInitializer = credential,
                ApplicationName = "Google Analytics API Console",
            }))
            {
                var dateRange = new DateRange
                {
                    StartDate = param.FromDate.ToString("yyyy-MM-dd"),
                    EndDate   = param.ToDate.ToString("yyyy-MM-dd")
                };
                var sessions = new Metric
                {
                    Expression = "ga:sessions",
                    Alias      = "Sessions"
                };

                var reportRequest = new ReportRequest
                {
                    DateRanges = new List <DateRange> {
                        dateRange
                    },
                    Dimensions = param.GoogleAnalyticsDimensions,
                    Metrics    = new List <Metric> {
                        sessions
                    },
                    ViewId = param.ViewId
                };
                var getReportsRequest = new GetReportsRequest
                {
                    ReportRequests = new List <ReportRequest> {
                        reportRequest
                    }
                };
                var batchRequest = svc.Reports.BatchGet(getReportsRequest);
                var response     = batchRequest.Execute();
                var result       = new List <GoogleAnalyticsSearchResult>();

                if (response != null)
                {
                    var report = response.Reports.FirstOrDefault();

                    if (report != null && report.Data != null && report.Data.Rows != null && report.Data.Rows.Any())
                    {
                        foreach (var x in report.Data.Rows)
                        {
                            result.Add(new GoogleAnalyticsSearchResult
                            {
                                Dimensions = x.Dimensions,
                                Values     = x.Metrics.First().Values
                            });
                        }
                    }
                }

                return(result);
            }
        }
示例#19
0
        /// <summary>
        /// Async method to get the page vies of a certain subdirecoty within the webdictaat domain.
        /// Can be used to extract the page views for example a specific dictaat.
        /// </summary>
        /// <param name="subdirectory"></param>
        /// <returns></returns>
        public async Task <IList <PageView> > GetPageViews(string subdirectory, DateTime?start = null, DateTime?end = null)
        {
            //format filter paramters
            string dateFormat  = "yyyy-MM-dd";
            string startString = (start != null ? start : DateTime.Now.AddDays(-30)).Value.ToString(dateFormat);
            string endString   = (end != null ? end : DateTime.Now).Value.ToString(dateFormat);

            //required to make a valid connection
            var serviceInitializer = new BaseClientService.Initializer
            {
                HttpClientInitializer = _credential,
                ApplicationName       = "Google Analytics API Console"
            };


            using (var svc = new AnalyticsReportingService(serviceInitializer))
            {
                var reportRequest = new ReportRequest
                {
                    DimensionFilterClauses = new List <DimensionFilterClause> {
                        new DimensionFilterClause()
                        {
                            Filters = new List <DimensionFilter> {
                                new DimensionFilter()
                                {
                                    DimensionName = "ga:pagePath",
                                    Expressions   = new List <String> {
                                        String.Format("^/{0}", subdirectory)
                                    }
                                }
                            }
                        }
                    },
                    DateRanges = new List <DateRange> {
                        new DateRange()
                        {
                            StartDate = startString, EndDate = endString
                        }
                    },
                    Dimensions = new List <Dimension> {
                        new Dimension {
                            Name = "ga:pagePath"
                        }
                    },
                    Metrics = new List <Metric> {
                        new Metric {
                            Expression = "ga:pageViews"
                        }
                    },
                    ViewId = "168601841"
                };
                var getReportsRequest = new GetReportsRequest
                {
                    ReportRequests = new List <ReportRequest> {
                        reportRequest
                    }
                };
                var batchRequest = svc.Reports.BatchGet(getReportsRequest);
                var response     = batchRequest.Execute();

                var pageViews = new List <PageView>();
                var data_rows = response.Reports.First().Data.Rows;

                //no data found
                if (data_rows == null)
                {
                    return(pageViews);
                }

                //format data
                foreach (var x in data_rows)
                {
                    var pageUri = x.Dimensions.First().Split("#/").ElementAtOrDefault(1);

                    if (pageUri != null)
                    {
                        pageViews.Add(new PageView()
                        {
                            PageUri = pageUri,
                            Views   = string.Join(", ", x.Metrics.First().Values)
                        });
                    }
                }
                ;

                return(pageViews);
            }
        }
        public IActionResult Test(TestViewModel viewModel)
        {
            var filepath = "analytics-creds.json";  // path to the json file for the Service account
            GoogleCredential credentials;

            using (var stream = new FileStream(filepath, FileMode.Open, FileAccess.Read))
            {
                string[] scopes           = { AnalyticsReportingService.Scope.AnalyticsReadonly };
                var      googleCredential = GoogleCredential.FromStream(stream);
                credentials = googleCredential.CreateScoped(scopes);
            }

            var reportingService = new AnalyticsReportingService(
                new BaseClientService.Initializer
            {
                HttpClientInitializer = credentials
            });

            var dateRange = new DateRange
            {
                StartDate = viewModel.StartDate,
                EndDate   = viewModel.EndDate,
            };
            var sessions = new Metric
            {
                Expression = "ga:users",
                Alias      = "Sessions",
            };
            var date = new Dimension {
                Name = "ga:date"
            };

            var reportRequest = new ReportRequest
            {
                DateRanges = new List <DateRange> {
                    dateRange
                },
                Dimensions = new List <Dimension> {
                    date
                },
                Metrics = new List <Metric> {
                    sessions
                },
                ViewId = ViewId // your view id
            };

            var getReportsRequest = new GetReportsRequest
            {
                ReportRequests = new List <ReportRequest> {
                    reportRequest
                }
            };
            var batchRequest = reportingService.Reports.BatchGet(getReportsRequest);
            var response     = batchRequest.Execute();
            var responseText = new List <string>();

            foreach (var x in response.Reports.First().Data.Rows)
            {
                responseText.Add(string.Join(", ", x.Dimensions) + "   " + string.Join(", ", x.Metrics.First().Values));
            }

            return(RedirectToAction("Results", new { results = responseText }));
        }
        public IActionResult Index()
        {
            var dateRange = new DateRange()
            {
                StartDate = "2018-06-01", EndDate = "2019-01-01"
            };

            // Create the Metrics object.
            var dimensions = new List <Dimension>()
            {
                new Dimension {
                    Name = "ga:browser"
                },
                new Dimension {
                    Name = "ga:date"
                },
                new Dimension {
                    Name = "ga:userType"
                }
            };

            //Create the Dimensions object.
            var metrics = new List <Metric>()
            {
                new Metric {
                    Expression = "ga:sessions", Alias = "Sessions"
                },
                new Metric {
                    Expression = "ga:users", Alias = "Users"
                },
                new Metric {
                    Expression = "ga:newUsers", Alias = "New Users"
                }
            };

            // Create the ReportRequest object.
            var reportRequest = new ReportRequest
            {
                ViewId     = "78110423",
                DateRanges = new List <DateRange>()
                {
                    dateRange
                },
                Dimensions = dimensions,
                Metrics    = metrics,
                PageSize   = 10000
            };

            var requests = new List <ReportRequest> {
                reportRequest
            };

            // Create the GetReportsRequest object.
            var getReport = new GetReportsRequest()
            {
                ReportRequests = requests
            };

            var rows = new List <ReportRow>();

            do
            {
                Console.WriteLine($"Requesting data for Pagetoken: {getReport.ReportRequests.FirstOrDefault().PageToken}");

                // Call the batchGet method.
                var response = _service.Reports.BatchGet(getReport).Execute();

                rows.AddRange(response.Reports.FirstOrDefault().Data.Rows);

                getReport.ReportRequests.FirstOrDefault().PageToken = response.Reports.FirstOrDefault().NextPageToken;
            } while (getReport.ReportRequests.FirstOrDefault().PageToken != null);


            return(View(new ReportResponseModel {
                Rows = rows
            }));
        }
示例#22
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);
        }
示例#23
0
 /// <summary>
 /// Fetches all required reports from Google Analytics
 /// </summary>
 /// <param name="reportRequests"></param>
 /// <returns></returns>
 public static GetReportsResponse GetReport(GetReportsRequest getReportsRequest)
 {
     using var analyticsService = GetAnalyticsReportingServiceInstance(ConfigurationManager.AppSettings["KeyFileName"]);
     return(analyticsService.Reports.BatchGet(getReportsRequest).Execute());
 }
示例#24
0
        public IQueryable <ModelGAResult> GenerateData(string type, string START_DATE, string END_DATE)
        {
            string filepath = HttpContext.Current.Server.MapPath("~/App_Data/secret_key.json");

            #region Google Credentials
            GoogleCredential credential;
            using (var stream = new FileStream(filepath, FileMode.Open, FileAccess.Read))
            {
                string[] scopes           = { AnalyticsReportingService.Scope.AnalyticsReadonly };
                var      googleCredential = GoogleCredential.FromStream(stream);
                credential = googleCredential.CreateScoped(scopes);
            }
            #endregion

            SimulationGAResult resultList = new SimulationGAResult();
            // LOOP
            using (var svc = new AnalyticsReportingService(
                       new BaseClientService.Initializer
            {
                HttpClientInitializer = credential,
                ApplicationName = "Google Analytics Reporting API"
            }))
            {
                #region DateRange Report Analytics
                var dateRange = new DateRange
                {
                    StartDate = START_DATE,
                    EndDate   = END_DATE
                };
                #endregion

                #region Metric Collections
                var SessionMetric = new Metric
                {
                    Expression     = "ga:sessions",
                    Alias          = "Sessions",
                    FormattingType = "INTEGER"
                };
                var UserMetric = new Metric
                {
                    Expression     = "ga:users",
                    Alias          = "Users",
                    FormattingType = "INTEGER"
                };
                var BounceRateMetric = new Metric
                {
                    Expression     = "ga:bounceRate",
                    Alias          = "Bounce Rate",
                    FormattingType = "PERCENT"
                };
                var SessionDurationMetric = new Metric
                {
                    Expression     = "ga:sessionDuration",
                    Alias          = "Session Durations",
                    FormattingType = "TIME"
                };
                #endregion

                #region Dimension Result
                Dimension DateDimension = new Dimension {
                    Name = "ga:date"
                };
                Dimension BrowserDimension = new Dimension {
                    Name = "ga:browser"
                };
                #endregion

                #region Metric Use
                Metric usedMetric = new Metric();
                switch (type)
                {
                case "user":
                    usedMetric = UserMetric;
                    break;

                case "session":
                    usedMetric = SessionMetric;
                    break;

                case "bounce":
                    usedMetric = BounceRateMetric;
                    break;

                case "duration":
                    usedMetric = SessionDurationMetric;
                    break;
                }

                var reportRequest = new ReportRequest
                {
                    DateRanges = new List <DateRange> {
                        dateRange
                    },
                    Dimensions = new List <Dimension> {
                        DateDimension
                    },
                    Metrics = new List <Metric> {
                        usedMetric
                    },
                    ViewId = "173657940"
                };
                #endregion

                List <ReportRequest> requests = new List <ReportRequest>();
                requests.Add(reportRequest);

                // Create the GetReportsRequest object.
                GetReportsRequest getReport = new GetReportsRequest()
                {
                    ReportRequests = requests
                };

                // Call the batchGet method.
                GetReportsResponse response = null;
                response = svc.Reports.BatchGet(getReport).Execute();

                foreach (var item in response.Reports.First().Data.Rows)
                {
                    ModelGAResult    mdlres = new ModelGAResult();
                    List <PointType> points = new List <PointType>();
                    for (int index = 0; index < item.Dimensions.Count; index++)
                    {
                        string tmpDate = item.Dimensions[index];
                        string year    = tmpDate.Substring(0, 4);
                        string month   = tmpDate.Substring(4, 2);
                        string date    = tmpDate.Substring(6, 2);
                        mdlres.DIMENSION = year + "-" + month + "-" + date;
                        var MetricValues      = string.Join(",", item.Metrics.First().Values);
                        var MetricValuesArray = MetricValues.Split(',');
                        for (var metricIndex = 0; metricIndex < MetricValuesArray.Length; metricIndex++)
                        {
                            mdlres.VALUE = MetricValuesArray[0];
                        }
                    }
                    resultList.RESULTs.Add(mdlres);
                }
            }
            return(resultList.RESULTs.AsQueryable());
        }
        public virtual async Task <GoogleAnalyticsResult> GetDataByGeneral(DateTime startDate, DateTime endDate)
        {
            if (await _analyticsReportingService() == null)
            {
                return(ReturnEmpty());
            }

            // metrics and dimensions below are tailored to suit current needings
            //in case of needing to use different or more metrics or dimensions, see link below
            //https://developers.google.com/analytics/devguides/reporting/core/dimsmets
            //it would be nice just to pass metrics and dimensions to this method, but it will surely incerase complexity
            //and get rid of tidy and neat "fire-n-get" method that requires simple arguments


            //DateRange
            IList <DateRange> dateRanges = new List <DateRange>();

            dateRanges.Add(new DateRange()
            {
                StartDate = startDate.ToString("yyyy-MM-dd"), EndDate = endDate.ToString("yyyy-MM-dd")
            });

            //Metric
            IList <Metric> metrics = new List <Metric>();

            metrics.Add(new Metric()
            {
                Expression = "ga:users", Alias = "Users"
            });
            metrics.Add(new Metric()
            {
                Expression = "ga:newUsers", Alias = "Unique users"
            });
            metrics.Add(new Metric()
            {
                Expression = "ga:pageviews", Alias = "Views"
            });

            //Dimension
            IList <Dimension> dimensions = new List <Dimension>();

            dimensions.Add(new Dimension()
            {
                Name = "ga:userType"
            });

            //OrderBy
            IList <OrderBy> orderBys = new List <OrderBy>();

            orderBys.Add(new OrderBy()
            {
                FieldName = "ga:pageviews", SortOrder = "DESCENDING", OrderType = "VALUE"
            });

            //final assembling
            ReportRequest request = new ReportRequest()
            {
                ViewId     = _googleAnalyticsSettings.gaviewID,
                DateRanges = dateRanges,
                Metrics    = metrics,
                Dimensions = dimensions,
                OrderBys   = orderBys
            };

            List <ReportRequest> requests = new List <ReportRequest>();

            requests.Add(request);

            GetReportsRequest reportsRequest = new GetReportsRequest();

            reportsRequest.ReportRequests = requests;

            var response = await(await _analyticsReportingService()).Reports.BatchGet(reportsRequest).ExecuteAsync();

            return(ParseResponse(response, startDate, endDate));
        }
示例#26
0
        public IList <PageViewsViewModel> GetPageViews(string viewId, DateTime start, DateTime end)
        {
            var dateRange = new DateRange
            {
                StartDate = start.ToString("yyyy-MM-dd"),
                EndDate   = end.ToString("yyyy-MM-dd")
            };
            var sessions = new Metric
            {
                Expression = "ga:pageviews"
            };
            var date = new Dimension {
                Name = "ga:date"
            };

            var reportRequest = new ReportRequest
            {
                DateRanges = new List <DateRange> {
                    dateRange
                },
                Dimensions = new List <Dimension> {
                    date
                },
                Metrics = new List <Metric> {
                    sessions
                },
                ViewId = viewId
            };

            var getReportsRequest = new GetReportsRequest
            {
                ReportRequests = new List <ReportRequest> {
                    reportRequest
                }
            };
            var batchRequest = _reportingService.Reports.BatchGet(getReportsRequest);
            var response     = batchRequest.Execute();

            var pageViews = new List <PageViewsViewModel>();

            if (response.Reports.First().Data.Rows != null)
            {
                foreach (var x in response.Reports.First().Data.Rows)
                {
                    if (x.Dimensions.Count > 0 && x.Metrics.Count > 0)
                    {
                        pageViews.Add(new PageViewsViewModel
                        {
                            Date  = DateTime.ParseExact(x.Dimensions.First(), "yyyyMMdd", null),
                            Count = int.Parse(x.Metrics.First().Values.First())
                        });
                    }
                }
            }
            else
            {
                pageViews.Add(new PageViewsViewModel
                {
                    Date  = DateTime.Now.Date,
                    Count = 0
                });
            }

            return(pageViews);
        }
示例#27
0
        static void Main(string[] args)
        {
            // Instantiate the output delegates.
            HandelGetReportsResponse handlerConsole = WriteResponseToConsole;
            HandelGetReportsResponse handlerFile    = WriteResponseToFile;

            // Setup authentication.
            var scope   = new string[] { Google.Apis.AnalyticsReporting.v4.AnalyticsReportingService.Scope.AnalyticsReadonly };
            var creds   = JsonConvert.DeserializeObject <ServiceAccountCreds>(_file);
            var service = ServiceAccount.AuthenticateServiceAccount(creds.client_email, _credFileName, scope);

            // Create the DateRange object.
            var dateRange = new DateRange()
            {
                StartDate = "2010-01-01", EndDate = "2019-01-01"
            };

            // Create the Metrics object.
            var dimensions = new List <Dimension>()
            {
                new Dimension {
                    Name = "ga:browser"
                },
                new Dimension {
                    Name = "ga:date"
                },
                new Dimension {
                    Name = "ga:userType"
                }
            };

            //Create the Dimensions object.
            var metrics = new List <Metric>()
            {
                new Metric {
                    Expression = "ga:sessions", Alias = "Sessions"
                },
                new Metric {
                    Expression = "ga:users", Alias = "Users"
                },
                new Metric {
                    Expression = "ga:newUsers", Alias = "New Users"
                }
            };

            // Create the ReportRequest object.
            var reportRequest = new ReportRequest
            {
                ViewId     = _viewNumber.ToString(),
                DateRanges = new List <DateRange>()
                {
                    dateRange
                },
                Dimensions = dimensions,
                Metrics    = metrics,
                PageSize   = _pageSize
            };

            var requests = new List <ReportRequest> {
                reportRequest
            };

            // Create the GetReportsRequest object.
            var getReport = new GetReportsRequest()
            {
                ReportRequests = requests
            };

            do
            {
                Console.WriteLine($"Requesting data for Pagetoken: {getReport.ReportRequests.FirstOrDefault().PageToken}");

                // Call the batchGet method.
                var response = service.Reports.BatchGet(getReport).Execute();

                getReport.ReportRequests.FirstOrDefault().PageToken = response.Reports.FirstOrDefault().NextPageToken;

                // Call the delegate.
                handlerConsole(response, null);
                handlerFile(response, new string[] { @".\GAOutPut" });
            } while (getReport.ReportRequests.FirstOrDefault().PageToken != null);


            Console.ReadLine();
        }
示例#28
0
        public VisitedPagesReport Build(DateTime startDate, DateTime endDate)
        {
            // Create the DateRange object.
            DateRange dateRange = new DateRange()
            {
                StartDate = ReportDate.GetDateAsString(startDate),
                EndDate   = ReportDate.GetDateAsString(endDate)
            };

            // Create the Metrics object.
            //https://ga-dev-tools.appspot.com/dimensions-metrics-explorer/

            Metric pageViewsMetric = new Metric {
                Expression = "ga:pageviews", Alias = "Page views"
            };
            Metric uniquePageViewsMetric = new Metric {
                Expression = "ga:uniquePageviews", Alias = "Unique page views"
            };
            Metric entrancesMetric = new Metric {
                Expression = "ga:entrances", Alias = "Entrances"
            };

            //Create the Dimensions object.
            Dimension dimensionPage = new Dimension {
                Name = "ga:pagePath"
            };

            OrderBy order = new OrderBy
            {
                FieldName = "ga:pageviews",
                SortOrder = "DESCENDING"
            };

            string nextPageToken = null;

            var reportRows = new List <VisitedPagesReportRow>();

            do
            {
                // Create the ReportRequest object.
                ReportRequest reportRequest = new ReportRequest
                {
                    ViewId     = _GAViewID,
                    DateRanges = new List <DateRange>()
                    {
                        dateRange
                    },
                    Dimensions = new List <Dimension>()
                    {
                        dimensionPage
                    },
                    Metrics = new List <Metric>()
                    {
                        pageViewsMetric, uniquePageViewsMetric, entrancesMetric
                    },
                    OrderBys = new List <OrderBy> {
                        order
                    },
                    PageToken = nextPageToken
                };

                List <ReportRequest> requests = new List <ReportRequest>();
                requests.Add(reportRequest);

                // Create the GetReportsRequest object.
                GetReportsRequest getReport = new GetReportsRequest()
                {
                    ReportRequests = requests
                };

                // Call the batchGet method.
                GetReportsResponse response = _Service.Reports.BatchGet(getReport).Execute();

                var report = response.Reports[0];

                var rows = report.Data.Rows;

                foreach (var row in rows)
                {
                    string url = row.Dimensions[0];

                    string valPageViews     = row.Metrics[0].Values[0];
                    string valUniqPageViews = row.Metrics[0].Values[1];
                    string valEntrances     = row.Metrics[0].Values[2];

                    int pageViews     = int.Parse(valPageViews);
                    int uniqPageViews = int.Parse(valUniqPageViews);
                    int entrances     = int.Parse(valEntrances);

                    var reportRow = new VisitedPagesReportRow(url, pageViews, uniqPageViews, entrances);
                    reportRows.Add(reportRow);
                }                //foreach

                nextPageToken = report.NextPageToken;
                if (nextPageToken == null)
                {
                    break;
                }
            } while (true);

            var result = new VisitedPagesReport(reportRows.ToArray());

            return(result);
        }
示例#29
0
        static void Main(string[] args)
        {
            AnalyticsReportingService reportingService;
            GoogleCredential          credentials;

            using (var stream = new FileStream("your json file", FileMode.Open, FileAccess.Read))
            {
                string[] scopes           = { AnalyticsReportingService.Scope.AnalyticsReadonly };
                var      googleCredential = GoogleCredential.FromStream(stream);
                credentials = googleCredential.CreateScoped(scopes);
            }


            reportingService = new AnalyticsReportingService(
                new BaseClientService.Initializer
            {
                HttpClientInitializer = credentials
            });



            var dateRange = new DateRange
            {
                StartDate = DateTime.Now.ToString("yyyy-MM-dd"),
                EndDate   = DateTime.Now.ToString("yyyy-MM-dd")
            };
            var sessions = new Metric
            {
                Expression = "ga:pageviews",
                Alias      = "Sessions"
            };
            var date = new Dimension {
                Name = "ga:date"
            };

            var reportRequest = new ReportRequest
            {
                DateRanges = new List <DateRange> {
                    dateRange
                },
                Dimensions = new List <Dimension> {
                    date
                },
                Metrics = new List <Metric> {
                    sessions
                },
                ViewId = "xxxxxxxx" // your view id
            };



            var getReportsRequest = new GetReportsRequest
            {
                ReportRequests = new List <ReportRequest> {
                    reportRequest
                }
            };
            var batchRequest = reportingService.Reports.BatchGet(getReportsRequest);
            var response     = batchRequest.Execute();



            var result = response.Reports.First().Data.Rows.Sum(r => int.Parse(r.Metrics.First().Values.First()));
        }
示例#30
0
        public PublisherRevenueReport Build(DateTime startDate, DateTime endDate)
        {
            // Create the DateRange object.
            DateRange dateRange = new DateRange()
            {
                StartDate = ReportDate.GetDateAsString(startDate),
                EndDate   = ReportDate.GetDateAsString(endDate)
            };

            // Create the Metrics object.
            //https://ga-dev-tools.appspot.com/dimensions-metrics-explorer/

            Metric publisherImpressionsMetric = new Metric {
                Expression = "ga:totalPublisherImpressions", Alias = "Publisher Impressions"
            };
            Metric publisherClicksMetric = new Metric {
                Expression = "ga:totalPublisherClicks", Alias = "Publisher Clicks"
            };
            Metric publisherRevenueMetric = new Metric {
                Expression = "ga:totalPublisherRevenue", Alias = "Publisher Revenue"
            };

            //Create the Dimensions object.
            Dimension dimensionPage = new Dimension {
                Name = "ga:pagePath"
            };

            OrderBy order = new OrderBy
            {
                FieldName = "ga:totalPublisherRevenue",                 //ga:totalPublisherImpressions
                SortOrder = "DESCENDING"
            };
            //https://developers.google.com/analytics/devguides/reporting/core/v4/rest/v4/reports/batchGet?hl=ru#SortOrder

            string nextPageToken = null;
            double revenueTotal  = 0;

            var reportRows = new List <RevenueReportRow>();

            do
            {
                // Create the ReportRequest object.
                ReportRequest reportRequest = new ReportRequest
                {
                    ViewId     = _GAViewID,
                    DateRanges = new List <DateRange>()
                    {
                        dateRange
                    },
                    Dimensions = new List <Dimension>()
                    {
                        dimensionPage
                    },
                    Metrics = new List <Metric>()
                    {
                        publisherImpressionsMetric, publisherClicksMetric, publisherRevenueMetric
                    },
                    OrderBys = new List <OrderBy> {
                        order
                    },
                    PageToken = nextPageToken
                };

                List <ReportRequest> requests = new List <ReportRequest>();
                requests.Add(reportRequest);

                // Create the GetReportsRequest object.
                GetReportsRequest getReport = new GetReportsRequest()
                {
                    ReportRequests = requests
                };

                // Call the batchGet method.
                GetReportsResponse response = _Service.Reports.BatchGet(getReport).Execute();

                var report   = response.Reports[0];
                int rowCount = 0;
                if (report.Data.RowCount != null)
                {
                    rowCount = report.Data.RowCount.Value;
                }

                var rows = report.Data.Rows;

                foreach (var row in rows)
                {
                    string url = row.Dimensions[0];

                    string valImpressions = row.Metrics[0].Values[0];
                    string valClicks      = row.Metrics[0].Values[1];
                    string valRevenue     = row.Metrics[0].Values[2];

                    var rev = double.Parse(valRevenue, CultureInfo.InvariantCulture);

                    int impressions = int.Parse(valImpressions);
                    int clicks      = int.Parse(valClicks);

                    RevenueReportRow reportRow = new RevenueReportRow(rev, impressions, clicks, url);
                    reportRows.Add(reportRow);

                    revenueTotal += rev;
                }                //foreach

                nextPageToken = report.NextPageToken;
                if (nextPageToken == null)
                {
                    break;
                }
            } while (true);

            PublisherRevenueReport result = new PublisherRevenueReport(revenueTotal, reportRows.ToArray());

            return(result);
        }