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:

  1. Отдельные снимки Марвина Уильяма за 2017-2018 гг.; а также
  2. Данные о среднем выстреле в лиге НБА в сезоне 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 #
Другие вопросы по тегам