[ASP.NET] 使用 Google Analytics 並整合Google Analytics 流量分析資料於網站中顯示

摘要:[ASP.NET] 使用 Google Analytics 並整合Google Analytics 流量分析資料於網站中顯示

前言


  談到需要分析網站的流量的話,應該都會想到強大的 Google Analytics ,Google Analytics 還真的是好東西,除了可以分析網站的到訪率外還有客層、行為、技術等分析,當然有了這麼強大的分析工具,一定要把它整合到網站裡面的,以下將分成兩階段說明該如何整合到網站中。

 

範例


一、將網站加入 Google Analytics 追蹤

在要使用 Google Analytics 之前有幾個動作必需要先完成。

在以上動作都完成後,登入 Analytics 分析在進入帳號管理頁面,

 

 

Step 1

 選擇「新增帳戶」 > 輸入您需要加入分析的網站名稱與網址。

 

移到最下面,勾選「是,我同意以上條款及細則」後點選建立帳戶。

新增完成後,將會導至該追蹤網站的管理頁面。

將畫面往下移,找到「將此程式碼貼到您的網站上」項目,依照說明將文字框內的程式碼「全選」 > 「複製」。

 

Step 2

  經過了第一步驟我們已經將需要貼到網站上的程式碼複製出來了,接下來就要開啟 Visual Studio 進入您要加入追蹤的網站專案中,一般建置網站中我們會使用到 MasterPage 來放置一些於每頁重複的功能(例如選單),也因為套用 MasterPage 後 MasterPage將貫穿所有網頁的頁面,所以在這邊我們將剛剛從 Google Analytics 複製的程式碼貼到您網站上的 MasterPage頁面,如沒套用 MasterPage 則複製到您 HTML 的首頁即可。

開啟 MasterPage 的設計頁,將程式碼複製到 <head> .... </head> 標籤內後存檔並將檔案更新上您的正式網站中。

 

程式碼加入網站後,回到 Google Analytics 管理介面中,在「帳戶清單」中選擇您剛加入的項目進入。

 

於「訪客總覽」中即可以看到造訪的曲線圖了。

 

完成以上第一部分的步驟後,就已經成功將您的網站加入 Google Analytics 中,您只要過一段時間再回來看,應該就能夠觀察到網站的流量分析等資料。

 

二、將 Google Analytics 追蹤的流量資料顯示於網站中

  在經過了第一部分的設定後,網站已經可以取得訪客的瀏覽資訊,但這時如我們想在網站中即時可以顯示由 Google Analytics 所統計的資料實該如何實現呢? 這時我們就需要使用到 Google Analytics API

 

Step 1

我們可以先經由 Query Explorer 來測試要取的資料

 

使用方法如下:

  • ids: 選擇你的追蹤網站,主要是要取得id
  • metrics: 要檢視的數據,這邊選擇 visitors, pageviews 查看訪客數跟流覽量
  • start-date: 要查詢的資料開始區間
  • end-date: 要查詢的資料結束區間

 

當條件都選擇完成後,點選「Get Data」後下方則會顯示出你所查詢的資料。

此時再回到本頁的上方,找到 Data Feed URI 網址:

https://www.google.com/analytics/feeds/data?ids=ga%3A{XXXXXXX}&metrics=ga%3Avisitors%2Cga%3Apageviews&start-date=2012-05-17&end-date=2012-05-31&max-results=50

{XXXXXXX} 則是你上面 *ids 欄位內的編號,將網址先複製起來,因為之後會用到。

 

Step 2

  回到 Visual Studio 網站專案下,在你要顯示瀏覽情況的網頁內要做兩個動作,第一個是要向剛剛那段網址(Data Feed URL)發送Requert請求並儲存Response的內容(回傳XML),第二個是要在儲存的XML中取出要顯示的資料,方法如下程式碼:

 

