2009-04-26 31 views
24

Google anunció el Analytics Data Export API hace algunos días, por lo que es mucho más fácil obtener datos analíticos para un sitio. La API debutó con los clientes de Java y Javascript, pero no con el soporte directo de .Net (aparte de ir directamente al XML). Parece que la API es similar a las otras API de datos de Google, y hay un .Net client for those. ¿Alguien ha intentado usar los componentes en esa biblioteca para obtener los datos analíticos?Google Analytics API y .Net

Estoy en el proceso de crear un sitio ASP.Net MVC y pensé que usaría Google Analytics para generar listas "Más vistos" y cosas por el estilo (ya que Google probablemente es mejor eliminando solicitudes espurias, robots , etc.) Si tiene alguna idea sobre esa idea, agradecería mucho escucharla también.

+2

he empezado a escribir uno. Eventualmente iba a ser un Linq-to-Google Analytics, pero lo guardé. Por ahora será un contenedor simple, debería ser uno o dos días más y publicaré una versión anterior. – ChadT

Respuesta

2

Google tiene lanzar una nueva generación de Apis que se enumeran en Google Api Explorer, se puede ver la entrada para Google Analytics. Y hay un .Net client que proporciona .dlls para todos estos Apis. Esto es Google, así que todavía está en Beta, pero estoy desarrollándolo sin problemas.

+0

Recibo "No tienes permiso para ejecutar este método". cuando ejecuto el método data.ga.get con los parámetros solicitados. ¿Podría decirme si se encontró con el mismo problema? – mko

3
//For this you will have to add some dll in your .net project i.e. 
using DotNetOpenAuth.OAuth2; 
using Google.Apis.Authentication.OAuth2; 
using Google.Apis.Authentication.OAuth2.DotNetOpenAuth; 
using Google.Apis.Analytics.v3; 
using Google.Apis.Analytics.v3.Data; 
using Google.Apis.Services; 

public ActionResult GetAnalyticsData(string GroupType, string date_from, string date_to) 
    { 
     try 
     { 

      AnalyticsService gas = AuthenticateUser(); 

      // Creating our query 
      DataResource.GaResource.GetRequest r = gas.Data.Ga.Get("ga:88028792", date_from, date_to, "ga:visits, ga:pageviews, ga:users, ga:newUsers, ga:sessions"); 
      //Hour,Day,Week,Month 
      if (GroupType == "Hour") { r.Dimensions = "ga:nthHour"; } 
      else if (GroupType == "Day") { r.Dimensions = "ga:nthDay"; } 
      else if (GroupType == "Week") { r.Dimensions = "ga:nthWeek"; } 
      else if (GroupType == "Month") { r.Dimensions = "ga:nthMonth"; } 


      //d: Execute and fetch the results of our query 
      GaData d = r.Execute(); 

      List<TotalsForAllResults> tr = new List<TotalsForAllResults>(); 
      List<CustomeData> cd = new List<CustomeData>(); 

      foreach (var item in d.Rows) 
      { 
       CustomeData mydata = new CustomeData(); 
       // mydata.CreatedDate = item[0].ToString(); 
       mydata.visits = Convert.ToInt32(item[1]); 
       mydata.pageviews = Convert.ToInt32(item[2]); 
       mydata.users = Convert.ToInt32(item[3]); 
       mydata.newUsers = Convert.ToInt32(item[4]); 
       mydata.sessions = Convert.ToInt32(item[5]); 


       #region Date Conversion 

       DateTime Now = DateTime.Parse(date_from, CultureInfo.InvariantCulture, DateTimeStyles.None); 
       DateTime TempDate = new DateTime(Now.Year, Now.Month, Convert.ToInt32(Now.ToString("dd"))); 

       if (GroupType == "Day") 
       {  
        TempDate = TempDate.AddDays((Convert.ToInt32(item[0]))); 
        mydata.CreatedDate = TempDate.ToLongDateString(); 
       } 
       else if (GroupType == "Hour") 
       { 
        TempDate = TempDate.AddHours((Convert.ToInt32(item[0]))); 
        mydata.CreatedDate = TempDate.ToString("dddd, MMM dd, yyyy hh:mm tt"); 
       } 
       else if (GroupType == "Month") 
       {       
        TempDate = TempDate.AddMonths((Convert.ToInt32(item[0]))); 
        mydata.CreatedDate = TempDate.ToString("MMMM, yyyy"); 
       } 
       else 
       { 
        //DateTime NewDate = DateTime.Parse(date_from, CultureInfo.InvariantCulture, DateTimeStyles.None); 
        //NewDate = NewDate.AddDays(((Convert.ToInt32(item[0]) + 1) - 1) * 7); 
        //string NewDate1 = NewDate.ToLongDateString(); 
        mydata.CreatedDate = item[0].ToString(); 
       } 

       #endregion 

       cd.Add(mydata); 
      } 

      foreach (var item in d.TotalsForAllResults) 
      { 
       TotalsForAllResults tfa = new TotalsForAllResults(); 
       tfa.metrics = item.Key; 
       tfa.count = Convert.ToInt32(item.Value); 
       tr.Add(tfa); 
      } 

      // At this point, d should contain the number of visitors you got between dates 
      return Json(new { TotalsForAllResults = tr, LineChartData = cd }); 
     } 
     catch (Exception ex) 
     { 
      return Json(null); 
     } 



    } 

