如何获得与用户指南相关的名称
> ## ACTION REQUIRED: Change the server URL below to your server's URL
> Sys.setenv("CONNECT_SERVER" = "https://rstudio.xx.com/")
> ## ACTION REQUIRED: Make sure to have your API key ready
> Sys.setenv("CONNECT_API_KEY" = rstudioapi::askForPassword("Enter Connect Token:"))
> library(ggplot2)
> library(dplyr)
> library(connectapi)
> library(purrr)
> client <- connect()
Defining Connect with server: https://rstudio.hartvillegroup.com/
> # Get and clean the Shiny usage data
> shiny_rsc <- get_usage_shiny(
+ client,
+ from = lubridate::today() - lubridate::ddays(60),
+ limit = Inf
+ ) %>%
+ filter(!is.na(ended)) %>%
+ mutate(session_duration = ended - started)
>
> glimpse(shiny_rsc)
Observations: 129
Variables: 6
$ content_guid <chr> "a261edd3-fa51-4878-8afc-b7fe662a6c37", "a261edd3-fa51-4878...
$ user_guid <chr> "e96068bd-5e9f-4a5a-ab87-483f084f13fa", NA, NA, NA, NA, NA,...
$ started <dttm> 2021-07-06 14:39:24, 2021-07-06 15:08:47, 2021-07-06 21:40...
$ ended <dttm> 2021-07-06 14:49:17, 2021-07-06 16:15:44, 2021-07-06 22:20...
$ data_version <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,...
$ session_duration <drtn> 593 secs, 4017 secs, 2424 secs, 4329 secs, 2642 secs, 3286.
如您所见,user_guid是标识符。如何将它们与实际用户名联系起来?还是总是加密的?
它不是给你一个加密的用户名,它是RStudio的instrumentation API中的用户信息表中的GUID/UUID密钥。
使用connectapi
:
library(connectapi)
client <- connect("https://...", api_key = apikey)
get_users(client)
,其中最后一个字段是"guid"
,应该与您的问题中的user_guid
匹配。注意,您可能需要扩展limit=...
以获得所有用户。输出与下面的httr
-direct API调用相同。
如果您(或某人)选择不使用connectapi
包(例如,它还没有在CRAN上),那么下面的函数以及httr
包(以及我个人使用的data.table
,但该依赖关系可以被删除)将获得完全相同的数据。(参考:https://docs.rstudio.com/connect/api/#get-/v1/users)
library(data.table)
getpages <- function(url, page_number = 1, page_size = 25, page_limit = Inf, apikey = "") {
needqm <- !grepl("\?", url)
firstpass <- TRUE
results <- list()
res0 <- NULL
while (page_number <= page_limit &&
(firstpass || (length(res0) > 0 && nrow(res0) > 0))) {
firstpass <- FALSE
url0 <- sprintf("%s%spage_number=%d&page_size=%d",
url, if (needqm) "?" else "&", page_number, page_size)
res <- httr::GET(url0, httr::add_headers(Authorization = paste("Key", apikey)))
if (isTRUE(res$status_code == 200L)) {
res0 <- suppressWarnings(rbindlist(httr::content(res)$results, use.names = TRUE, fill = TRUE))
results <- c(results, list(res0))
} else {
warning("returned status_code of: ", res$status_code)
break
}
page_number <- page_number + 1L
}
out <- rbindlist(results, use.names = TRUE, fill = TRUE)
out[]
}
userinfo <- getpages("https://rsc.mydomain.com/__api__/v1/users", apikey = "....")
head(userinfo)
# email username first_name last_name user_role created_time updated_time active_time confirmed locked guid
# <char> <char> <char> <char> <char> <char> <char> <char> <lgcl> <lgcl> <char>
# 1: user1@somewhere.com user1 first1 last1 viewer 2019-04-12T23:08:39Z 2019-06-11T09:28:41Z 2019-06-15T08:05:17-04:00 TRUE FALSE 33fdbc12-167f-42e6-b119-816fb46e7de1
# 2: user2@somewhere.com user2 first2 last2 viewer 2019-04-12T23:08:39Z 2019-06-11T09:28:41Z 2019-06-15T08:05:17-04:00 TRUE FALSE becd98ce-472e-4c62-a7c7-63f856ea72d3
# 3: user3@somewhere.com user3 first3 last3 viewer 2019-04-12T23:08:39Z 2019-06-11T09:28:41Z 2019-06-15T08:05:17-04:00 TRUE FALSE 9cc751bb-351d-4613-9b39-af35547a971b
# 4: user4@somewhere.com user4 first4 last4 viewer 2019-04-12T23:08:39Z 2019-06-11T09:28:41Z 2019-06-15T08:05:17-04:00 TRUE FALSE 10276566-6922-4c4b-83b1-30dbe4b8f136
# 5: user5@somewhere.com user5 first5 last5 viewer 2019-04-12T23:08:39Z 2019-06-11T09:28:41Z 2019-06-15T08:05:17-04:00 TRUE FALSE 81c2b393-b862-4615-bbcd-3c2e1d2c990b
# 6: user6@somewhere.com user6 first6 last6 viewer 2019-04-12T23:08:39Z 2019-06-11T09:28:41Z 2019-06-15T08:05:17-04:00 TRUE FALSE 7803fa60-9906-49f3-a26b-157d15a33ddb