как получить данные из ВТО API в R - PullRequest
0 голосов
/ 17 апреля 2020
library(httr)
library(jsonlite)

headers = c(
  # Request headers
  'Ocp-Apim-Subscription-Key' = '{subscription key}'
)

params = list()

# Request parameters
params['countries[]'] = '{array}'


resp <- GET(paste0("https://api.wto.org/tfad/transparency/procedures_contacts_single_window?"

               , paste0(names(params),'=',params,collapse = "&")),

        add_headers(headers))

if(!http_error(resp)){    
  jsonRespText<-fromJSON(rawToChar(content(resp,encoding = 'UTF-8')))$Dataset

  jsonRespText

}else{
  stop('Error in Response')
}

Я не знаю, как получить ответ от API в R. Я выполнил этот код, но сервер не отвечает ...

1 Ответ

0 голосов
/ 17 апреля 2020

Если вы проверите значение объекта resp после выполнения кода, вы увидите код состояния:

> resp
Response [https://tfadatabase.org/api/transparency/procedures_contacts_single_window?countries[]=%7Barray%7D]
  Date: 2020-04-17 19:25
  Status: 422
  Content-Type: application/json
  Size: 77 B

Таким образом, сервер фактически ответил , просто не дал вам то, на что вы надеялись. В документации API мы можем найти этот код:

422 Unprocessable Entity

Если элемент не может быть найден или параметры запроса плохо сформированы.

Поэтому я просто зашел в Query Builder, нашел действующий URL-адрес запроса и обновил код. Он работал нормально - т.е. статус 200.

Это был URL, который я использовал в коде:

https://api.wto.org/timeseries/v1/data?i=TP_A_0100&r=000&fmt=json&mode=full&lang=1&meta=false

, а значение resp было

  Date: 2020-04-17 19:30
  Status: 200
  Content-Type: application/json; charset=utf-8
  Size: 88 B

Я вырезал ключ подписки в моих результатах выше. Вы можете найти Query Builder здесь . Кстати, в Query Builder он автоматически включает ключ подписки и другую информацию «заголовка» в URL. Вы можете сначала удалить это и повторно добавить его в свой код, или просто измените код так, чтобы он запускал GET() непосредственно для их версии URL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...