From 240371638ed658a6b1bb0fd3c48305683b1a116b Mon Sep 17 00:00:00 2001 From: Jordan S Read <jread@usgs.gov> Date: Tue, 17 Nov 2015 11:01:34 -0600 Subject: [PATCH] using a shared query builder function --- R/constructNWISURL.r | 12 ++++---- R/setAccess.R | 35 ++++++++++++++++++------ R/whatNWISData.r | 2 +- R/whatNWISsites.R | 7 ++--- tests/testthat/tests_userFriendly_fxns.R | 2 +- 5 files changed, 37 insertions(+), 21 deletions(-) diff --git a/R/constructNWISURL.r b/R/constructNWISURL.r index 30df1d4b..c20ce648 100644 --- a/R/constructNWISURL.r +++ b/R/constructNWISURL.r @@ -171,29 +171,29 @@ constructNWISURL <- function(siteNumber,parameterCd="00060",startDate="",endDate } ) - url <- drURL(service, paste0("&site=",siteNumber, "&format=", formatURL)) + url <- drURL(service, Access=pkg.env$access, site=siteNumber, format=formatURL) if("gwlevels"!= service){ - url <- paste0(url, "&ParameterCd=",parameterCd) + url <- appendDrURL(url, ParameterCd=parameterCd) } if("dv"==service) { if(length(statCd) > 1){ statCd <- paste(statCd, collapse=",") } - url <- paste0(url, "&StatCd=", statCd) + url <- appendDrURL(url, StatCd=statCd) } if (nzchar(startDate)) { - url <- paste0(url,"&startDT=",startDate) + url <- appendDrURL(url, startDT=startDate) } else { startorgin <- "1851-01-01" if ("iv" == service) startorgin <- "1900-01-01" - url <- paste0(url,"&startDT=",startorgin) + url <- appendDrURL(url, startDT=startorgin) } if (nzchar(endDate)) { - url <- paste0(url,"&endDT=",endDate) + url <- appendDrURL(url, endDT=endDate) } } diff --git a/R/setAccess.R b/R/setAccess.R index b9b5041e..2e4bb7e2 100644 --- a/R/setAccess.R +++ b/R/setAccess.R @@ -22,19 +22,38 @@ setAccess = function(access="public"){ access = match.arg(access, c('public','internal')) if(access=="internal"){ - access.param = '?Access=3' + pkg.env$access = '3' message('setting access to internal') }else { - access.param = '?Access=0' + pkg.env$access = '0' + message('setting access to public') } - pkg.env$waterservices = paste0("http://waterservices.usgs.gov/nwis/site/", access.param) - pkg.env$iv = paste0("http://nwis.waterservices.usgs.gov/nwis/iv/", access.param) - pkg.env$dv = paste0("http://waterservices.usgs.gov/nwis/dv/", access.param) - pkg.env$gwlevels = paste0("http://waterservices.usgs.gov/nwis/gwlevels/", access.param) + pkg.env$waterservices = "http://waterservices.usgs.gov/nwis/site/" + pkg.env$iv = "http://nwis.waterservices.usgs.gov/nwis/iv/" + pkg.env$dv = "http://waterservices.usgs.gov/nwis/dv/" + pkg.env$gwlevels = "http://waterservices.usgs.gov/nwis/gwlevels/" } -drURL = function(base.name, params){ - return(paste0(pkg.env[[base.name]], params)) +drURL <- function(base.name, ..., arg.list=NULL){ + + + queryString <- drQueryArgs(..., arg.list=arg.list) + #to do: add something to check for redundant params + + return(paste0(pkg.env[[base.name]], '?', queryString)) +} + +drQueryArgs <- function(..., arg.list){ + args <- append(expand.grid(..., stringsAsFactors = FALSE), arg.list) + # get the args into name=value strings + keyValues <- paste0(names(args),unname(lapply(args, function(x) paste0('=',x[[1]])))) + return(paste(keyValues, collapse='&')) +} + +appendDrURL <- function(url, ..., arg.list=NULL){ + + queryString <- drQueryArgs(..., arg.list=arg.list) + return(paste0(url, "&", queryString)) } \ No newline at end of file diff --git a/R/whatNWISData.r b/R/whatNWISData.r index 38bce2ca..50067b22 100644 --- a/R/whatNWISData.r +++ b/R/whatNWISData.r @@ -87,7 +87,7 @@ whatNWISdata <- function(siteNumbers,service="all",parameterCd="all",statCd="all } } - urlSitefile <- paste(drURL('waterservices', '&format=rdb&seriesCatalogOutput=true&sites='),siteNumber,sep = "") + urlSitefile <- drURL('waterservices', Access=pkg.env$access, format='rdb', seriesCatalogOutput='true',sites=paste(siteNumber)) SiteFile <- importRDB1(urlSitefile, asDateTime = FALSE) diff --git a/R/whatNWISsites.R b/R/whatNWISsites.R index 4ad9d93d..c7b864ae 100644 --- a/R/whatNWISsites.R +++ b/R/whatNWISsites.R @@ -35,14 +35,11 @@ whatNWISsites <- function(...){ matchReturn <- list(...) values <- sapply(matchReturn, function(x) URLencode(as.character(paste(eval(x),collapse=",",sep="")))) - urlCall <- paste(paste(names(values),values,sep="="),collapse="&") - names(values)[names(values) == "siteNumber"] <- "sites" names(values)[names(values) == "siteNumbers"] <- "sites" - baseURL <- drURL('waterservices',"&format=mapper&") - urlCall <- paste(baseURL, - urlCall,sep = "") + urlCall <- drURL('waterservices',Access=pkg.env$access, format="mapper", arg.list = values) + rawData <- getWebServiceData(urlCall) diff --git a/tests/testthat/tests_userFriendly_fxns.R b/tests/testthat/tests_userFriendly_fxns.R index b03dba89..87803e3d 100644 --- a/tests/testthat/tests_userFriendly_fxns.R +++ b/tests/testthat/tests_userFriendly_fxns.R @@ -19,7 +19,7 @@ test_that("Unit value data returns correct types", { expect_is(rawData$dateTime, 'POSIXct') expect_is(rawData$Flow_Inst, 'numeric') expect_that(attr(rawData, "url"), equals( - "http://nwis.waterservices.usgs.gov/nwis/iv/?Access=1&site=05114000&format=waterml,1.1&ParameterCd=00060&startDT=2014-10-10&endDT=2014-10-10") + "http://nwis.waterservices.usgs.gov/nwis/iv/?Access=0&site=05114000&format=waterml,1.1&ParameterCd=00060&startDT=2014-10-10&endDT=2014-10-10") ) # #First switchover to standard time: # expect_that(as.numeric(timeZoneChange[which(timeZoneChange$tz_cd == "America/Chicago")[1],"dateTime"]), -- GitLab