谷歌Analytics(分析)API - 编程获取在服务器端的页面访问量 [英] Google Analytics API - Programmatically fetch page views in server side

查看:251
本文介绍了谷歌Analytics(分析)API - 编程获取在服务器端的页面访问量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们有一个包含几个页面的Web应用程序。我们注册的Web应用程序域谷歌分析和页面浏览量跟踪按预期工作(在分析面板,我们可以看到每一页的意见)。现在,我们希望这个页面访问量信息被存储在我们的数据库里面的后端。因此,我们要创建一个后台进程,每天运行一次,并且可以从Analytics(分析)API的页面访问量。



这当然需要在代码完成。从最初的研究,似乎为了访问分析API的认证过程必须发生,这意味着人类用户必须键入一个id和密码。



现在的问题是,是否可以用代码只?


解决方案
<完成pre> // --------------获取身份验证令牌-------------------

Web客户端Web客户端=新的WebClient();
的NameValueCollection数据=新的N​​ameValueCollection();
data.Add(ACCOUNTTYPE,GOOGLE);
data.Add(电子邮件,xxxx@gmail.com);
data.Add(的passwd,XXXX); // passwd中没有一个拼写错误。
data.Add(服务,分析);
data.Add(源,XXXX-XXXX-XX); //可以是任何东西。

字节[]字节= webClient.UploadValues​​(https://www.google.com/accounts/ClientLogin,POST,数据);
字符串标记= Encoding.UTF8.GetString(字节);
串的authToken = extractAuthToken(标记);

// --------------获取页面访问量-------------------

串饲料=htt​​ps://www.google.com/analytics/feeds/data;

//要求:
字符串ID =GA:XXXX;
线指标=GA:浏览量
字符串的startDate =2011-06-25;
字符串结束日期=2011-07-25;

//可选:
串尺寸=GA:PAGEPATH
串排序=-ga:浏览量 ?

串feedUrl =的String.Format({0} IDS = {1}&安培;尺寸= {2}&安培;指标= {3}&安培;排序= {4}&安培;开始 - 日期= {5}&安培;结束日期= {6},
饲料,IDS,维度,指标排序,的startDate,结束日期);

webClient.Headers.Add(授权,的GoogleLogin+的authToken);
字符串结果= webClient.DownloadString(feedUrl);

// --------------提取数据从XML -------------------

的XDocument XML = XDocument.Parse(结果);
VAR NS1 ={} http://www.w3.org/2005/Atom;
VAR NS2 ={} http://schemas.google.com/analytics/2009;

变种Q =从xml.Descendants()入口
,其中entry.Name == NS1 +项
选择新的
{
PAGEPATH = entry.Element(NS2 +维)。属性(值)。价值
浏览= entry.Element(NS2 +指标)。属性(值)。价值
};

// --------------做一些与数据-------------------
的foreach(在q VAR页)
{
的Debug.WriteLine(page.PagePath ++ page.Views);
}

// --------------帮助方法-------------------
私人字符串extractAuthToken(字符串数据)
{
VAR令牌= data.Split(新的String [] {\\\
},StringSplitOptions.RemoveEmptyEntries);
返回tokens.Where(标记=> token.StartsWith(验证=))单()。
}


We have a web application that consists of several pages. We registered our web app domain to Google Analytics and page views tracking works as expected (In the Analytics panel we can see page views for each page). Now we want this page views info to be stored in the back-end inside our DB. So we want to create a back-end process that will run once each day, and fetch the page views from Analytics API.

This is of course need to be done in code. From initial research it seems that in order to access Analytics API an authentication process must take place, meaning a human user must type in an id and password.

The question is, can it be done with code only ?

解决方案

    //-------------- Get Auth Token -------------------

    WebClient webClient = new WebClient();
    NameValueCollection data = new NameValueCollection();
    data.Add("accountType", "GOOGLE");
    data.Add("Email", "xxxx@gmail.com");
    data.Add("Passwd", "xxxx");//Passwd, not a misspell.
    data.Add("service", "analytics");
    data.Add("source", "xxxx-xxxx-xx");//Could be anything.

    byte[] bytes = webClient.UploadValues("https://www.google.com/accounts/ClientLogin", "POST", data);
    string tokens = Encoding.UTF8.GetString(bytes);
    string authToken = extractAuthToken(tokens);

    //-------------- Get page views -------------------

    string feed = "https://www.google.com/analytics/feeds/data";

    //Required:
    string ids = "ga:xxxx";
    string metrics = "ga:pageviews";
    string startDate = "2011-06-25";
    string endDate = "2011-07-25";

    //Optional:
    string dimensions = "ga:pagePath";
    string sort = "-ga:pageviews";            

    string feedUrl = string.Format("{0}?ids={1}&dimensions={2}&metrics={3}&sort={4}&start-date={5}&end-date={6}",
        feed, ids, dimensions, metrics, sort, startDate, endDate);

    webClient.Headers.Add("Authorization", "GoogleLogin " + authToken);
    string result = webClient.DownloadString(feedUrl);

    //-------------- Extract data from xml -------------------

    XDocument xml = XDocument.Parse(result);
    var ns1 = "{http://www.w3.org/2005/Atom}";
    var ns2 = "{http://schemas.google.com/analytics/2009}";

    var q = from entry in xml.Descendants()
            where entry.Name == ns1 + "entry"
            select new
            {
                PagePath = entry.Element(ns2 + "dimension").Attribute("value").Value,
                Views = entry.Element(ns2 + "metric").Attribute("value").Value
            };

    //-------------- Do something with data -------------------
    foreach (var page in q)
    {
        Debug.WriteLine(page.PagePath + " " + page.Views);                
    }

    //-------------- Help Method -------------------
    private string extractAuthToken(string data)
    {          
        var tokens = data.Split(new string[] { "\n" }, StringSplitOptions.RemoveEmptyEntries);            
        return tokens.Where(token => token.StartsWith("Auth=")).Single();
    }

这篇关于谷歌Analytics(分析)API - 编程获取在服务器端的页面访问量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