check_airtable <- function(check_dots = TRUE, env = parent.frame()) {
if (check_dots) {
ellipsis::check_dots_used(env)
}
stopifnot(requireNamespace("httr", quietly = TRUE))
stopifnot(requireNamespace("tidyr", quietly = TRUE))
stopifnot(requireNamespace("tibble", quietly = TRUE))
}
#' Airtable driver
#'
#' @export
airtable <- function() {
check_airtable(check_dots = FALSE)
new_driver("Airtable", "datafire_airtable_driver")
}
#' @export
connect.datafire_airtable_driver <- function(x, api_key, base_id, ...) {
check_airtable()
header <- httr::add_headers(Authorization = paste("Bearer", api_key))
url <- paste0("https://api.airtable.com/v0/", base_id)
endpoint <- function(...) {
paste0(url, ...)
}
new_connection(
driver = x,
header = header,
endpoint = endpoint,
class = "datafire_airtable_connection"
)
}
#' @export
disconnect.datafire_airtable_connection <- function(x, ...) {
check_airtable()
rm("header", "endpoint", envir = x)
invisible(x)
}
#' @export
is_connected.datafire_airtable_connection <- function(x, ...) {
check_airtable()
exists("header", envir = x)
}
#' @export
read_dataset.datafire_airtable_connection <- function(src, name, ...) {
check_airtable()
res <- httr::GET(src$endpoint("/", name), src$header)
httr::stop_for_status(res, paste("read dataset", name))
data <- tibble::tibble(record = httr::content(res)$records)
data <- tidyr::hoist(data, .data[["record"]],
`_id` = "id",
`_createdTime` = "createdTime",
fields = "fields"
)
data <- tidyr::unnest_wider(data, .data[["fields"]])
data
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.