Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion DESCRIPTION
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
Package: dataRetrieval
Type: Package
Title: Retrieval Functions for USGS and EPA Hydrology and Water Quality Data
Version: 2.7.18.9000
Version: 2.7.18.9001
Authors@R: c(
person("Laura", "DeCicco", role = c("aut","cre"),
email = "[email protected]",
Expand Down
6 changes: 3 additions & 3 deletions R/AAA.R
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,8 @@ is_legacy <- function(service){
}

nwis_message <- function(){
return("WARNING: NWIS does not deliver
discrete water quality data newer than March 11, 2024
or updates to existing data. For additional details, see:
return("WARNING: whatNWISdata does not include
discrete water quality data newer than March 11, 2024.
For additional details, see:
https://doi-usgs.github.io/dataRetrieval/articles/Status.html")
}
185 changes: 121 additions & 64 deletions R/constructNWISURL.R
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,8 @@ constructNWISURL <- function(siteNumbers,
service[service == "meas"] <- "measurements"
service[service == "uv"] <- "iv"

POST = nchar(paste0(siteNumbers, parameterCd, collapse = "")) > 2048

baseURL <- httr2::request(pkg.env[[service]])

if (any(!is.na(parameterCd) & parameterCd != "all")) {
Expand All @@ -97,43 +99,60 @@ constructNWISURL <- function(siteNumbers,
switch(service,
rating = {
ratingType <- match.arg(ratingType, c("base", "corr", "exsa"))
url <- httr2::req_url_query(baseURL,
site_no = siteNumbers,
file_type = ratingType)
url <- get_or_post(baseURL,
POST = POST,
site_no = siteNumbers,
file_type = ratingType)
},
peak = {
url <- httr2::req_url_query(baseURL,
url <- get_or_post(baseURL,
POST = POST,
range_selection = "date_range",
format = "rdb")
url <- httr2::req_url_query(url,
site_no = siteNumbers,
.multi = "comma")
url <- get_or_post(url,
POST = POST,
site_no = siteNumbers,
.multi = "comma")

if (nzchar(startDate)) {
url <- httr2::req_url_query(url, begin_date = startDate)
url <- get_or_post(url,
POST = POST,
begin_date = startDate)
}
if (nzchar(endDate)) {
url <- httr2::req_url_query(url, end_date = endDate)
url <- get_or_post(url,
POST = POST,
end_date = endDate)
}
},
measurements = {
url <- httr2::req_url_query(baseURL,
url <- get_or_post(baseURL,
POST = POST,
site_no = siteNumbers,
.multi = "comma")
url <- httr2::req_url_query(url,
range_selection = "date_range"
url <- get_or_post(url,
POST = POST,
range_selection = "date_range"
)
if (nzchar(startDate)) {
url <- httr2::req_url_query(url,
url <- get_or_post(url,
POST = POST,
begin_date = startDate
)
}
if (nzchar(endDate)) {
url <- httr2::req_url_query(url, end_date = endDate)
url <- get_or_post(url,
POST = POST,
end_date = endDate)
}
if (expanded) {
url <- httr2::req_url_query(url, format = "rdb_expanded")
url <- get_or_post(url,
POST = POST,
format = "rdb_expanded")
} else {
url <- httr2::req_url_query(url, format = "rdb")
url <- get_or_post(url,
POST = POST,
format = "rdb")
}
},
stat = { # for statistics service
Expand All @@ -158,42 +177,62 @@ constructNWISURL <- function(siteNumbers,
stop("Start and end dates for annual statReportType can only include years")
}

url <- httr2::req_url_query(baseURL,
url <- get_or_post(baseURL,
POST = POST,
sites = siteNumbers,
.multi = "comma")
url <- httr2::req_url_query(url,
statReportType = statReportType,
.multi = "comma")
url <- httr2::req_url_query(url, statType = statType,
.multi = "comma")
url <- httr2::req_url_query(url, parameterCd = parameterCd,
.multi = "comma")
url <- get_or_post(url,
POST = POST,
statReportType = statReportType,
.multi = "comma")
url <- get_or_post(url,
POST = POST,
statType = statType,
.multi = "comma")
url <- get_or_post(url,
POST = POST,
parameterCd = parameterCd,
.multi = "comma")

if (nzchar(startDate)) {
url <- httr2::req_url_query(url, startDT = startDate)
url <- get_or_post(url,
POST = POST,
startDT = startDate)
}
if (nzchar(endDate)) {
url <- httr2::req_url_query(url, endDT = endDate)
url <- get_or_post(url,
POST = POST,
endDT = endDate)
}
if (!grepl("(?i)daily", statReportType)) {
url <- httr2::req_url_query(url, missingData = "off")
url <- get_or_post(url,
POST = POST,
missingData = "off")
}
},
gwlevels = {

url <- httr2::req_url_query(baseURL,
site_no = siteNumbers, .multi = "comma")
url <- httr2::req_url_query(url,format = "rdb")
url <- get_or_post(baseURL,
POST = POST,
site_no = siteNumbers,
.multi = "comma")
url <- get_or_post(url,
POST = POST,
format = "rdb")
if (nzchar(startDate)) {
url <- httr2::req_url_query(url, begin_date = startDate)
url <- get_or_post(url,
POST = POST,
begin_date = startDate)
}
if (nzchar(endDate)) {
url <- httr2::req_url_query(url, end_date = endDate)
url <- get_or_post(url,
POST = POST,
end_date = endDate)
}
url <- httr2::req_url_query(url,
group_key = "NONE",
date_format = "YYYY-MM-DD",
rdb_compression = "value")
url <- get_or_post(url,
POST = POST,
group_key = "NONE",
date_format = "YYYY-MM-DD",
rdb_compression = "value")
},
{ # this will be either dv, uv, groundwater

Expand All @@ -207,34 +246,44 @@ constructNWISURL <- function(siteNumbers,
wml1 = "waterml,1.1"
)

url <- httr2::req_url_query(baseURL,
site = siteNumbers,
.multi = "comma")
url <- httr2::req_url_query(url,
format = formatURL)
url <- get_or_post(baseURL,
POST = POST,
site = siteNumbers,
.multi = "comma")
url <- get_or_post(url,
POST = POST,
format = formatURL)

if (!all(is.na(parameterCd))) {
url <- httr2::req_url_query(url,
ParameterCd = parameterCd,
.multi = "comma")
url <- get_or_post(url,
POST = POST,
ParameterCd = parameterCd,
.multi = "comma")
}

if ("dv" == service) {
url <- httr2::req_url_query(url,
StatCd = statCd,
.multi = "comma")
url <- get_or_post(url,
POST = POST,
StatCd = statCd,
.multi = "comma")
}

if (nzchar(startDate)) {
url <- httr2::req_url_query(url, startDT = startDate)
url <- get_or_post(url,
POST = POST,
startDT = startDate)
} else {
startorgin <- "1851-01-01"
if ("iv" == service) startorgin <- "1900-01-01"
url <- httr2::req_url_query(url, startDT = startorgin)
url <- get_or_post(url,
POST = POST,
startDT = startorgin)
}

if (nzchar(endDate)) {
url <- httr2::req_url_query(url, endDT = endDate)
url <- get_or_post(url,
POST = POST,
endDT = endDate)
}
}
)
Expand Down Expand Up @@ -300,6 +349,8 @@ constructWQPURL <- function(siteNumbers,

pCodeLogic <- TRUE

POST = nchar(paste0(siteNumbers, collapse = "")) > 2048

if(!allPCode){
multiplePcodes <- length(parameterCd) > 1
if (all(nchar(parameterCd) == 5)) {
Expand All @@ -311,11 +362,13 @@ constructWQPURL <- function(siteNumbers,

if(legacy){
baseURL <- httr2::request(pkg.env[["Result"]])
baseURL <- httr2::req_url_query(baseURL,
siteid = siteNumbers,
.multi = function(x) paste0(x, collapse = ";"))
baseURL <- httr2::req_url_query(baseURL,
count = "no")
baseURL <- get_or_post(baseURL,
POST = POST,
siteid = siteNumbers,
.multi = function(x) paste0(x, collapse = ";"))
baseURL <- get_or_post(baseURL,
POST = POST,
count = "no")
} else {
baseURL <- httr2::request(pkg.env[["ResultWQX3"]])
baseURL <- httr2::req_url_query(baseURL,
Expand All @@ -325,9 +378,10 @@ constructWQPURL <- function(siteNumbers,

if(legacy & !allPCode){
if(pCodeLogic){
baseURL <- httr2::req_url_query(baseURL,
pCode = parameterCd,
.multi = function(x) paste0(x, collapse = ";"))
baseURL <- get_or_post(baseURL,
POST = POST,
pCode = parameterCd,
.multi = function(x) paste0(x, collapse = ";"))
} else {
baseURL <- httr2::req_url_query(baseURL,
characteristicName = parameterCd,
Expand All @@ -348,17 +402,20 @@ constructWQPURL <- function(siteNumbers,

if (nzchar(startDate)) {
startDate <- format(as.Date(startDate), format = "%m-%d-%Y")
baseURL <- httr2::req_url_query(baseURL,
startDateLo = startDate)
baseURL <- get_or_post(baseURL,
POST = POST,
startDateLo = startDate)
}

if (nzchar(endDate)) {
endDate <- format(as.Date(endDate), format = "%m-%d-%Y")
baseURL <- httr2::req_url_query(baseURL,
startDateHi = endDate)
baseURL <- get_or_post(baseURL,
POST = POST,
startDateHi = endDate)
}

baseURL <- httr2::req_url_query(baseURL, mimeType = "csv")
baseURL <- httr2::req_url_query(baseURL,
mimeType = "csv")
if(!legacy){
baseURL <- httr2::req_url_query(baseURL,
dataProfile = "basicPhysChem")
Expand Down
10 changes: 4 additions & 6 deletions R/dataRetrievals-package.R
Original file line number Diff line number Diff line change
Expand Up @@ -89,9 +89,8 @@ NULL

#' US State Code Lookup Table
#'
#' Data originally pulled from \url{https://www2.census.gov/geo/docs/reference/state.txt}
#' on April 1, 2015. On Feb. 11, 2022, the fields were updated with the
#' file found in inst/extdata, which is used internally with NWIS retrievals.
#' Classic lookup table for states. Has been replaced in functions with
#' \code{check_param("states")}.
#'
#' @name stateCd
#' @return stateCd data frame.
Expand All @@ -112,9 +111,8 @@ NULL

#' US County Code Lookup Table
#'
#' Data originally pulled from \url{https://www2.census.gov/geo/docs/reference/codes/files/national_county.txt}
#' on April 1, 2015. On Feb. 11, 2022, the fields were updated with the
#' file found in inst/extdata, which is used internally with NWIS retrievals.
#' Classic lookup table for counties. Has been replaced in functions with
#' \code{check_param("counties")}.
#'
#' @name countyCd
#' @return countyCd data frame.
Expand Down
20 changes: 14 additions & 6 deletions R/findNLDI.R
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,7 @@ find_good_names <- function(input, type) {
get_nldi_sources <- function(url = pkg.env$nldi_base) {
res <- httr2::request(url)
res <- httr2::req_user_agent(res, default_ua())
res <- httr2::req_throttle(res, rate = 30 / 60)
res <- httr2::req_retry(res,
backoff = ~ 5, max_tries = 3)
res <- httr2::req_error(res, is_error = \(x) FALSE)
res <- httr2::req_perform(res)

if (res$status_code == 200) {
Expand All @@ -72,14 +70,24 @@ get_nldi_sources <- function(url = pkg.env$nldi_base) {
#' @noRd
#' @return a data.frame
get_nldi <- function(url, type = "", use_sf = FALSE, warn = TRUE) {

# Query
res <- httr2::request(url)
res <- httr2::req_user_agent(res, default_ua())
res <- httr2::req_throttle(res, rate = 30 / 60)
res <- httr2::req_retry(res,
backoff = ~ 5, max_tries = 3)
res <- httr2::req_error(res, is_error = \(x) FALSE)
res <- httr2::req_perform(res)

if(!is.null(res$headers$`X-Ratelimit-Remaining`)) {
if((as.numeric(res$headers$`X-Ratelimit-Limit`) - as.numeric(res$headers$`X-Ratelimit-Remaining`)) /
as.numeric(res$headers$`X-Ratelimit-Limit`) > 0.9) {
message("Approaching NLDI rate limit. ", res$headers$`X-Ratelimit-Remaining`, " of ", res$headers$`X-Ratelimit-Limit`, " remaining")
if(as.numeric(res$headers$`X-Ratelimit-Remaining`) < 20) {
message("Sleeping to try to avoid going over rate limit.")
Sys.sleep(3600 / ((as.numeric(res$headers$`X-Ratelimit-Limit`) / 3)))
}
}
}

# If successful ...
if (res$status_code == 200) {
# Interpret as text
Expand Down
Loading
Loading