Извлечение данных из API Marvel в R (ошибка: is.response (x) неверно)

#r #rest #api #timestamp #authorization

#r #rest #API #временная метка #авторизация

Вопрос:

Я пытаюсь извлечь данные из API Marvel с помощью R. Тем не менее, мой код выглядит так:

 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, "amp;apikey=", public.key, "amp;hash=", hash, sep = ""))
 

Ошибка, которую я получаю здесь, после:

 > content(url) 

$code
[1] "InvalidCredentials"

$message
[1] "That hash, timestamp and key combination is invalid."
 

Ранее основной проблемой была временная метка, и я все еще не уверен, правильно ли я ее рассчитал.
Вот документация для API.

Я надеюсь, что любой, у кого больше опыта работы с API, мог бы мне помочь.

Комментарии:

1. Да, вы правы. Я совсем забыл. Но теперь ошибка: $code [1] "InvalidCredentials" $message [1] "That hash, timestamp and key combination is invalid."$code [1] "InvalidCredentials" $message [1] "That hash, timestamp and key combination is invalid."

Ответ №1:

Вы можете использовать это для начальной загрузки параметров в запросы API (сохранение ваших ключей в довольно очевидных именованных переменных среды, которые лучше всего задавать ~/.Renviron ):

 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")
 

Даже если вы не пишете полноценный пакет, я бы посоветовал прочитать рекомендации Хэдли

Комментарии:

1. Большое вам спасибо! Просто нужно выяснить, как установить переменные в .Renviron И вы имели в виду во второй функции marvel_hash_params() вместо marvel_hash() ?

2. да, извиняюсь. Записи в ~/.Renviron KEY=value : csgillespie.github.io/efficientR/3-3-r-startup.html#renviron