用Google Analytics Api抓取網站分析資料
Google Analytics 相信大家都不陌生,是google提供的一個強大統計工具
用來監控網站的流量、來源、關鍵字等等,是個網站必備使用的工具
前陣子有個專案需要做一個網站瀏覽人次統計的需求,因為我有點懶惰,想說這種
東西,直接利用Google的分析出來的數值,直接丟到網站上或資料庫裡就好。
於是開始研究Google Analytics Api,沒想到沒多久就卡關了(因為全都是英文…)
好家在有偉榮大的大力相助,於是完成了這個需求。今天來分享一下如果抓取google的分析資料
要用之前,得先看一下這些API
ClientLogin for Installed Applications
基本上也是用HttpWebRequest送出一個request,然後抓取google response回來的資訊
但是前提是使用google analytics時需要登入,因此必須用帳號密碼取得token之後
夾帶在request中送出去,google驗證後才會將正確的資訊傳回來
static void Main(string[] args)
{
//送出request的網址,
//參數請參考http://code.google.com/intl/zh-TW/apis/analytics/docs/gdata/gdataReferenceDataFeed.html
var request = (HttpWebRequest)HttpWebRequest.Create(
string.Format("https://www.google.com/analytics/feeds/data?"+
"ids=ga%3A{0}&metrics=ga%3APageviews%2Cga%3Avisits&"+
"start-date={1}&end-date={2}&max-results=50",
"網站的ID",
"2010-07-31",
DateTime.Now.ToString("yyyy-MM-dd")));
//在header必須帶入token,token的取得請看下方的方法
request.Headers.Add("Authorization", "GoogleLogin auth=" + GetAuthToken());
var response = request.GetResponse();
var responseContent = new StreamReader(response.GetResponseStream()).ReadToEnd();
//回來的是XML,自行分析
StreamWriter rd = File.CreateText(@"c:\temp\googel.xml");
rd.Write(responseContent);
rd.Flush();
}
private static string GetAuthToken()
{
var postContent = string.Format(@"accountType=GOOGLE&Email={0}&Passwd={1}&service=analytics&source={2}",
"帳號",
"密碼",
"1234"//隨便填幾個數字
);
byte[] bPostData = Encoding.ASCII.GetBytes(postContent);
//參數與用法
//參考http://code.google.com/intl/zh-TW/apis/accounts/docs/AuthForInstalledApps.html
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;
var reqStream = new StreamWriter(req.GetRequestStream());
reqStream.Write(postContent);
reqStream.Flush();
HttpWebResponse rep = (HttpWebResponse)req.GetResponse();
StreamReader repStream = new StreamReader(rep.GetResponseStream(), Encoding.UTF8);
string ctx = repStream.ReadToEnd();
//送出的response抓取token的值
return Regex.Split(ctx, "Auth=", RegexOptions.IgnoreCase)[1];
}
傳回來的xml,這邊為了方便作範例,因此我是存成一個檔案。
執行之後,打開這個檔案來看看,裡面有很多資訊,我擷取一段
可以看到造訪量跟瀏覽數的資訊,再來就看想用LinqToXML還是Regular Expression分析這份xml取出想要的資料
就可以使用了。
參考資料: