50 lines
1.5 KiB
R
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)
|
|
}
|
|
}
|