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
 
     
    