diff --git a/R/class.R b/R/class.R index 9cec4ffdebea12a14457c55a2c1fa4cf30a73146..bb7605294e801c2fb27da16ee0292ab25a0ce1d0 100644 --- a/R/class.R +++ b/R/class.R @@ -7,35 +7,43 @@ setClass("Mediawikir", representation(url = "character", user_name = "character" setGeneric("connect", function(.Object, pass){}) #'Connects to mediawiki instance and gets token (to be called by constructor) setMethod("connect", "Mediawikir", function(.Object, pass){ - #get login token - query <- httr::POST(.Object@url, - body = list(action="query", - meta="tokens", - type="login", - lgname = .Object@user_name, + tryCatch( + { #get login token + query <- httr::POST(.Object@url, + body = list(action="query", + meta="tokens", + type="login", + lgname = .Object@user_name, + format= "json")) + httr::stop_for_status(query) + #parse query response to retrieve token + response <- httr::content(query, "parsed", "application/json") + token <- response$query$tokens$logintoken + #login query + query <- httr::POST(.Object@url, + body = list(action="clientlogin", + username = .Object@user_name, + password = pass, + logintoken = token, + loginreturnurl="http://wiki.lezinter.net", format= "json")) - httr::stop_for_status(query) - response <- httr::content(query, "parsed", "application/json") - print("query 1")#debug - token <- response$query$tokens$logintoken - print(token)#debug - query <- httr::POST(.Object@url, - body = list(action="clientlogin", - username = .Object@user_name, - password = pass, - logintoken = token, - loginreturnurl="http://wiki.lezinter.net", - format= "json")) - httr::stop_for_status(query) - response <- httr::content(query, "parsed", "application/json") - print("query 2")#debug - print(response)#debug - if(response$clientlogin$status=="PASS"){ - return(token) - } - else{ - return("0") - } + httr::stop_for_status(query) + #parse query response to make sure login worked + response <- httr::content(query, "parsed", "application/json") + if(response$clientlogin$status!="PASS"){ + stop(paste(response$clientlogin,"\n")) + } + else{ + return(token) + } + }, + error = function(e) + { + print(paste("Could not login to", .Object@url, e$message)) + token <- 0 + } + ) + return(token) }) #'Creates a new Mediawikir object instance @@ -46,8 +54,15 @@ setGeneric("connect", function(.Object, pass){}) #'@examples #' new("Mediawikir", "http://wiki.example.com", "admin", "theadmin'spassword") setMethod("initialize", "Mediawikir", function (.Object, instance_url, user, pass){ - .Object@url <- paste(instance_url,"/","api.php",sep="") - .Object@user_name <- user - .Object@auth_token=connect(.Object, pass) + tryCatch({ + .Object@url <- paste(instance_url,"/","api.php",sep="") + .Object@user_name <- user + .Object@auth_token=connect(.Object, pass) + }, + error = function(e){ + print(e$message) + .Object <- FALSE + } + ) return(.Object) })