在使用jsonlite包进行API调用以处理R中的JSON文件时,如何处理HTTP错误503?

时间:2016-05-27 15:09:37

标签: json r steam-web-api jsonlite data-collection

我在使用R中的JSONlite软件包时遇到问题,无法使用Steam API收集Dota2匹配数据。我不是一个经验丰富的开发人员,非常感谢任何帮助。谢谢!

我在R中创建了一个脚本。当我使用Web浏览器检查API调用时,它正确地返回JSON内容,但是当我在R中执行相同的API调用时(在for循环中或作为单个调用) )使用fromJSON命令我得到以下错误:

Error in open.connection(con, "rb") : HTTP error 503.
In addition: Warning message:
closing unused connection 3 (https://api.steampowered.com/IDOTA2Match_570/GetMatchDetails/V001/?match_id=2170111273&key=XXXXXXXXXXPLACEHOLDERXXXXXXXXXXX) 

这是我创建的R脚本,用于使用fromJSON命令和jsonlite收集多个JSON响应:

# Load required libraries

library(rvest)
library(stringr)
library(magrittr)
library(plyr)
library(dplyr)
library(tidyr)
library(knitr)
library(XML)
library(data.table)
library(foreign)
library(pbapply)
library(jsonlite)

## Set base url components

base.url_0 = "https://api.steampowered.com/IDOTA2Match_570/GetMatchDetails/V001/?match_id="
base.url_0.1 = "&key="
steamAPIkey = "XXXXXXXXXXPLACEHOLDERXXXXXXXXXXX" # Steam API Key

 ### Create for loop where each "i" is a DOTA2 match ID

for(i in seq(1:length(targets$match_id))) {

base.url = paste0(
  base.url_0,
  targets$match_id[i],
  base.url_0.1,
  steamAPIkey)
message("Retrieving page ", targets$match_id[i])

## Get JSON response and store into data.frame

ifelse(

  tmp_json <- fromJSON(
    txt = base.url,flatten = T), # if the json file exists

  as.data.frame(tmp_errors_1$matches) <- base.url # if the json file does not   exists

) # close ifelse statement

tmp_json <- try_default( 
  expr = 
    as.data.frame(tmp_json), # convert json file into a data frame
  default = 
    as.data.frame(tmp_errors_2$matches) <- base.url, quiet = T) # if error, add match id to a dataframe

## Rbindlist

l = list(results, tmp_json)
results <- rbindlist(l,fill = T)

## Sleep for x seconds

Sys.sleep(runif(1, 2, 3))

   ## End of loop
    }

0 个答案:

没有答案