I'm extracting data from Google Analytics API and i want to extract total visitors per day and organize them in a list ordered by dates.
For example:
Property "Rows" contains all the dates within the timeframe I specified.
Each row contains:
Date - 2014-02-24
Visitors - 3000
newVisits - 2400
PageViews - 10000
PercentNewVisits - 38,001302
I need to organize and structure this data so i can display it properly in my C# / .NET application but how??
For example:
If I choose start and endate "2014-01-24 - 2014-02-28" I want to see all visits between those days.
- 2014-01-24 = 100 visits
- 2014-01-25 = 200 visits
- ..... and so on
Dates are organised in the property "Rows" in GaData
class. However it's a list of strings and the property looks like this:
public virtual IList<IList<string>> Rows { get; set; }
Here's the GaData
class with Rows
property:
This is what i get when debugging, the dates are displayed". Check this out:
Each row contains visitor data for each day within the query StartDate and EndDate!
Here's the nested class with metric, dimensions etc:
This is my current query:
var r = gas.Data.Ga.Get("ProfileID", "2014-01-24", "2014-02-28", "ga:pageviews,ga:newVisits,ga:visitors,ga:percentNewVisits");
r.Dimensions = "ga:date";
r.Sort = "-ga:date";
r.MaxResults = 10000;
Google.Apis.Analytics.v3.Data.GaData d = r.Execute();
Console.WriteLine("VisitorStats" + " " +
d.Query.StartDate + " " + "-" + " " + d.Query.EndDate + "\r\n" +
"------------------------------------------" + "\r\n" +
"Visitors:" + " " + d.TotalsForAllResults["ga:visitors"] + "\r\n" +
"NewVisits:" + " " + d.TotalsForAllResults["ga:newVisits"] + "\r\n" +
"PageViews:" + " " + d.TotalsForAllResults["ga:pageviews"] + "\r\n" +
"PercentNewVisits:" + " " + d.TotalsForAllResults["ga:percentNewVisits"] +"%");
And this is the output I get:
VisitorStats 2010-02-24 - 2014-02-24
------------------------------------------
NewVisits: 343272
NewVisits: 147693
PageViews: 255000
PersentNewVisits: 42.54700702044485%
I'm getting pretty close now. What I'm trying to archive here is this:
My code looks like this:
ControllerClass
:
public class GAStatisticsController : Controller
{
// GET: /ShopStatistics/
public string GAnalyticsService()
{
//Users Google Service Account
string serviceAccountEmail = "xxx@developer.gserviceaccount.com";
//Public key for authorisation
X509Certificate2 certificate = new X509Certificate2(@"C:\Users\xxx\NopCommerce\Presentation\Nop.Web\key.p12", "notasecret", X509KeyStorageFlags.Exportable);
//Account credentials of authorisation
ServiceAccountCredential credential = new ServiceAccountCredential(
new ServiceAccountCredential.Initializer(serviceAccountEmail)
{
Scopes = new[] { AnalyticsService.Scope.Analytics }
}.FromCertificate(certificate));
// Create the service.
//Twistandtango
AnalyticsService GoogleAnalyticsService = new AnalyticsService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = "Twist",
});
var r = gas.Data.Ga.Get("ProfileID", "2014-01-24", "2014-02-28", "ga:visitors");
r.Dimensions = "ga:date";
r.Sort = "-ga:date";
r.MaxResults = 10000;
//Execute and fetch the results of our query
Google.Apis.Analytics.v3.Data.GaData d = request.Execute();
return "Visitor statistics" + " " +
d.Query.StartDate + " " + "-" + " " + d.Query.EndDate + "<br/>" +
"------------------------------------------" + "<br/>" +
"Total visitors:" + " " + d.TotalsForAllResults["ga:visitors"].ToString();
}
public ActionResult GAStatistics()
{
GAnalyticsService();
return View(new GAStatisticsListModel());
}
}
}
ListModel
so customer can select what to query. StartDate, EndDate, Visitors, Sales, ConversionRate etc (this model is not doing anything atm):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;
using Nop.Web.Framework;
using Nop.Web.Framework.Mvc;
namespace Nop.Admin.Models.GAStatistics
{
public class GAStatisticsListModel : BaseNopModel
{
public GAStatisticsListModel()
{
AvailableGAStatistics = new List<SelectListItem>();
Visitors = new List<SelectListItem>();
ConversionRate = new List<SelectListItem>();
Sales = new List<SelectListItem>();
}
[NopResourceDisplayName("Admin.ShopStatistics.List.StartDate")]
[UIHint("DateNullable")]
public DateTime? StartDate { get; set; }
[NopResourceDisplayName("Admin.ShopStatistics.List.EndDate")]
[UIHint("DateNullable")]
public DateTime? EndDate { get; set; }
[NopResourceDisplayName("Admin.GAStatistics.GAStatistics.AvailableGAStatistics")]
public int GAStatisticsId { get; set; }
public List<SelectListItem> AvailableGAStatistics { get; set; }
public IList<SelectListItem> Sales { get; set; }
public IList<SelectListItem> ConversionRate { get; set; }
public IList<SelectListItem> Visitors { get; set; }
}
}
Any ideas??
This post is related and I've managed to create a temporary fix: Display Google Analytics Data in View
Thx