2013-10-10 4 views
0

Здесь http://www.bom.gov.au/climate/data/ Я могу ввести номер подстанции, скажем 009572; выберите переменную (скажем, температуру) и ее тип (скажем, Максимум). Нажатие «получить данные» приводит меня к странице со ссылкой «Все годы данных». Щелкните по нему, и у вас есть zip-файл. Я знаю this questions, но здесь у меня нет прямой ссылки на zip-файл. Можно ли что-то сделать для автоматизации добычи метеорологических данных с веб-сайта Австралийского бюро метеорологии с помощью R?данные о погоде Австралия BOM с программным кодом с R

+0

Это будет стоит читать http://forums.whirlpool.net.au/archive/1309587 – mnel

+0

Посмотрите на различные параметры, которые получают передаваемые конечной 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

ответ

1

Вот код, который я сделал для загрузки мгновенно, и это также решает вашу проблему 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) 
+0

Спасибо, кучи! Я проверю и приму ваш ответ. Альтернативное решение проблемы p_c, которое мы обнаружили, было через RCurl. Мы работаем над пакетом, который использует это решение, но ваше предложение может быть еще лучше. Мы также должны были пресекать предупреждения. – andrekos

+0

Прохладный !! держать в курсе. Я еще не добавил комментарии к функциям. То, что я сделал, - извлечь значение p_c для каждой станции, сохранив ее в текстовом файле, затем добавив значение p_c в окончательную ссылку на скачивание и сохраняя в виде zip-файла. – Dipangkar

+0

Да, проблема решена. Отлично сработано. Я посмотрю, какие части этих двух решений могут стать наилучшим для использования в пакете. – andrekos

0

Хотя я до сих пор не вижу, как это сделать с помощью файла 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 средства и как она меняется от станции к станции.

+0

несколько уместно: http://www.gliffy.com/publish/3949748/ – andrekos

1

Вы можете попробовать это, это последовательность кода, используемая пакетом 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)) 
}) 
+0

Да, мне все еще нужно что-то подобное для индивидуальная австралийская метеостанция. Код, который вы предоставили, работает с идентификационными номерами/именами файлов, перечисленными здесь: http://www.bom.gov.au/oceanography/projects/spslcmp/data/data.shtml, который не совсем является Австралией. – andrekos

 Смежные вопросы

  • Нет связанных вопросов^_^