#' @importFrom magrittr %>% #' @importFrom purrr map list_rbind get_updated_cran_packages <- function(date = lubridate::today()) { feed <- get_cranberry_feed() # Apply the function to each item and bind the results into a data frame results <- map(feed, ~ process_cranberry_rss(.x, date)) %>% list_rbind() return(results) } #' @importFrom xml2 read_xml xml_find_all get_cranberry_feed <- function(feed = "https://dirk.eddelbuettel.com/cranberries/cran/updated/index.rss") { # Fetch and parse the RSS feed rss_content <- read_xml(feed) # Extract item nodes items <- xml_find_all(rss_content, "//item") return(items) } #' @importFrom lubridate dmy_hms as_date #' @importFrom xml2 xml_text xml_find_first process_cranberry_rss <- function(feed, date = lubridate::today()) { title <- xml_text(xml_find_first(feed, "title")) pub_date_text <- xml_text(xml_find_first(feed, "pubDate")) pub_date <- dmy_hms(pub_date_text) pub_date <- as_date(pub_date) if (!is.na(pub_date) && pub_date == date) { package_info <- strsplit(title, " ")[[1]] package_name <- package_info[2] package_version_new <- package_info[7] package_version_old <- package_info[12] previous_update_date <- package_info[14] return(data.frame( "name" = package_name, "version_new" = package_version_new, "date_updated" = pub_date, "version_old" = package_version_old, "previous_update_date" = previous_update_date )) } else { return(NULL) } }