2009-04-26 84 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; } 


} 

}