Google Analytics API和.Net
谷歌在几天前宣布了Analytics Data Export API,从而使得获取网站的分析数据变得更容易。这个API与Java和Javascript客户端一起推出,但没有直接的.Net支持(除了直接用于XML)。看起来API与其他Google数据API类似,但有一个.Net client for those。有没有人试图使用该库中的组件来获取分析数据?Google Analytics API和.Net
我正在建立一个ASP.Net MVC网站,并认为我会使用Google Analytics(分析)来生成“Most viewed”列表和类似的东西(因为Google可能更好地清除虚假请求,机器人等)。如果你对这个想法有任何想法,我也非常感谢他们听到他们的意见。
检查Google的.NET库的trunk,他们增加了Google Analytics支持。
还要检查他们的小组张贴在此:
http://groups.google.com/group/gdata-dotnet-client-library/browse_thread/thread/2d2eec9103b731c6
和
http://groups.google.com/group/gdata-dotnet-client-library/browse_thread/thread/70c6638734823b8d
退房我的帖子的位置在这里: http://www.akamarketing.com/blog/103-introducing-google-analytics-api-with-aspnet-c.html
它不使用内置的库你提到,但它的工作非常好。整个API是XML/HTTP,因此使用起来非常方便。你基本上要求Google提供一个网页,并检查你需要的回应。
谷歌已经释放出在Google Api Explorer上市API的新品种,就可以看到该条目为Google Analytics。并且有一个.Net client为所有这些Apis提供了.dll。这是谷歌,所以它仍然在测试版,但我正在发展,没有问题。
我收到“您没有执行此方法的权限。”当我用询问参数运行data.ga.get方法时。如果您遇到同样的问题,请告诉我吗? – mko 2012-01-11 21:40:25
//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; }
}
}
我已经开始写一个。它最终会成为一个Linq到Google Analytics,但我已经收藏了一个。现在这将是一个简单的包装,应该是另一两天,我会发布一个早期版本 – ChadT 2009-04-30 03:50:18