用Google Analytics Api抓取網站分析資料

用Google Analytics Api抓取網站分析資料

Google Analytics 相信大家都不陌生,是google提供的一個強大統計工具

用來監控網站的流量、來源、關鍵字等等,是個網站必備使用的工具

image

前陣子有個專案需要做一個網站瀏覽人次統計的需求,因為我有點懶惰,想說這種

東西,直接利用Google的分析出來的數值,直接丟到網站上或資料庫裡就好。

於是開始研究Google Analytics Api,沒想到沒多久就卡關了(因為全都是英文…)

好家在有偉榮大的大力相助,於是完成了這個需求。今天來分享一下如果抓取google的分析資料

要用之前,得先看一下這些API

Data API - Data Feed

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,這邊為了方便作範例,因此我是存成一個檔案。

執行之後,打開這個檔案來看看,裡面有很多資訊,我擷取一段

image

可以看到造訪量跟瀏覽數的資訊,再來就看想用LinqToXML還是Regular Expression分析這份xml取出想要的資料

就可以使用了。

參考資料:

Google Analytics API 整理