Nothing
#' Search VIAF records
#'
#' Search VIAF records where the authority includes the given terms.
#'
#' @param query The search query (or queries) to get data for.
#' @param ... Optional VIAF API query parameters.
#' @return A named list of tibbles with data items.
#'
#' @note An internet connection is required. The MARC 21 field
#' definitions are used.
#'
#' @examples
#' \donttest{viaf_search(c("Rembrandt", "Jane Austen"))}
#'
#' @importFrom purrr map set_names
#' @importFrom magrittr "%>%"
#'
#' @rdname search
#' @export
viaf_search <- function(query = NULL, ...) {
if (is.null(query)) {
stop("VIAF query could not be parsed.")
}
if (is.list(query)) query <- unlist(query)
assertthat::assert_that(is.vector(query))
if (any(sapply(query, nchar) == 0)) {
warning("At least one VIAF query is empty.")
}
endpoint <- "search"
items <- map(
query,
viaf_retrieve_query,
endpoint = endpoint,
...
) %>%
map(get_search) %>%
set_names(query)
return(items)
}
#' @importFrom dplyr rename select
#' @importFrom magrittr "%>%"
#' @importFrom purrr map_chr
#' @importFrom rlang .data
get_search <- function(x) {
if (!is.null(x)) {
response <- x$searchRetrieveResponse
n_records <- response$numberOfRecords
} else {
n_records <- 0 # acts as a surrogate
}
if (as.integer(n_records) == 0) {
return(
tibble(
viaf_id = NA,
source_ids = list(),
name_type = NA,
text = list()
)
)
}
x <- response$records$record$recordData
source_ids <- x$sources$source
if (is.data.frame(source_ids)) {
source_ids <- purrr::transpose(source_ids)
}
metadata <- tibble::as_tibble(x) %>%
rename(
viaf_id = "viafID",
name_type = "nameType"
) %>%
mutate(
source_ids = map(!!source_ids, get_source_ids),
text = map(split(x, 1:nrow(x)), get_text)
)
metadata <- get_name_type(metadata) %>%
select(
"viaf_id",
"source_ids",
"name_type",
"text"
)
return(metadata)
}
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.