2013-10-10 41 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

謝謝堆!我會檢查出來並接受你的回答。我們發現的另一個解決方案是通過RCurl發現p_c問題。我們一直在研究利用該解決方案的軟件包,但您的提議可能會更好。我們也不得不壓制警告。 – andrekos

+0

酷!保持更新。我沒有添加任何評論功能。我所做的是通過將其保存在文本文件中,然後在最終下載鏈接中添加p_c值並將其保存爲zip文件,從而爲每個站點提取p_c值。 – 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

是的,我仍然需要這樣的一個澳大利亞個人氣象站。您提供的代碼適用於此處列出的ID號/文件名稱http://www.bom.gov.au/oceanography/projects/spslcmp/data/data.shtml,該代碼不完全是澳大利亞。 – andrekos

相關問題