Skip to content

how to get xmlToList() to retry if http fails

2 messages · Waichler, Scott R, Ben Tupper

#
Hi,

I am using xmlToList() in a loop with a call to a webservice, per the code below.  

  # Loop thru target locs
  for(i in 1:num.target.locs) {
    url <- paste(sep="/", "http://www.earthtools.org/timezone", lat[i], lon[i])
    tmp <- xmlToList(url)
    df$time.offset[i] <- tmp$offset
    system("sleep 1")  # wait 1 second per requirements of above web service
  }  # end loop thru target locations

Failure struck midway through my loop, with the message below.

failed to load HTTP resource
Error: 1: failed to load HTTP resource

I presume that the webservice failed to respond in this instance.  How can I trap the error and have it retry after waiting a second or two, instead of exiting?

Thanks.  --Scott Waichler
Pacific Northwest National Laboratory
Richland, WA, USA
scott.waichler at pnnl.gov
#
Hi,
On Mar 6, 2013, at 4:12 PM, Waichler, Scott R wrote:

            
You can wrap it in a try function as in the following (untested).  I have made the thing stop if the second try fails, but you may want to do something more useful.  Check out tryCatch, too.

 for(i in 1:num.target.locs) {
   url <- paste(sep="/", "http://www.earthtools.org/timezone", lat[i], lon[i])
   tmp <- try(xmlToList(url))
   if (inherits(tmp, "try-error")) {
	Sys.sleep(2)
	tmp <- try(xmlToList(url))
	if (inherits(tmp, "try-error")) stop("Error fetching data")
   }
   df$time.offset[i] <- tmp$offset
   system("sleep 1")  # wait 1 second per requirements of above web service
 }  # end loop thru target locations

Cheers,
Ben
Ben Tupper
Bigelow Laboratory for Ocean Sciences
60 Bigelow Drive, P.O. Box 380
East Boothbay, Maine 04544
http://www.bigelow.org