From f4aedd75610af950763bc2b2c63a7d14ffb5ea53 Mon Sep 17 00:00:00 2001
From: unknown <ldecicco@usgs.gov>
Date: Wed, 10 Sep 2014 16:57:28 -0500
Subject: [PATCH] Added better error handling.

---
 R/getRawQWData.r | 28 +++++++++++++++++++++++-----
 1 file changed, 23 insertions(+), 5 deletions(-)

diff --git a/R/getRawQWData.r b/R/getRawQWData.r
index b4be17a3..ba601d64 100644
--- a/R/getRawQWData.r
+++ b/R/getRawQWData.r
@@ -5,7 +5,7 @@
 #' A list of statistic codes can be found here: \url{http://nwis.waterdata.usgs.gov/nwis/help/?read_file=stat&format=table}
 #'
 #' @param siteNumber string USGS site number.  This is usually an 8 digit number
-#' @param parameterCd vector of USGS 5-digit parameter code. Leaving this blank will return all of the measured values during the specified time period.
+#' @param parameterCd vector of USGS 5-digit parameter code or string of characteristicNames. Leaving this blank will return all of the measured values during the specified time period.
 #' @param startDate string starting date for data retrieval in the form YYYY-MM-DD.
 #' @param endDate string ending date for data retrieval in the form YYYY-MM-DD.
 #' @param interactive logical Option for interactive mode.  If true, there is user interaction for error handling and data checks.
@@ -24,17 +24,35 @@ retrieveWQPqwData <- function(siteNumber,parameterCd,startDate,endDate,interacti
 
   url <- constructNWISURL(siteNumber,parameterCd,startDate,endDate,"wqp",interactive=interactive)
 
-  h <- basicHeaderGatherer()
-  doc <- getURI(url, headerfunction = h$update)
+  retval = tryCatch({
+    h <- basicHeaderGatherer()
+    doc <- getURL(url, headerfunction = h$update)
+
+  }, warning = function(w) {
+    message(paste("URL caused a warning:", url))
+    message(w)
+  }, error = function(e) {
+    message(paste("URL does not seem to exist:", url))
+    message(e)
+    return(NA)
+  })   
+  
   numToBeReturned <- as.numeric(h$value()["Total-Result-Count"])
-  if (!is.na(numToBeReturned) | numToBeReturned != 0){  
-    suppressWarnings(retval <- read.delim(url, header = TRUE, quote="\"", dec=".", sep='\t', colClasses=c('character'), fill = TRUE))
+  
+  if (!is.na(numToBeReturned) | numToBeReturned != 0){
+  
+    retval <- read.delim(textConnection(doc), header = TRUE, quote="\"", 
+               dec=".", sep='\t', 
+               colClasses=c('character'), 
+               fill = TRUE)    
     actualNumReturned <- nrow(retval)
     
     if(actualNumReturned != numToBeReturned) warning(numToBeReturned, " sample results were expected, ", actualNumReturned, " were returned")
     
     return(retval)
+
   } else {
     warning("No data to retrieve")
+    return(NA)
   }
 }
-- 
GitLab