/googleanalytics4r

An R package that wraps the Google Analytics API

Primary LanguageR

An R package that wraps the Google Analytics API

The code is ugly and probably very 'un-R-like'. It does, however, get data into R for further hackery, which was my goal.

Example usage:

    library(googleanalytics4r)
    library(xts)
    library(ggplot2)

    build.trend.data <- function(xml,period="months",metric=NULL) {
                    doc <- xmlTreeParse(xml,useInternalNodes=TRUE)

                    m <- parse.metric.data(doc,metric)
                d <- parse.dimension.data(doc,"ga:date")
                site_name <- xpathSApply(doc,"//dxp:tableName",xmlValue)

                x <- try.xts(as.numeric(m),as.Date(d,"%Y%m%d"))
                ep <- endpoints(x,period)
                x.period <- period.apply(x,ep,sum)
                colnames(x.period) <- site_name

                    return(x.period)
    }

    reshape.data <- function(l) {
                 df <- do.call("cbind",lapply(l,function(x) reclass(as.data.frame(x))))
                 df$date <- index(as.xts(df))
                 df <- melt(df,id="date")
    }

    auth_token <- google.login(EMAIL,PASSWORD) # replace with you google login

    start_date <- "2010-01-01"
    end_date <- as.character(Sys.Date() - 1)

    profile_ids <- c("ga:XXXXXXX","ga:XXXXXXX") # replace with your sites

    period="weeks"

    trend.xml <- lapply(profile_ids,
              get.analytics.data,
              auth_token=auth_token,
              start_date=start_date,
              end_date=end_date,
              dimensions="ga:date",
              metrics="ga:pageviews,ga:visits,ga:newVisits,ga:timeOnSite",
              sort="ga:date",
              filters="ga:browser!=Opera")

pageview.trend.data <- lapply(trend.xml,
                    build.trend.data,
                    period=period,metric="ga:pageviews")

pageviews <- reshape.data(pageview.trend.data)
colnames(pageviews) <- c("date","url","pageviews")

qplot(x=date,y=pageviews,data=pageviews,geom="line",colour=url,xlab="date",ylab="pageviews") + scale_y_continuous(formatter="comma") + opts(title="Weekly Pageviews")