Автоматическая очистка данных с веб-страницы, которая отправляет ссылку на скачивание по электронной почте, используя R - PullRequest
0 голосов
/ 26 сентября 2019

Я пытаюсь загрузить данные со следующего веб-сайта: https://mrcc.illinois.edu/cliwatch/northAmerPcpn/getArchive.jsp

Моя конечная цель - создать сценарий, который я могу настроить для ежедневного запуска, который будет получать вчерашние фактические данные об осадках в виде CSV дляКанада и Северная Америка.Это означает, что мне нужно выбрать следующие параметры (по порядку): фактические значения, разделенные запятыми, MPE, Канада и Северная Америка.Затем начните дату и дату окончания, настроенную соответствующим образом для даты предыдущего дня.

Я успешно создал следующий скрипт, который перемещается по выбранным мной параметрам (я сделал это, посмотрев URL-адрес, который формируется после выбора.):

library(lubridate)

yesterday_year <- lubridate::year(Sys.Date()-1)
yesterday_month <- lubridate::month(Sys.Date()-1)
yesterday <- lubridate::day(Sys.Date()-1)

mrcc.site <- 'https://mrcc.illinois.edu/cliwatch/northAmerPcpn/getArchive2.jsp?datatype=actual&dataformat=csv&dataset=mpe&reg=northAmer&syr='
mrcc_smo_1 <- '&smo='
mrcc_dy_1 <- '&sdy='
mrcc_yr_1 <- '&eyr='
mrcc_smo_2 <- '&emo='
mrcc_dy_2 <- '&edy='
mrcc_yr_2 <- '&edy='
email <- '&email=myemail%40gmail.com'
yesterday_year <- paste(yesterday_year)
yesterday_month <- paste(yesterday_month)
yesterday <- paste(yesterday)
download.url <- paste(mrcc.site, yesterday_year, mrcc_smo_1, yesterday_month, mrcc_dy_1, yesterday, mrcc_yr_1, yesterday_year, mrcc_smo_2, yesterday_month, mrcc_dy_2, yesterday, email, sep="")

browseURL(download.url, browser = getOption("Chrome"),
          encodeIfNeeded = FALSE)

Последний фрагмент кода может открыть созданную ссылку.

Моя проблема сейчас заключается в том, что веб-сайт настроен для отправки вам электронной почты .tar.gz.ссылка на скачивание файла, что для меня действительно неудобно.Я просто хотел бы иметь возможность автоматически загружать этот файл на свой компьютер с помощью моего скрипта вместо того, чтобы вручную заходить в мою электронную почту и нажимать эту ссылку.Есть ли способ получить ссылку на созданный файл загрузки?Может быть, с самой страницы, а не с моей электронной почты?

Заранее спасибо за помощь!

1 Ответ

0 голосов
/ 26 сентября 2019

Хорошо, я думаю, что вы можете сделать это и обойти электронную почту ...

По сути, когда вы запрашиваете файл, он дает вам метку времени.Это используется для генерации ссылки на скачивание.Попробуйте и дайте мне знать, если это работает ...

library(lubridate)
library(httr)

start_year <- lubridate::year(Sys.Date()-100)
start_month <- lubridate::month(Sys.Date()-100)
start_day <- lubridate::day(Sys.Date()-100)

end_year <- lubridate::year(Sys.Date())
end_month <- lubridate::month(Sys.Date())
end_day <- lubridate::day(Sys.Date())

mrcc.site <- 'https://mrcc.illinois.edu/cliwatch/northAmerPcpn/getArchive2.jsp'
query <- list("datatype"   = "actual",
              "dataformat" = "csv",
              "dataset"    = "mpe",
              "reg"        = "northAmer",
              "syr"        = start_year,
              "smo"        = start_month,
              "sdy"        = start_day,
              "eyr"        = end_year,
              "emo"        = end_month,
              "edy"        = end_day,
              "email"      = "a@a.com")

# request that file is generated
response <- GET(mrcc.site, query = query)

# build the download file url
response_date <- format(with_tz(response$date, tzone = "America/Chicago"),
                        "%Y%m%d%H%M%S")
file_url <- paste0("http://mrcc.illinois.edu/cliwatch/northAmerPcpn/dataRetr/data",
                   response_date, ".tar.gz")

# wait some time...
file_header <- headers(HEAD(file_url))[["Content-Length"]]
if(file_header > 113 & file_header != 1126){
  # file is bigger than 113 (so it has been generated), and is not 1126 (no file exists)
  download.file(file_url, destfile="c:/tmp.tar.gz")
}
...