В настоящее время я работаю с данными из онлайн-базы данных.Я получаю доступ к данным через API, который работает, когда я получаю все данные одновременно.Но это замедляет работу моей системы, поэтому я хочу сделать запрос только для отфильтрованных данных (чего я не делал до сих пор).Это способ получить весь набор данных:
#-------------------------------#
# packages #
#-------------------------------#
library(httr)
library(jsonlite)
#-------------------------------#
# API requests #
#-------------------------------#
## get all data at once ##
url <- "https://www.eter-project.com/api/3.0/HEIs/full"
raw_result <- GET(url)
#-------------------------------#
# data processing #
#-------------------------------#
# 'status_code' (if request worked) and 'content' (APIs answer) important
names(raw_result)
# '200' tells us that server received request
raw_result$status_code
# translate Unicode into text
this.raw.content <- rawToChar(raw_result$content)
# transform json into workable format for R
mydata <- fromJSON(this.raw.content, flatten = TRUE)
class(mydata)
dim(mydata)
Согласно документации (https://www.eter -project.com / api / doc / # / ) мне нужен запрос POSTиспользуя url https://www.eter-project.com/api/3.0/HEIs/query
и фильтр, встроенный в следующую структуру:
{
"filter": {},
"fieldIds": {}
}
Я хочу фильтровать по годам и странам, чтобы получать только те данные, с которыми я в данный момент хочу работать.Структура фильтра будет выглядеть следующим образом: { "BAS.REFYEAR.v": 2011, "BAS.COUNTRY.v": "AT"}
.
Кто-нибудь знает, как я могу реализовать это в запросе POST?
До сих пор я предпринял несколько отчаянных попыток включить фильтр.в запросы POST (например, raw_result <- POST(url, body = list({
"filter": {"BAS.REFYEAR.v" = 2011}}), encode = "json")
и игра с пакетом mongolite
, который даже близко не был.
ОБНОВЛЕНИЕ: проблема фильтрации была решена. Я использовал следующее решение:
myquery <- '{
"filter": {"BAS.REFYEAR.v": 2015, "BAS.COUNTRY.v": "LV"},
"fieldIds": {},
"searchTerms": []
}'
url <- "https://www.eter-project.com/api/3.0/HEIs/query"
raw_result <- POST(url, body = myquery, content_type_json())
Теперь я столкнулся с другой проблемой: данные содержат много специальных символов, которые неправильно отображаются в R (например, Alberta koledža
в наборе данных отображается как Alberta koledžain
R). Есть ли способ решить эту проблему?Например, используя UTF-8 в запросе вызова?