################################################################################
#
#'
#' Get the discussion and other details for a particular topic
#'
#' @param link URL for topic discussion
#'
#' @return A tibble containing the topic question
#'
#' @examples
#' links <- get_theme_topics(link = (ennet_themes$links)[4])
#' get_topic_discussions(link = links$Link[1])
#'
#' @export
#'
#
################################################################################
get_topic_discussions <- function(link) {
  ## Read the link
  page <- xml2::read_html(x = link)
  ## Get the theme
  theme <- page %>%
    rvest::html_nodes(css = "#pagebody p a") %>%
    rvest::html_text() %>%
    dplyr::first()
  ## Get the topic
  topic <- page %>%
    rvest::html_nodes(css = "#pagebody h1") %>%
    rvest::html_text()
  ## Get the user
  user <- page %>%
    rvest::html_nodes(css = "#pagebody .post .data h3") %>%
    rvest::html_text()
  ## Get user code
  userCode <- page %>%
    rvest::html_nodes(css = "#pagebody .post .data h3 a") %>%
    rvest::html_attr(name = "href") %>%
    stringr::str_remove_all(pattern = "\\/|\\.aspx")
  ##
  details <- page %>%
    rvest::html_nodes(css = "#pagebody .post .data p") %>%
    rvest::html_text()
  if(length(details) %% 3 == 1) {
    details <- data.frame(details) %>%
      dplyr::filter(
        !stringr::str_detect(string = details,
                             pattern = "automatically translated")
      )
    details <- details[[1]] %>%
      matrix(ncol = 3, byrow = TRUE) %>%
      data.frame()
  } else {
    details <- details %>%
      matrix(ncol = 3, byrow = TRUE) %>%
      data.frame()
  }
  ## Rename details
  names(details) <- c("job", "role", "date_time")
  ## Convert date_time to POSIXct/POSIXt
  details$date_time <- lubridate::dmy_hm(details$date_time)
  ## Is is a question or an answer
  type <- page %>%
    rvest::html_nodes(css = "#pagebody .post") %>%
    rvest::html_attr(name = "id") %>%
    stringr::str_extract(pattern = "Question") %>%
    stringr::str_to_lower() %>%
    stringr::str_replace_na(replacement = "answer")
  ## Code
  code <- vector(mode = "character",
                 length = page %>%
                   rvest::html_nodes(css = "#pagebody .post") %>%
                   length())
  code[1] <- stringr::str_extract(string = link,
                                  pattern = "[0-9]+")
  if(length(code) > 1) {
    ##
    code1 <- page %>%
      rvest::html_nodes(css = "#pagebody .post a") %>%
      rvest::html_attr(name = "name")
    code1 <- code1[stringr::str_detect(string = code1,
                                       pattern = "answer")] %>%
      stringr::str_extract_all(pattern = "[0-9]+", simplify = TRUE)
    code1 <- code1[!is.na(code1)]
    ##
    code[seq(from = 2, to = length(code), by = 1)] <- code1
  }
  ## Post
  post <- page %>%
    rvest::html_nodes(css = "#pagebody .body") %>%
    rvest::html_text()
  ## Concatenate
  discussion <- data.frame(theme, topic, user, userCode,
                           details, type, code, post)
  ## Convert to tibble
  discussion <- tibble::tibble(discussion)
  ## Return discussion
  return(discussion)
}
################################################################################
#
#'
#' Get the discussion and details of discussion for a set of topics
#'
#' @param links A tibble of topics containing URL of topic discussion. This
#'   is provided using a call to [get_theme_topics()] or
#'   [get_themes_topics()]
#'
#' @return A tibble containing the topic discussions for selected topic/s
#'
#' @examples
#' links <- get_theme_topics(link = (ennet_themes$links)[4])
#' get_topics_discussions(link = links[1:3, ])
#'
#' @export
#'
#'
#'
#
################################################################################
get_topics_discussions <- function(links) {
  ## Get vector of links
  topicLinks <- links$Link
  ##
  discussions <- lapply(X = topicLinks,
                        FUN = get_topic_discussions) %>%
    dplyr::bind_rows()
  ## Return discussions
  return(discussions)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.