build-cran-binaries/R/get_updated_packages.R
2024-06-02 13:05:39 +02:00

50 lines
1.5 KiB
R

#' @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)
}
}