摘要:[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 內取得網站的瀏覽量等資訊,很方便吧!
範例程式碼
參考資料
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
以上文章敘述如有錯誤及觀念不正確,請不吝嗇指教
如有侵權內容也請您與我反應~謝謝您 :)