42 votes

Comment déterminer si vous avez une connexion Internet dans R

Parfois, j'ai besoin de télécharger des données sur Internet. Parfois, cela a échoué soit parce que le site Web est en panne, soit parce que mon ordinateur a perdu sa connexion Internet.

Question : existe-t-il une fonction dans R qui renverra VRAI/FAUX pour savoir si je suis connecté à Internet ?

29voto

Jeroen Points 4979

Le curl a une fonction has_internet qui teste en effectuant un nslookup :

 curl::has_internet
## function(){
##    !is.null(nslookup("google.com", error = FALSE))
## }

Le test DNS est plus rapide et peut être plus fiable que la récupération d'une URL car cette dernière peut échouer pour des raisons indépendantes (par exemple, pare-feu, panne de serveur, etc.).

28voto

Roman Luštrik Points 19295

Un sale boulot consisterait à utiliser la fonction RCurl::getURL .

 if (is.character(getURL("www.google.com"))) {
    out <- TRUE
} else {
    out <- FALSE
}

19voto

eyjo Points 940

Voici une tentative d'analyse de la sortie de ipconfig/ifconfig, comme suggéré par Spacedman.

 havingIP <- function() {
  if (.Platform$OS.type == "windows") {
    ipmessage <- system("ipconfig", intern = TRUE)
  } else {
    ipmessage <- system("ifconfig", intern = TRUE)
  }
  validIP <- "((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)[.]){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"
  any(grep(validIP, ipmessage))
}

Avec une simple sortie VRAI/FAUX

 > havingIP()
[1] TRUE

10voto

Tony Breyal Points 2707

Juste un autre à ajouter au pot, inspiré par la réponse de @romans, cela ne fonctionne que sous Windows, je suppose, je ne suis pas sûr des autres plates-formes :

 canPingSite <- function(test.site) {
    !as.logical(system(paste("ping", test.site)))
}

Que nous testons comme suit :

 > t1 <- canPingSite("www.yahoo.com")
[...]

> t2 <- canPingSite(";lkjsdflakjdlfhasdfhsad;fs;adjfsdlk")
[...]

> t1; t2
[1] TRUE
[1] FALSE

6voto

TPArrow Points 787

Faites-le avec seulement deux lignes de code :

 install.packages('pingr')
pingr::is_online()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X