2009-04-26 13 views
24

Google a annoncé le Analytics Data Export API il y a quelques jours, ce qui facilite grandement l'obtention de données analytiques pour un site. L'API a débuté avec des clients Java et Javascript, mais pas de support direct .Net (autre que d'aller directement au XML). Il semble que l'API soit similaire aux autres API Google Data, et qu'il existe un .Net client for those. Quelqu'un at-il essayé d'utiliser les composants de cette bibliothèque pour obtenir les données analytiques? Je suis en train de construire un site ASP.Net MVC et je pensais que j'utiliserais Google Analytics pour générer des listes "Plus vues" et des trucs comme ça (puisque Google est probablement meilleur pour éliminer les demandes fausses, les robots , etc.). Si vous avez des idées sur cette idée, j'aimerais beaucoup les entendre aussi.API Google Analytics et .Net

+2

J'ai commencé à écrire un. Il allait finalement être un Linq-to-Google Analytics, mais j'ai rangé celui-là. Pour l'instant ce sera un simple wrapper, devrait être un autre jour ou deux et je vais poster une première version – ChadT

Répondre

2

Google vient de sortir une nouvelle race de Apis qui sont énumérés à Google Api Explorer, vous pouvez voir l'entrée pour Google Analytics. Et il y a un .Net client qui fournit .dlls pour tous ces Apis. Ceci est Google, donc il est encore en version bêta mais je suis en train de le développer sans problèmes.

+0

Je reçois «Vous n'avez pas la permission d'exécuter cette méthode." lorsque j'exécute la méthode data.ga.get avec les paramètres demandés. Pourriez-vous me dire si vous avez rencontré le même problème? – 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; } 


} 

}