Nothing
## ---- include = FALSE---------------------------------------------------------
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>"
)
## ----setup--------------------------------------------------------------------
library("tibble")
library("jsonlite")
library("purrr")
## -----------------------------------------------------------------------------
str(mtcars[, c("wt", "mpg")])
str(mtcars[, "mpg"])
## -----------------------------------------------------------------------------
str(mtcars[, "mpg", drop = FALSE])
## -----------------------------------------------------------------------------
str(as_tibble(mtcars)[, "mpg"])
## -----------------------------------------------------------------------------
content <-
fromJSON(
'{
"entries": [
{
"id": "12345",
"etag": "1",
"type": "file",
"sequence_id": "3",
"name": "Contract.pdf",
"sha1": "85136C79CBF9FE36BB9D05D0639C70C265C18D37",
"file_version": {
"id": "12345",
"type": "file_version",
"sha1": "134b65991ed521fcfe4724b7d814ab8ded5185dc"
}
}
],
"limit": 1000,
"offset": 2000,
"order": [
{
"by": "type",
"direction": "ASC"
}
],
"total_count": 5000
}',
simplifyVector = FALSE
)
## -----------------------------------------------------------------------------
str(content)
## -----------------------------------------------------------------------------
# we could imagine this as a function that would contain all our parsing rules
parse_entry <- function(entry) {
# if we import tidyselect, we can use functions like `ends_with()`
entry <- purrr::map_at(entry, c("etag", "sequence_id"), as.numeric)
entry <- purrr::map_if(entry, is.list, parse_entry)
entry
}
entries <-
content$entries %>%
map(parse_entry)
str(entries)
## -----------------------------------------------------------------------------
boxr:::stack_rows_df(entries)
## -----------------------------------------------------------------------------
boxr:::stack_rows_tbl(entries)
## ----eval=FALSE---------------------------------------------------------------
# library("boxr")
#
# box_auth()
## ----eval=FALSE---------------------------------------------------------------
# # this works for Ian's Box account - no-one else
# dir_id <- "123053109701"
#
# # returns a httr response object
# box_api_response <- function(verb, endpoint) {
#
# response <-
# httr::RETRY(
# verb,
# glue::glue("https://api.box.com/2.0/{endpoint}"),
# boxr:::get_token(),
# terminate_on = boxr:::box_terminal_http_codes()
# )
#
# response
# }
#
# response <- box_api_response("GET", glue::glue("folders/{dir_id}/items/"))
#
# response
## -----------------------------------------------------------------------------
box_content <- function(response, task = NULL) {
httr::stop_for_status(response, task = task)
text <- httr::content(response, as = "text", encoding = "UTF-8")
# we may want to deviate from the defaults
content <- jsonlite::fromJSON(text, simplifyDataFrame = FALSE)
content
}
## ----eval=FALSE---------------------------------------------------------------
# content <- box_content(response, task = "get directory listing")
#
# str(content)
## ----eval=FALSE---------------------------------------------------------------
# box_parse_entries <- function(entries) {
# purrr::map(entries, parse_entry)
# }
#
# parsed <- box_parse_entries(content$entries)
#
# str(parsed)
## ----eval=FALSE---------------------------------------------------------------
# tbl <- boxr:::stack_rows_tbl(parsed)
#
# tbl
## ----eval=FALSE---------------------------------------------------------------
# box_dir_info <- function(dir_id) {
#
# response <- box_api_response("GET", glue::glue("folders/{dir_id}/items/"))
#
# entries <- box_content(response, task = "get directory listing")[["entries"]]
#
# # The above is an oversimplification. In actuality, these two functions
# # would be combined into one function that would take care of the pagination,
# # something like:
# #
# # entries <-
# # box_api_entries(
# # "GET",
# # endpoint = glue::glue("folders/{dir_id}/items/"),
# # task = "get directory listing"
# # )
# #
# # box_api_entries() would call box_api_response() and box_content()
#
# parsed <- box_parse_entries(entries)
#
# stacked <- boxr:::stack_rows_tbl(parsed)
#
# # not doing anything here, but box_version_history() changes some columns
# wrangled <- stacked
#
# wrangled
# }
#
# box_dir_info(dir_id)
## -----------------------------------------------------------------------------
boxr:::string_side_effects()
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.