forked from 8-bit-sheep/googleAnalyticsR
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ga_v3_get.R
146 lines (136 loc) · 5.68 KB
/
ga_v3_get.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#' Get Google Analytics v3 data (formerly google_analytics())
#'
#' Legacy v3 API, for more modern API use [google_analytics].
#'
#' @param id A character vector of View Ids to fetch from.
#' @param start Start date in YYY-MM-DD format.
#' @param end End date in YYY-MM-DD format.
#' @param metrics A character vector of metrics. With or without ga: prefix.
#' @param dimensions A character vector of dimensions. With or without ga: prefix.
#' @param sort How to sort the results, in form 'ga:sessions,-ga:bounceRate'
#' @param filters Filters for the result, in form 'ga:sessions>0;ga:pagePath=~blah'
#' @param segment How to segment.
#' @param samplingLevel Level of precision of the API requests
#' @param max_results Default 100. If greater than 10,000 then will batch GA calls.
#' @param type ga = Google Analytics v3; mcf = Multi-Channel Funels.
#'
#' @return For one id a data.frame of data, with meta-data in attributes.
#'
#' @seealso https://developers.google.com/analytics/devguides/reporting/core/v3/
#'
#' @examples
#'
#' \dontrun{
#'
#' library(googleAnalyticsR)
#'
#' ## Authenticate in Google OAuth2
#' ## this also sets options
#' ga_auth()
#'
#' ## if you need to re-authenticate use ga_auth(new_user=TRUE)
#' ## if you have your own Google Dev console project keys,
#' ## then don't run ga_auth() as that will set to the defaults.
#' ## instead put your options here, and run googleAuthR::gar_auth()
#'
#' ## get account info, including View Ids
#' account_list <- ga_account_list()
#' ga_id <- account_list$viewId[1]
#'
#' ## get a list of what metrics and dimensions you can use
#'
#' meta <- ga_meta()
#' head(meta)
#'
#' ## pick the account_list$viewId you want to see data for.
#' ## metrics and dimensions can have or have not "ga:" prefix
#'
#' gadata <- google_analytics_3(id = ga_id,
#' start="2015-08-01", end="2015-08-02",
#' metrics = c("sessions", "bounceRate"),
#' dimensions = c("source", "medium"))
#'
#'
#' ## if more than 10000 rows in results, auto batching
#' ## example is setting lots of dimensions to try and create big sampled data
#' batch_gadata <- google_analytics_3(id = ga_id,
#' start="2014-08-01", end="2015-08-02",
#' metrics = c("sessions", "bounceRate"),
#' dimensions = c("source", "medium",
#' "landingPagePath",
#' "hour","minute"),
#' max=99999999)
#'
#' ## mitigate sampling by setting samplingLevel="WALK"
#' ## this will send lots and lots of calls to the Google API limits, beware
#' walk_gadata <- google_analytics_3(id = ga_id,
#' start="2014-08-01", end="2015-08-02",
#' metrics = c("sessions", "bounceRate"),
#' dimensions = c("source", "medium", "landingPagePath"),
#' max=99999999, samplingLevel="WALK")
#'
#' ## multi-channel funnels set type="mcf"
#' mcf_gadata <- google_analytics_3(id = ga_id,
#' start="2015-08-01", end="2015-08-02",
#' metrics = c("totalConversions"),
#' dimensions = c("sourcePath"),
#' type="mcf")
#'
#'
#' ## reach meta-data via attr()
#' attr(gadata, "profileInfo")
#' attr(gadata, "dateRange")
#'
#'
#' }
#'
#' @importFrom googleAuthR gar_api_generator
#'
#' @export
google_analytics_3 <- function(id,
start,
end,
metrics = c('sessions', 'bounceRate'),
dimensions=NULL,
sort=NULL,
filters=NULL,
segment=NULL,
samplingLevel=c("DEFAULT",
"FASTER",
"HIGHER_PRECISION"),
max_results=100,
type = c("ga", "mcf")) {
samplingLevel <- match.arg(samplingLevel)
start <- as.character(start)
end <- as.character(end)
type <- match.arg(type)
if(!is.null(filters)) {
filters <- utils::URLencode(filters, reserved = TRUE)
}
id <- sapply(id, checkPrefix, prefix = "ga")
metrics <- paste(sapply(metrics, checkPrefix, prefix=type), collapse=",")
dimensions <- paste(sapply(dimensions, checkPrefix, prefix=type), collapse=",")
ga_pars <- list(ids = id,
"start-date"=start,
"end-date"=end,
metrics=metrics,
dimensions=dimensions,
sort=sort,
filters=filters,
segment=segment,
samplingLevel=samplingLevel,
"start-index"=1,
"max-results"=min(10000, max_results),
output="json")
ga_pars <- rmNullObs(ga_pars)
ga <- gar_api_generator(paste0("https://www.googleapis.com/analytics/v3/data/",
type),
"GET",
pars_args = ga_pars,
data_parse_function = parse_google_analytics3,
checkTrailingSlash = FALSE)
results <- gar_api_page(ga,
page_method = "url",
page_f = function(x) attr(x, "nextLink"))
Reduce(dplyr::bind_rows, results)
}