取得Google Analytics 的XML資料並存檔:

    /// 
    /// 取得GoogleAnalytics回傳的XML資料
    /// 
    private void GetGoogleAnalyticsXML()
    {
        // 發出Request的網址,也就是剛剛的 Data Feed URI
        string dfUrl = string.Format("https://www.google.com/analytics/feeds/data?" +
                                     "ids=ga%3A{0}&" +
                                     "metrics=ga%3Avisitors%2Cga%3Apageviews&" +
                                     "start-date={1}&" +
                                     "end-date={2}&" +
                                     "max-results=50",
                                     "XXXXXXXX",  // ID
                                     "2012-01-01",  // Start Date
                                     DateTime.Now.ToString("yyyy-MM-dd")    // End Date
                                     );

        var request = (HttpWebRequest)HttpWebRequest.Create(dfUrl);
        request.Headers.Add("Authorization", "GoogleLogin auth=" + GetAuthToken()); // 於Header加入Token

        var response = request.GetResponse();
        var responseContent = new StreamReader(response.GetResponseStream()).ReadToEnd();

        // 取得回來的是XML,需要分析
        StreamWriter sw = File.CreateText(xmlPath);
        sw.Write(responseContent);
        sw.Flush();
        sw.Close();
    }

    /// 
    /// 取得帳戶Token
    /// 
    /// 
    private string GetAuthToken()
    {
        // 參數內容
        var arg = string.Format(@"accountType=GOOGLE&Email={0}&Passwd={1}&service=analytics&source={2}",
                                   "XXXXXXX@gmail.com", // Google帳號
                                   "XXXXXXXX",  // Google密碼
                                   "88817171"   // 隨便輸入數字
                                   );

        byte[] argData = Encoding.ASCII.GetBytes(arg);  // 轉成Byte

        // 建立HttpWebRequest
        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("https://www.google.com/accounts/ClientLogin");
        request.Method = "POST";
        request.ContentType = "application/x-www-form-urlencoded";
        request.ContentLength = argData.Length;

        var reqStream = new StreamWriter(request.GetRequestStream());
        reqStream.Write(arg);
        reqStream.Flush();

        try
        {
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            StreamReader repStream = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
            string s = repStream.ReadToEnd();
            repStream.Close();
            return Regex.Split(s, "Auth=", RegexOptions.IgnoreCase)[1]; // 只取得Token的值
        }
        catch (Exception)
        {
            new Exception("提取Response內容時發生錯誤!");
            return null;
        }
    }

取得回來的XML檔案格式如下,而我們要取得的是 entry 的內容。

<feed>
 .....
 .....
 <entry>
  <id>http://www.google.com/analytics/feeds/data?ids=ga:XXXXX&&start-date=2012-01-01&end-date=2012-05-31</id>
  <updated>2012-05-30T17:00:00.001-07:00</updated>
  <title type="text"/>
  <link type="text/html" href="http://www.google.com/analytics" rel="alternate"/>
  <dxp:metric type="integer" value="79" name="ga:visitors" confidenceInterval="0.0"/>
  <dxp:metric type="integer" value="134" name="ga:pageviews" confidenceInterval="0.0"/>
 </entry>
</feed>

 

 讀取XML並且顯示於畫面上:

    /// 
    /// 讀取產生的XML檔案
    /// 
    private void ReadXML()
    {
        string stratDate = "";
        string endDate = "";
        string visitor = "";
        string pageviews = "";
        XmlDocument xDoc = new XmlDocument();
        xDoc.Load(xmlPath);
        XmlNodeList xNodes = xDoc.DocumentElement.ChildNodes;
        foreach (XmlElement xEle in xNodes)
        {
            if (xEle.Name == "entry")
            {
                XmlNodeList entryNodes = xEle.ChildNodes;
                foreach (XmlElement xEleEn in entryNodes)
                {
                    if (xEleEn.Name == "dxp:metric")
                    {
                        if (xEleEn.Attributes["name"].Value == "ga:visitors")
                            visitor = xEleEn.Attributes["value"].Value;
                        else if (xEleEn.Attributes["name"].Value == "ga:pageviews")
                            pageviews = xEleEn.Attributes["value"].Value;
                    }
                }
            }
            else if (xEle.Name == "dxp:startDate")
            {
                stratDate = xEle.InnerText;
            }
            else if (xEle.Name == "dxp:endDate")
            {
                endDate = xEle.InnerText;
            }
        }
        Label1.Text = "區間:" + stratDate + " - " + endDate;
        Label2.Text = "訪客數:" + visitor;
        Label3.Text = "瀏覽量:" + pageviews;
    }

 

而最後PageLoad就去執行這兩個方法:

    string xmlPath;

    protected void Page_Load(object sender, EventArgs e)
    {
        xmlPath = Server.MapPath("~/google.xml");
        GetGoogleAnalyticsXML();
        if (File.Exists(xmlPath))
        {
            ReadXML();
        }
    }

 

經過了如此動作後,畫面上應該顯示如下:

 

這樣就完成了直接從 Google Analytics 內取得網站的瀏覽量等資訊,很方便吧! 

 

範例程式碼


WebStieAnalytics.rar 

參考資料


https://developers.google.com/analytics/

http://www.akamarketing.com/blog/103-introducing-google-analytics-api-with-aspnet-c.html

http://code.google.com/p/google-gdata/

http://www.dotblogs.com.tw/lastsecret/archive/2010/10/06/18157.aspx

 

 


以上文章敘述如有錯誤及觀念不正確,請不吝嗇指教
如有侵權內容也請您與我反應~謝謝您 :)