Я создаю скрипт, который будет автоматически очищать ежемесячные данные с сайта. Он загружает zip-файл и распаковывает его. Иногда веб-сайт не обновляет свои данные вовремя, поэтому мне нужно установить условие, при котором он пытается выполнить URL-адрес, связанный с самым последним месяцем (например, m202002.zip), и в случае сбоя он получает данные за предыдущий месяц ( ex - m202001.zip).
Вот базовый c скрипт загрузки:
if (!require('lubridate')) install.packages('lubridate', repos = 'http://cran.us.r-project.org', dependencies=TRUE); library('lubridate')
if (!require('download')) install.packages('download', repos = 'http://cran.us.r-project.org', dependencies=TRUE); library('download')
# Set dates
today <- Sys.Date() # today
current_year <- format(as.Date(Sys.Date()), '%Y') # current year
previous_1month <- format(as.Date(today %m+% months(-1)), '%m') # last month
previous_2month <- format(as.Date(today %m+% months(-2)), '%m') # month before last
# Set directory
data_dir <- 'G:/path/to/file/'
website_dir <- 'https://edcintl.cr.usgs.gov/downloads/sciweb1/shared/uswem/web/conus/eta/modis_eta/monthly/downloads/m'
# Download and unpack most recent file
download.file(paste0(website_dir, current_year, previous_1month, '.zip'), destfile=paste0(data_dir, 'test.zip'), mode='wb')
unzip(paste0(data_dir, 'test.zip'), exdir=data_dir)
Я думаю, мне нужно время while () l oop, которое я не супер знаком с. Вот мой подход, но код не работает. Похоже, что загружается только второй файл независимо от обстоятельств (например, если я предоставлю исходный доступный URL-адрес, он не загружает его, а только второй).
while(TRUE)
{
zip <- download.file(paste0(website_dir, current_year, previous_1month, '.zip'), destfile=paste0(data_dir, 'test.zip'), mode='wb')
if(!is(zip, 'try-error')) break
{
next
}
else
{
zip <- download.file(paste0(website_dir, current_year, previous_2month, '.zip'), destfile=paste0(data_dir, 'test.zip'), mode='wb')
}
}
unzip(paste0(data_dir, 'test.zip'), exdir=data_dir)