public AnalyticsService AuthenticateUser() 
    { 
     // This is the physical path to the key file you downloaded when you created your Service Account 
     String key_file = @"E:\be8eab1c9893eac9f9fdac95cd64bcc58c86a158-privatekey.p12";//@"C:\Users\path\XXXXX-privatekey.p12"; 

     // Is the "Email Address", not the "Client ID" one!!! 
     String client_id = "[email protected]account.com"; //"[email protected]"; 

     // Probably the password for all is "notasecret" 
     String key_pass = "notasecret"; 

     String scope_url = "https://www.googleapis.com/auth/" + Google.Apis.Analytics.v3.AnalyticsService.Scopes.Analytics.ToString().ToLower(); 
     //scope_url = "https://www.googleapis.com/auth/analytics"; 
     //scope_url = "https://www.googleapis.com/auth/analytics.readonly"; 

     AuthorizationServerDescription desc = GoogleAuthenticationServer.Description; 
     X509Certificate2 key = new X509Certificate2(key_file, key_pass, X509KeyStorageFlags.Exportable); 

     AssertionFlowClient client = new AssertionFlowClient(desc, key) { ServiceAccountId = client_id, Scope = scope_url }; 
     OAuth2Authenticator<AssertionFlowClient> auth = new OAuth2Authenticator<AssertionFlowClient>(client, AssertionFlowClient.GetState); 
     //AnalyticsService gas = new AnalyticsService(auth); 
     AnalyticsService gas = new AnalyticsService(new BaseClientService.Initializer() { Authenticator = auth }); 

     return gas; 
    } 

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

namespace GAExampleMVC.Models 
{ 
public class TotalsForAllResults 
{ 
    public string metrics { get; set; } 
    public int count { get; set; } 
    public double Percent { get; set; } 
    public DateTime Time { get; set; } 

} 

public class CustomeData 
{ 
    public string CreatedDate { get; set; } 
    public int visits { get; set; } 
    public int pageviews { get; set; } 
    public int users { get; set; } 
    public int newUsers { get; set; } 
    public int sessions { get; set; } 
    public string avgSessionDuration { get; set; } 
    public double bounceRate { get; set; } 
    public double percentNewSessions { get; set; } 
    public double percentNewVisits { get; set; } 
    public string Location { get; set; } 
    public int uniquePageviews { get; set; } 
    public string pagePath { get; set; } 


} 

}