R/info.R

Defines functions tk_info

Documented in tk_info

#' tk_info
#' @description Function to get information on a given user/hashtag/piece of music
#' @param scope Character indicating the endpoint to scrape (must be "hashtag", "user"
#'   or "music")
#' @param query Character indicating the username/hashtag/music_id to scrape
#' @export
#' @examples
#'
#' \dontrun{
#' # Get info about a user:
#' tk_info(scope = "user", query = "willsmith")
#' # Get info about a hashtag
#' tk_info(scope = "hashtag", query = "cosplay")
#' }
tk_info <- function(scope, query, ...){

  res <- switch(
    scope,

    "user" = {
      url <- get_url("username", query_1 = query)
      tmp <- get_data(url, ...)
      if("found" %in% names(tmp)) return(tibble::tibble(query = query, found = F))
      tmp$userInfo

    },

    "hashtag" = {
      url <- get_url("hashtag", query_1 = query)
      tmp <- get_data(url, ...)
      if("found" %in% names(tmp)) return(tibble::tibble(query = query, found = F))
      tmp
    },

    "music" = {
      tmp <- tk_posts(scope = "music", query = query, n = 1, ...)
      if("found" %in% names(tmp)){
        return(tibble::tibble(query = query, found = F))
      }
      tmp
    },
    "post" = {
      url <- get_url("post", query_1 = query)
      tmp <- get_data(url, ...)
      if("found" %in% names(tmp)){
        return(tibble::tibble(query = query, found = F))
      }
      tmp
    }
  )

  if("found" %in% names(res)){
    return(tibble::tibble(query = query, found = F))
  }

  if(is.null(res)){
    return(tibble::tibble(query = query, found = F))
  }

  out <- res %>%
    rlist::list.flatten() %>%
    purrr::imap_dfc(~{
      if(length(.x) == 1){
        return(tibble::tibble(.x) %>% purrr::set_names(.y))
      } else {
        return(tibble::tibble(list(.x)) %>% purrr::set_names(.y))
      }
    }) %>%
    dplyr::mutate(query = query)

  return(out)
}
benjaminguinaudeau/tiktokr documentation built on Jan. 17, 2021, 8:52 a.m.