library(knitr)
library(kableExtra)
custom_period <- seq(ymd("2022-01-01"), ymd("2022-02-24"), by = "1 day")
get_data_for_date <- function(date) {
url <- paste0("https://minfin.com.ua/ua/currency/mb/archive/usd/", format(date, "%d-%m-%Y"), "/")
page <- read_html(url)
tryCatch({
page <- read_html(url)
table <- html_table(page)[[1]]
if (nrow(table) == 1) {
message(paste("Table is empty for date:", date))
return(NULL)
}
table_tbl <- table[, 1:3] %>%
rename(
Time = names(table)[1],
BuyRateUAH = names(table)[2],
SellRateUAH = names(table)[3]
) %>%
filter(!is.na(Time) & Time != "") %>%
mutate(Date = date)
}, error = function(e) {
print(paste("Error scraping data for:", date))
scraped_data[[as.character(date)]] <- NA
})
return(table_tbl)
}
data_list <- lapply(custom_period, get_data_for_date)
final_data <- data_list %>%
keep(~ !is.null(.x)) %>%
bind_rows()
final_data %>%
kable("html", caption = "Currency Rates (USD to UAH)", align = "c") %>%
kable_styling(
bootstrap_options = c("striped", "hover", "condensed"),
full_width = F
) %>%
column_spec(1, width = "15em") %>%
column_spec(2, width = "10em", color = "blue") %>%
column_spec(3, width = "10em", color = "red") %>%
add_header_above(c(" " = 1, "Rates" = 3)) %>%
row_spec(0, bold = TRUE, font_size = 14)