从Marvel'检索数据;R中的s API(错误:is.response(x)不正确)

从Marvel'检索数据;R中的s API(错误:is.response(x)不正确),r,rest,api,timestamp,authorization,R,Rest,Api,Timestamp,Authorization,我试图用R从Marvel的API检索数据。但我的代码如下所示: library(jsonlite) library(httr) library(digest) pb.txt <- Sys.time() pb.date <- as.POSIXct(pb.txt, tz = Sys.timezone) time.stamp = strtrim(format(pb.date, tz = "GMT", usetz = FALSE, "%Y-%m-%dT%H:%M:%SZ"), 24) p

我试图用R从Marvel的API检索数据。但我的代码如下所示:

library(jsonlite)
library(httr)
library(digest)

pb.txt <- Sys.time()
pb.date <- as.POSIXct(pb.txt, tz = Sys.timezone)
time.stamp = strtrim(format(pb.date, tz = "GMT", usetz = FALSE, "%Y-%m-%dT%H:%M:%SZ"), 24)

public.key <- "***********************"

private.key <- "**********************************"

hash <- digest(paste0(time.stamp, private.key, public.key), algo = "md5")

url <- GET(paste("http://gateway.marvel.com/v1/public/characters?ts=", time.stamp, "&apikey=", public.key, "&hash=", hash, sep = ""))
在此之前,主要的问题是时间戳,我仍然不确定我的计算方法是否正确。 下面是API的示例


我希望任何有更多API经验的人都能帮助我。

您可以使用它将参数引导到API请求(将密钥存储在非常明显命名的环境变量中,最好在
~/.Renviron
中设置):


marvel\u hash\u params您可以使用它将参数引导到API请求(将密钥存储在非常明显命名的环境变量中,最好在
~/.Renviron
中设置):


marvel\u hash\u参数是的,你是对的。我完全忘了。但现在的错误是:
$code[1]“InvalidCredentials”$message[1]“该散列、时间戳和密钥组合无效。”$code[1]“InvalidCredentials”$message[1]“该散列、时间戳和密钥组合无效。”
是的,您是对的。我完全忘了。但现在的错误是:
$code[1]“InvalidCredentials”$message[1]“该散列、时间戳和密钥组合无效。”$code[1]“InvalidCredentials”$message[1]“该散列、时间戳和密钥组合无效。”
非常感谢!只需要弄清楚如何在.Renviron中设置变量,您的意思是在第二个函数中
marvel\u hash\u params()
而不是
marvel\u hash()
?是的,抱歉。
~/.Renviron
中的条目是
KEY=value
:非常感谢!只需要弄清楚如何在.Renviron中设置变量,您的意思是在第二个函数中
marvel\u hash\u params()
而不是
marvel\u hash()
?是的,抱歉。
~/.Renviron
中的条目是
KEY=value
> content(url) 

$code
[1] "InvalidCredentials"

$message
[1] "That hash, timestamp and key combination is invalid."
marvel_hash_params <- function() {

  ts <- round(as.numeric(Sys.time())*1000) # can totally be just Sys.time(), too
  to_hash <- sprintf("%s%s%s",
                     ts,
                     Sys.getenv("MARVEL_API_PRIVATE_KEY"),
                     Sys.getenv("MARVEL_API_PUBLIC_KEY"))

  list(
    ts=ts,
    hash=digest::digest(to_hash, "md5", FALSE),
    apikey=Sys.getenv("MARVEL_API_PUBLIC_KEY")
  )

}
get_characters <- function(name) {

  params <- marvel_hash_params()
  params$name <- name

  res <- httr::GET("https://gateway.marvel.com:443/v1/public/characters",
                   query=params)

  httr::stop_for_status(res)

  httr::content(res, as="parsed")

}

get_characters("spider-man")