调用RStudio Connect接口获取近60天应用统计数据报错咨询
RStudio Connect 60天部署应用使用统计数据获取方案
核心问题说明
- 时间格式兼容性问题:原代码构造的起始时间参数时区后缀
-00:00在部分版本的RStudio Connect中会被识别为无效时间范围,导致仅返回少量匹配结果或无结果。 - 空值判断逻辑错误:API返回的未登录用户标识为
NA而非NULL,原代码的is.null()判断逻辑完全不生效,匿名用户标识无法正常替换。 - API分页未处理:RStudio Connect的运行数据接口默认最多返回100条记录,60天的使用数据通常远超该阈值,未处理分页的情况下仅能拿到第一页的少量数据。
- 字段映射逻辑冲突:原代码构造的tibble字段名与API返回的原生字段名不一致,容易引发后续统计时的字段匹配错误。
修复后可直接运行的代码
rsc_server <- "https://rstudio.hartxxx.com/" Sys.setenv("RSTUDIO_CONNECT_API_KEY" = rstudioapi::askForPassword("Enter Connect Token:Uxxx")) library(httr) library(purrr) library(tibble) library(dplyr) # 支持分页拉取所有结果的通用请求函数 rsc_get_all <- function(endpoint_call){ all_results <- list() next_path <- paste0("__api__/v1/", endpoint_call) rsc_auth <- add_headers(Authorization = paste("Key", Sys.getenv("RSTUDIO_CONNECT_API_KEY"))) while(!is.null(next_path)){ rsc_call <- paste0(rsc_server, next_path) resp <- GET(rsc_call, rsc_auth) stop_for_status(resp) # 新增请求错误校验,快速定位权限/接口异常 resp_content <- content(resp) all_results <- c(all_results, resp_content$results) next_path <- resp_content$paging$`next` # 自动读取下一页请求路径 } return(all_results) } # 构造符合RFC3339标准的UTC起始时间,适配所有版本的RStudio Connect start_time <- format(as.POSIXct(Sys.Date() - 60, tz = "UTC"), "%Y-%m-%dT%H:%M:%SZ") rsc_shiny_results <- rsc_get_all(paste0("instrumentation/shiny/usage?from=", start_time)) # 构造结构化使用数据表 shiny_usage <- map_dfr( rsc_shiny_results, ~ tibble( content_guid = .x$content_guid, user_guid = ifelse(is.na(.x$user_guid), "anonymous", .x$user_guid), started = as.POSIXct(.x$started), ended = as.POSIXct(.x$ended), data_version = .x$data_version, session_duration = as.difftime(ended - started, units = "mins") ) ) # 查看结果结构 glimpse(shiny_usage)
结果验证方式
- 执行
nrow(shiny_usage)查看总记录条数,可与RStudio Connect后台的访问统计面板数据做一致性校验 - 可通过
group_by(content_guid)对数据分组,计算每个应用的总访问次数、累计访问时长、独立访问用户数等自定义统计指标
内容的提问来源于stack exchange,提问作者NewInPython
相关产品推荐
相关产品推荐

