3

JSONliteを使用して Dota2 マッチ データを収集するために R でパッケージを使用すると問題が発生しますSteam API。私は経験豊富な開発者ではありません。ありがとう!

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) 

これは、fromJSON コマンドと jsonlite を使用して複数の JSON 応答を収集するために作成した R スクリプトです。

# 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
    }
4

0 に答える 0