I would like to create a script in R that pings a given website. I haven't found any information about this specific for R.
To start with, all I need is the information on whether the website responses to the ping or not.
Does anyone have information about existing scripts or which package best to use to start with?
We can use a system2
call to get the return status of the ping command in the shell. On Windows (and probably linux) following will work :
ping <- function(x, stderr = FALSE, stdout = FALSE, ...){
pingvec <- system2("ping", x,
stderr = FALSE,
stdout = FALSE,...)
if (pingvec == 0) TRUE else FALSE
}
# example
> ping("google.com")
[1] FALSE
> ping("ugent.be")
[1] TRUE
If you want to capture the output of ping, you can either set stdout = ""
, or use a system call:
> X <- system("ping ugent.be", intern = TRUE)
> X
[1] "" "Pinging ugent.be [157.193.43.50] with 32 bytes of data:"
[3] "Reply from 157.193.43.50: bytes=32 time<1ms TTL=62" "Reply from 157.193.43.50: bytes=32 time<1ms TTL=62"
[5] "Reply from 157.193.43.50: bytes=32 time<1ms TTL=62" "Reply from 157.193.43.50: bytes=32 time<1ms TTL=62"
[7] "" "Ping statistics for 157.193.43.50:"
[9] " Packets: Sent = 4, Received = 4, Lost = 0 (0% loss)," "Approximate round trip times in milli-seconds:"
[11] " Minimum = 0ms, Maximum = 0ms, Average = 0ms"
using the option intern = TRUE
makes it possible to save the output in a vector. I leave it to the reader as an exercise to rearrange this in order to get some decent output.
RCurl::url.exists
works for localhost (where ping doesn't always) and is faster than RCurl::getURL
.
> library(RCurl)
> url.exists("google.com")
[1] TRUE
> url.exists("localhost:8888")
[1] TRUE
> url.exists("localhost:8012")
[1] FALSE
Note that it is possible to set the timeout (which by default is rather long)
> url.exists("google.com", timeout = 5) # timeout in seconds
[1] TRUE
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With