#' Create a collection in Zotero
#'
#' Create a collection in Zotero. If a collection by the same name exists, it does not create a new one, but rather outputs the id of that collection.
#'
#' Creating a collection needs an API with write access
#'
#' @param collection_name Name of the collection to be added
#' @param user Zotero userId
#' @param credentials Either an R object created with AuthZot(store = TRUE), or an API secret key with write access created at https://www.zotero.org/settings/keys
#' @return The key of the newly created collection (or of the pre-existing collection, if already one with the same name exists) as a character vector
#' @export
#' @examples
#'
#' key <- zot_create_collection(user = 12345, collection_name = "ZoteroRtest", credentials = "<API>")
zot_create_collection <- function(collection_name, user = NULL, credentials = NULL) {
if (is.null(user) == TRUE) {
user <- zot_options("user")
}
if (is.null(credentials) == TRUE) {
credentials <- zot_options("credentials")
}
if (is.null(credentials)==TRUE|is.null(user)==TRUE) {
stop("User and credentials must be provided, either as parameter or with the dedicated function ZotSetOptions(user = 12345, credentials = <API>)")
}
if (class(credentials)[1]=="OAuth") {
secret <- credentials$oauthSecret
} else {
secret <- credentials
}
# Check if collection by the same name exists
collections <- jsonlite::fromJSON(txt = paste0("https://api.zotero.org/users/", user, "/collections/top", "?key=", secret))
key <- collections$key[grepl(pattern = collection_name, x = collections$data$name)]
if (length(key)==0) { # if collection does not exist, create it
response <- httr::POST(url = paste0("https://api.zotero.org/users/", user, "/collections?key=", secret),
config = httr::add_headers("Content-Type : application/json",
paste(sample(c(0:9, letters, LETTERS),
32,
replace=TRUE),
collapse="")),
body = jsonlite::toJSON(x = tribble(~name, collection_name)))
#parse positive response to extract key
response <- jsonlite::fromJSON(txt = sub(pattern = ".* kB", replacement = "", x = response))
key <- response$successful$`0`$data$key
}
key
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.