#' Filter search result and keep only people
#'
#' @param search A data frame generated by `sn_search_wiki()`, or a search query. If a data frame is given, language and limits are ignore.
#' @param language Language to be used for the search.
#' @param limit Maximum numbers of responses to be given.
#'
#' @return A data frame with three columns, `id`, `label`, and `description`; all rows refer to a human being.
#' @export
#'
#' @examples
#' \dontrun{
#' sn_search_wiki("Antonio Vivaldi") %>%
#' sn_filter_people()
#' }
#'
sn_filter_people <- function(search,
language = "ro",
limit = 10) {
if (is.data.frame(search) == TRUE) {
search_result <- search
} else if (length(search) > 1) {
usethis::ui_stop("Input must be a single query or a data frame generated by `sn_search_wiki()`")
} else if (is.character(search) == TRUE) {
search_result <- streetnamer::sn_search_wiki(
search = search,
language = language,
limit = limit
)
}
person_id <- purrr::map_dfr(
.x = search_result$id[2],
.f =
function(current_id) {
current_wiki <- streetnamer::sn_tidy_wiki(id = current_id)
current_value <- current_wiki %>%
dplyr::filter(property == "P31") %>%
dplyr::pull(value)
if (is.null(current_value)) {
tibble::tibble(id = as.character("NA"))
} else if (current_value == "Q5") {
tibble::tibble(id = current_id)
} else {
tibble::tibble(id = as.character("NA"))
}
}
) %>%
tidyr::drop_na()
search_result %>%
dplyr::semi_join(y = person_id, by = "id")
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.