You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.5 KiB
58 lines
1.5 KiB
as_tibble <- function(.x) {
|
|
|
|
out <- as.data.frame(.x, stringsAsFactors = FALSE)
|
|
class(out) <- c("tbl_df", "tbl", "data.frame")
|
|
out
|
|
|
|
}
|
|
|
|
#' Parse a vector of user agents into a data frame
|
|
#'
|
|
#' Takes in a character vector of user agent strings and returns a data frame classed as tibble.
|
|
#' of parsed user agents.
|
|
#'
|
|
#' @param user_agents a character vector of user agents
|
|
#' @param .progress if `TRUE` will display a progress bar in interactive mode
|
|
#' @export
|
|
#' @return a data frame classed as tibble with columns for user agent family, major & minor versions
|
|
#' plus patch level along with OS family and major & minor versions plus
|
|
#' device brand and model.
|
|
#' @references <http://www.uaparser.org/>
|
|
#' @note The regex YAML import date: 2020-03-31
|
|
#' @examples
|
|
#' ua_parse(paste0("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.2 (KHTML, ",
|
|
#' "like Gecko) Ubuntu/11.10 Chromium/15.0.874.106 ",
|
|
#' "Chrome/15.0.874.106 Safari/535.2", collapse=""))
|
|
ua_parse <- function(user_agents, .progress=FALSE) {
|
|
|
|
if (.progress) pb <- progress::progress_bar$new(length(user_agents))
|
|
if (.progress) pb$tick(0)
|
|
|
|
lapply(user_agents, function(x) {
|
|
|
|
if (.progress) pb$tick()$print()
|
|
|
|
res <- .pkgenv$cache[[x]]
|
|
|
|
if (length(res) > 0) {
|
|
|
|
res
|
|
|
|
} else {
|
|
|
|
.pkgenv$cache[[x]] <- as_tibble(as.list(unlist(.pkgenv$ctx$call("parser.parse", x))))
|
|
.pkgenv$cache[[x]]
|
|
|
|
}
|
|
|
|
}) -> out
|
|
|
|
out <- bind_rows(out)
|
|
|
|
as_tibble(out)
|
|
|
|
}
|
|
|
|
#' @rdname ua_parse
|
|
#' @export
|
|
get_cache <- function() { .pkgenv$cache }
|
|
|