R/userscrap.R

#' userscrap
#'
#' Use twitterscraper to scrap tweets of a user.
#'
#' @importFrom stringi stri_rand_strings
#' @importFrom stringr str_remove
#' @import dplyr
#' @import readr
#' @param request The query corresponding to the datas to search for. Must be a twitter username
#' @return The datas of the sent request.
#' @export

userscrap <- function(request) {

  request <- str_remove(request, "@")

  tempfile_name <- stringi::stri_rand_strings(1, 28, '[a-z]')

  system(paste0("twitterscraper \"", request,"\" -u -c -o ", tempfile_name, ".csv"))

  if ((paste0(tempfile_name, ".csv") %in% list.files(".")) == FALSE) {

    stop("No tweet retrieved.")

  }

  datas <- read_csv(paste0(tempfile_name, ".csv"), col_types = cols(
    user = col_character(),
    fullname = col_character(),
    `tweet-id` = col_character(),
    timestamp = col_datetime(format = ""),
    url = col_character(),
    likes = col_integer(),
    replies = col_integer(),
    retweets = col_integer(),
    text = col_character(),
    html = col_character()
  )) %>%
    rename(status_id = `tweet-id`,
           screen_name = user,
           name = fullname,
           created_at = timestamp,
           favorite_count = likes,
           retweet_count = retweets,
           reply_count = replies) %>%
    mutate(url = paste0("https://twitter.com", url),
           is_retweet = ifelse(screen_name != request, TRUE, FALSE),
           text = ifelse(screen_name != request, paste0("RT @", screen_name, ": ", text), text),
           screen_name = request) %>%
    select(status_id, screen_name, created_at, text, favorite_count, retweet_count, reply_count, is_retweet, name, url)

  file.remove(paste0(tempfile_name, ".csv"))

  datas

}
edouardschuppert/twitterscrape.R documentation built on May 21, 2019, 4:05 a.m.