2009-04-26 124 views
24

谷歌在几天前宣布了Analytics Data Export API,从而使得获取网站的分析数据变得更容易。这个API与Jav​​a和Javascript客户端一起推出,但没有直接的.Net支持(除了直接用于XML)。看起来API与其他Google数据API类似,但有一个.Net client for those。有没有人试图使用该库中的组件来获取分析数据?Google Analytics API和.Net

我正在建立一个ASP.Net MVC网站,并认为我会使用Google Analytics(分析)来生成“Most viewed”列表和类似的东西(因为Google可能更好地清除虚假请求,机器人等)。如果你对这个想法有任何想法,我也非常感谢他们听到他们的意见。

+2

我已经开始写一个。它最终会成为一个Linq到Google Analytics,但我已经收藏了一个。现在这将是一个简单的包装,应该是另一两天,我会发布一个早期版本 – ChadT 2009-04-30 03:50:18

回答

2

谷歌已经释放出在Google Api Explorer上市API的新品种,就可以看到该条目为Google Analytics。并且有一个.Net client为所有这些Apis提供了.dll。这是谷歌,所以它仍然在测试版,但我正在发展,没有问题。

+0

我收到“您没有执行此方法的权限。”当我用询问参数运行data.ga.get方法时。如果您遇到同样的问题,请告诉我吗? – mko 2012-01-11 21:40:25

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; } 


} 

}