R не может открыть соединение`
Я снимаю с NBA.com API для некоторых снимков данных. URL, который я использую,
url = "stats.nba.com/stats/shotchartdetail?CFID=33&CFPARAMS=2017-18&ContextFilter=&ContextMeasure=FGA&DateFrom=&DateTo=&GameID=&GameSegment=&LastNGames=0&LeagueID=00&Location=&MeasureType=Base&Month=0&OpponentTeamID=0&Outcome=&PaceAdjust=N&PerMode=PerGame&Period=0&PlayerID=101107&PlusMinus=N&PlayerPosition=&Rank=N&RookieYear=&Season=2017-18&SeasonSegment=&SeasonType=Regular%20Season&TeamID=0&VsConference=&VsDivision="
Этот веб-сайт может быть легко подтвержден путем копирования и вставки в ваш браузер. Тем не менее, когда я вхожу в строку
data = rjson::fromJSON(file = url)
Я получаю сообщение об ошибке: Ошибка в файле (con, "r"): не удается открыть соединение... HTTP-статус был "403 Forbidden".
Я попытался добавить http и https в URL, но безрезультатно. Почему R не читает этот URL, который явно существует?
1 ответ
Решение
обзор
Вам необходимо загрузить данные в r, а затем импортировать этот файл.json в fromJSON()
, Я показал, как извлечь два фрейма данных, содержащихся в объекте списка marvin.williams.shot.data
:
- Отдельные снимки Марвина Уильяма за 2017-2018 гг.; а также
- Данные о среднем выстреле в лиге НБА в сезоне 2017-2018.
Воспроизводимый пример
# load necessary packages
library( jsonlite )
# load necessary data
download.file( url = "http://stats.nba.com/stats/shotchartdetail?CFID=33&CFPARAMS=2017-18&ContextFilter=&ContextMeasure=FGA&DateFrom=&DateTo=&GameID=&GameSegment=&LastNGames=0&LeagueID=00&Location=&MeasureType=Base&Month=0&OpponentTeamID=0&Outcome=&PaceAdjust=N&PerMode=PerGame&Period=0&PlayerID=101107&PlusMinus=N&PlayerPosition=&Rank=N&RookieYear=&Season=2017-18&SeasonSegment=&SeasonType=Regular%20Season&TeamID=0&VsConference=&VsDivision="
, destfile = "stats_nba.json" )
# transfrom into data frame
marvin.williams.shot.data <-
fromJSON( txt = "stats_nba.json" )
# view results
lapply( X = marvin.williams.shot.data, FUN = class)
# $resource
# [1] "character"
#
# $parameters
# [1] "list"
#
# $resultSets
# [1] "data.frame"
# transfrom the matrix into a data frame
player.shotchart.df <-
as.data.frame( marvin.williams.shot.data$resultSets$rowSet[[1]]
, stringsAsFactors = FALSE )
# assign colnames
colnames( player.shotchart.df ) <-
marvin.williams.shot.data$resultSets$headers[[1]]
# view results
dim( player.shotchart.df ) # [1] 563 24
# transfrom the matrix into a data frame
league.average.df <-
as.data.frame( marvin.williams.shot.data$resultSets$rowSet[[2]]
, stringsAsFactors = FALSE )
# assign colnames
colnames( league.average.df ) <-
marvin.williams.shot.data$resultSets$headers[[2]]
# view results
dim( league.average.df ) # [1] 20 7
# end of script #