Здесь http://www.bom.gov.au/climate/data/ Я могу ввести номер подстанции, скажем 009572; выберите переменную (скажем, температуру) и ее тип (скажем, Максимум). Нажатие «получить данные» приводит меня к странице со ссылкой «Все годы данных». Щелкните по нему, и у вас есть zip-файл. Я знаю this questions, но здесь у меня нет прямой ссылки на zip-файл. Можно ли что-то сделать для автоматизации добычи метеорологических данных с веб-сайта Австралийского бюро метеорологии с помощью R?данные о погоде Австралия BOM с программным кодом с R
ответ
Вот код, который я сделал для загрузки мгновенно, и это также решает вашу проблему p_c. Вы можете улучшить функцию, если хотите, и опубликовать ее.
#daily code = 136
#monthy code = 139
bomdata<- function(station,code){
for(i in 1: length(station)){
p.url<-paste("http://www.bom.gov.au/jsp/ncc/cdio/weatherData/av?p_stn_num=",station[i],"&p_display_type=availableYears&p_nccObsCode=",code,sep ="")
download.file(p.url,"test.txt")
filelist <- list.files(pattern = ".txt")
foo<- file(filelist,"r")
text<- suppressWarnings(readLines(foo))
close(foo)
l<- regexpr(":",text[1])
m<- unlist(gregexpr(",", text[1], perl = TRUE))
pc<- substr(text[1],l[[1]]+1,l[[1]]+(m[2]-(l[[1]]+1)))
url<-paste("http://www.bom.gov.au/jsp/ncc/cdio/weatherData/av?p_display_type=dailyZippedDataFile&p_stn_num=",station[i],"&p_c=",pc,"&p_nccObsCode=",code,"&p_startYear=2013", sep ="")
suppressWarnings(download.file(url,paste(station[i],".zip",sep= ""), mode = "wb"))
unlink("test.txt")
}
}
Пример
bomdata(073137,136)
Спасибо, кучи! Я проверю и приму ваш ответ. Альтернативное решение проблемы p_c, которое мы обнаружили, было через RCurl. Мы работаем над пакетом, который использует это решение, но ваше предложение может быть еще лучше. Мы также должны были пресекать предупреждения. – andrekos
Прохладный !! держать в курсе. Я еще не добавил комментарии к функциям. То, что я сделал, - извлечь значение p_c для каждой станции, сохранив ее в текстовом файле, затем добавив значение p_c в окончательную ссылку на скачивание и сохраняя в виде zip-файла. – Dipangkar
Да, проблема решена. Отлично сработано. Я посмотрю, какие части этих двух решений могут стать наилучшим для использования в пакете. – andrekos
Хотя я до сих пор не вижу, как это сделать с помощью файла download.file(), следующее почти выполняется, если задание Chrome «Спросить, где сохранять каждый файл перед загрузкой», отключено.
system(paste('"C:/Documents and Settings/UserName/Local Settings/Application Data/Google/Chrome/Application/chrome.exe"',
'-url http://www.bom.gov.au/jsp/ncc/cdio/weatherData/av?p_display_type=dailyZippedDataFile&p_stn_num=009572&p_c=-18465084&p_nccObsCode=136'), wait = FALSE)
Тогда я мог бы использовать paste0() и цикл через различные номера станций, если бы я знал, что p_c = -18465084 средства и как она меняется от станции к станции.
несколько уместно: http://www.gliffy.com/publish/3949748/ – andrekos
Вы можете попробовать это, это последовательность кода, используемая пакетом metvurst. metvurst
## SET URL FOR DATA DOWNLOAD
url <- "http://www.bom.gov.au/ntc/IDO70004/IDO70004_"
## YEARS TO BE DOWNLOADED
yr <- 1993:2012
## READ DATA FOR ALL YEARS FROM URL INTO LIST
fijilst <- lapply(seq(yr), function(i) {
read.csv(paste(url, yr[i], ".csv", sep = ""), na.strings = c(-9999, 999))
})
Да, мне все еще нужно что-то подобное для индивидуальная австралийская метеостанция. Код, который вы предоставили, работает с идентификационными номерами/именами файлов, перечисленными здесь: http://www.bom.gov.au/oceanography/projects/spslcmp/data/data.shtml, который не совсем является Австралией. – andrekos
Это будет стоит читать http://forums.whirlpool.net.au/archive/1309587 – mnel
Посмотрите на различные параметры, которые получают передаваемые конечной URL для почтового индекса файл (http://www.bom.gov.au/jsp/ncc/cdio/weatherData/av?p_display_type=dailyZippedDataFile&p_stn_num=009572&p_c=-18462391&p_nccObsCode=123&p_startYear=1985) и посмотреть, можете ли вы сравнить это с переданными значениями по форме HTML. Если есть довольно простые совпадения, возможно, вы можете просто «вставить» вместе URL для использования с R. – A5C1D2H2I1M1N2O1R2T1