首先,你需要一个能访问 analytics 的账号。
其次,这个账号要能读某个 profile 。
其次,这个账号要能读某个 profile 。
Google 提供了三种登陆 Google 账号的方法。AuthSub Proxy Authentication, OAuth Authentication, Client Login
这里我使用了 Client Login 方法。前两种没有过多研究。
这里我使用了 Client Login 方法。前两种没有过多研究。
Client Login 要求把账户名(Email) 和 密码 还有一些其它的信息一起发送(POST)到GOOGLE的接口.
在PHP中,要POST数据到服务器,一般用 socket 方法。在C#里,我试图也用 Socket 方法去请求,但是行不通,因为 要请求的地址是 ssl的(https 443端口),socket 连接到服务器之后,在 receive 的时候,一直接提示以中断连接之类的错误。百度查了查,说C#自带 socket 没有处理 ssl 的能力,需要第三放的 SSLSocket. 但是C# 里的 HttpWebRequest 可以很容易的做到。
在PHP中,要POST数据到服务器,一般用 socket 方法。在C#里,我试图也用 Socket 方法去请求,但是行不通,因为 要请求的地址是 ssl的(https 443端口),socket 连接到服务器之后,在 receive 的时候,一直接提示以中断连接之类的错误。百度查了查,说C#自带 socket 没有处理 ssl 的能力,需要第三放的 SSLSocket. 但是C# 里的 HttpWebRequest 可以很容易的做到。
Client Login 的接口地址是:
https://www.google.com/accounts/ClientLogin
登陆成功后,google 会返回几个参数给你,其中有个 Auth, 这个Auth 需要保存下来,后面的每次请求都需要使用它。
下面代码中的 service 是一个固定的值,不改。source 随便。返回的数据里,最后一个就是 Auth
https://www.google.com/accounts/ClientLogin
登陆成功后,google 会返回几个参数给你,其中有个 Auth, 这个Auth 需要保存下来,后面的每次请求都需要使用它。
下面代码中的 service 是一个固定的值,不改。source 随便。返回的数据里,最后一个就是 Auth
public static string token = "";
public static void Login(){
string accountType = "accountType";
string email = "your account email";
string pwd = "your password";
string service = "analytics";
string source = "dajiaozi-test-1";
string postData = "accountType=" + accountType
+ "&Email=" + email
+ "&Passwd=" + pwd
+ "&service=" + service
+ "&source=" + source;
byte[] bPostData = Encoding.ASCII.GetBytes(postData);
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("https://www.google.com/accounts/ClientLogin");
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.ContentLength = bPostData.Length;
Stream reqStream = req.GetRequestStream();
reqStream.Write(bPostData,0,bPostData.Length);
reqStream.Close();
HttpWebResponse rep = (HttpWebResponse)req.GetResponse();
StreamReader repStream = new StreamReader(rep.GetResponseStream(),Encoding.UTF8);
string ctx = repStream.ReadToEnd();
token = Regex.Split(ctx,"Auth=",RegexOptions.IgnoreCase)[1];
//Console.WriteLine(token);
//Console.WriteLine(ctx);
}
public static void Login(){
string accountType = "accountType";
string email = "your account email";
string pwd = "your password";
string service = "analytics";
string source = "dajiaozi-test-1";
string postData = "accountType=" + accountType
+ "&Email=" + email
+ "&Passwd=" + pwd
+ "&service=" + service
+ "&source=" + source;
byte[] bPostData = Encoding.ASCII.GetBytes(postData);
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("https://www.google.com/accounts/ClientLogin");
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.ContentLength = bPostData.Length;
Stream reqStream = req.GetRequestStream();
reqStream.Write(bPostData,0,bPostData.Length);
reqStream.Close();
HttpWebResponse rep = (HttpWebResponse)req.GetResponse();
StreamReader repStream = new StreamReader(rep.GetResponseStream(),Encoding.UTF8);
string ctx = repStream.ReadToEnd();
token = Regex.Split(ctx,"Auth=",RegexOptions.IgnoreCase)[1];
//Console.WriteLine(token);
//Console.WriteLine(ctx);
}
下面代码里的 gaId 就是 profileID,可以从这个地址里取得:
https://www.google.com/analytics/reporting/?reset=1&id=xxx&pdr=20090406-20090506
就是那个 id = xxx
dimensions 是查询哪个功能,ga:pagePath 就是页面地址。在Analytics 里就是每个页面的详细报表。
metrics 指出要查出哪些数据,ga:newVisits:新访数,ga:pageviews:综合访问量, ga:uniquePageviews:唯一访问量。
startDate和endDate 就不用说了吧。
filter 是过滤,由于 filder 是请求里的一个参数,所以要把 filter 里的比较符号进行转意。
dimensions 和 metrics 参考这里:http://code.google.com/intl/zh-CN/apis/analytics/docs/gdata/gdataReferenceDimensionsMetrics.html
filter 参考这里:http://code.google.com/intl/zh-CN/apis/analytics/docs/gdata/gdataReference.html#filtering
filter 参考这里:http://code.google.com/intl/zh-CN/apis/analytics/docs/gdata/gdataReference.html#filtering
retailerID 是我要过滤的内容,查找 ga:pagePath 里包含 rid=51 的所有记录。
req.Headers.Add("Authorization","GoogleLogin auth=" + token);
GoogleLogin auth 所指的那个 token 就是前面取出的那个 token
GoogleLogin auth 所指的那个 token 就是前面取出的那个 token
public static void GetReportData(){
int retailerID = 51;
int gaId = 3879045;
string dimensions = "ga:pagePath";
string metrics = "ga:newVisits,ga:pageviews,ga:uniquePageviews";
string sort = "ga:pagePath,ga:uniquePageviews,ga:pageviews,ga:newVisits";
string startDate = "2009-04-01";
string endDate = "2009-04-30";
string filter = "ga:pagePath" + Uri.EscapeDataString("=~&") + "rid" + Uri.EscapeDataString("=") + retailerID;
//HttpWebRequest req = (HttpWebRequest) HttpWebRequest.Create("https://www.google.com/analytics/feeds/data?ids=ga:" + gaId + "&dimensions="+ dimensions +"&metrics="+ metrics +"&sort="+ sort +"&start-date="+startDate+"&end-date=" + endDate);
HttpWebRequest req = (HttpWebRequest) HttpWebRequest.Create("https://www.google.com/analytics/feeds/data?ids=ga:" + gaId + "&dimensions="+ dimensions +"&metrics="+ metrics +"&filters="+ filter +"&sort="+ sort +"&start-date="+startDate+"&end-date=" + endDate);
req.Headers.Add("Authorization","GoogleLogin auth=" + token);
HttpWebResponse rep = (HttpWebResponse) req.GetResponse();
StreamReader repStream = new StreamReader(rep.GetResponseStream(),Encoding.UTF8);
string ctx = repStream.ReadToEnd();
//Console.WriteLine(ctx);
if(File.Exists("report.xml")){
File.Delete("report.xml");
}
StreamWriter sw = new StreamWriter("report.xml");
sw.Write(ctx);
sw.Flush();
sw.Close();
// XmlDocument doc = new XmlDocument();
// XmlNamespaceManager xnm = new XmlNamespaceManager(doc.NameTable);
// xnm.AddNamespace("dxp","http://schemas.google.com/analytics/2009");
// doc.Load(rep.GetResponseStream());
// XmlNode node = doc.SelectSingleNode("//dxp:aggregates/dxp:metric[@name='ga:uniquePageviews']",xnm);
// Console.WriteLine("Unique Views: {0}",node.Attributes.GetNamedItem("value").Value);
//
// node = doc.SelectSingleNode("//dxp:aggregates/dxp:metric[@name='ga:pageviews']",xnm);
// Console.WriteLine("Page Views:{0}",node.Attributes.GetNamedItem("value").Value);
}
int retailerID = 51;
int gaId = 3879045;
string dimensions = "ga:pagePath";
string metrics = "ga:newVisits,ga:pageviews,ga:uniquePageviews";
string sort = "ga:pagePath,ga:uniquePageviews,ga:pageviews,ga:newVisits";
string startDate = "2009-04-01";
string endDate = "2009-04-30";
string filter = "ga:pagePath" + Uri.EscapeDataString("=~&") + "rid" + Uri.EscapeDataString("=") + retailerID;
//HttpWebRequest req = (HttpWebRequest) HttpWebRequest.Create("https://www.google.com/analytics/feeds/data?ids=ga:" + gaId + "&dimensions="+ dimensions +"&metrics="+ metrics +"&sort="+ sort +"&start-date="+startDate+"&end-date=" + endDate);
HttpWebRequest req = (HttpWebRequest) HttpWebRequest.Create("https://www.google.com/analytics/feeds/data?ids=ga:" + gaId + "&dimensions="+ dimensions +"&metrics="+ metrics +"&filters="+ filter +"&sort="+ sort +"&start-date="+startDate+"&end-date=" + endDate);
req.Headers.Add("Authorization","GoogleLogin auth=" + token);
HttpWebResponse rep = (HttpWebResponse) req.GetResponse();
StreamReader repStream = new StreamReader(rep.GetResponseStream(),Encoding.UTF8);
string ctx = repStream.ReadToEnd();
//Console.WriteLine(ctx);
if(File.Exists("report.xml")){
File.Delete("report.xml");
}
StreamWriter sw = new StreamWriter("report.xml");
sw.Write(ctx);
sw.Flush();
sw.Close();
// XmlDocument doc = new XmlDocument();
// XmlNamespaceManager xnm = new XmlNamespaceManager(doc.NameTable);
// xnm.AddNamespace("dxp","http://schemas.google.com/analytics/2009");
// doc.Load(rep.GetResponseStream());
// XmlNode node = doc.SelectSingleNode("//dxp:aggregates/dxp:metric[@name='ga:uniquePageviews']",xnm);
// Console.WriteLine("Unique Views: {0}",node.Attributes.GetNamedItem("value").Value);
//
// node = doc.SelectSingleNode("//dxp:aggregates/dxp:metric[@name='ga:pageviews']",xnm);
// Console.WriteLine("Page Views:{0}",node.Attributes.GetNamedItem("value").Value);
}
下面这段是取出账户信息的,这里用处不大。同样注意那个 token
public static void GetAccountData(){
HttpWebRequest req = (HttpWebRequest) HttpWebRequest.Create("https://www.google.com/analytics/feeds/accounts/default");
req.Headers.Add("Authorization","GoogleLogin auth=" + token);
HttpWebResponse rep = (HttpWebResponse)req.GetResponse();
StreamReader repStream = new StreamReader(rep.GetResponseStream(),Encoding.UTF8);
string ctx = repStream.ReadToEnd();
//Console.WriteLine(ctx);
}
更多请参考:
| < Prev | Next > |
|---|
Last Updated ( Thursday, 07 May 2009 22:00 )



