Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
358 views
in Technique[技术] by (71.8m points)

c# - Google Analytics API - Programmatically fetch page views in server side

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 ?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
    //-------------- Get Auth Token -------------------

    WebClient webClient = new WebClient();
    NameValueCollection data = new NameValueCollection();
    data.Add("accountType", "GOOGLE");
    data.Add("Email", "[email protected]");
    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[] { "
" }, StringSplitOptions.RemoveEmptyEntries);            
        return tokens.Where(token => token.StartsWith("Auth=")).Single();
    }

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...