Я играю с некоторыми данными Fantasy Premier League, доступными через API.
Желаемый результат, вложенные кадры данных, достигается при выполнении следующего кода:
library(jsonlite)
url <- "https://fantasy.premierleague.com/drf/bootstrap-static"
fromJSON(url)
Если вы войдете в систему, вы получите больше данных. Я не могу заставить пакет httr
работать с API, где-то читал, что он перестал работать после изменения SSL некоторое время назад.
Я могу войти в систему и получить данные, пройдя через Python, но в итоге получаю другой json.
Код ниже иллюстрирует проблему. После прохождения Python значения помещаются в массивы (обратите внимание на скобки в нижнем выводе json):
library(tidyverse)
library(jsonlite)
# No authentication
# API url
bootstrapUrl <- "https://fantasy.premierleague.com/drf/bootstrap-static"
# Desired result
fromJSON(bootstrapUrl) %>%
toJSON() %>%
substr(., 1, 100)
#> {"phases":[{"id":1,"name":"Overall","num_winners":3,"start_event":1,"stop_event":38},{"id":2,"name":
# With authentication
library(reticulate)
use_python("/usr/bin/python3.6")
source_python("~/Projects/pl/api_request.py")
### api_request.py
#
# import requests
#
# def py_get_json(subdomain):
# session = requests.session()
# apiUrl = "https://fantasy.premierleague.com/drf/"
# loginUrl = 'https://users.premierleague.com/accounts/login/'
# payload = {
# 'password': '',
# 'login': '',
# 'redirect_uri': 'https://fantasy.premierleague.com/a/login',
# 'app': 'plfpl-web'
# }
# session.post(loginUrl, data=payload)
# targetUrl = apiUrl + subdomain
#
# return session.get(targetUrl).json()
#
###
subdomain <- "bootstrap-static"
json <- py_get_json(subdomain)
json %>%
toJSON() %>%
substr(., 1, 100)
#> {"phases":[{"id":[1],"name":["Overall"],"num_winners":[3],"start_event":[1],"stop_event":[38]},{"id"
Я предполагаю, что это связано с тем, как объект Python возвращается в R через reticulate
. Я ищу легкое исправление, есть ли в jsonlite
какая-нибудь функциональность, которая может с этим разобраться?