编写一个循环以从 Oanda API 中提取帐户数据,查询限制为 100 [R]

Writing a Loop to Pull Account Data from Oanda API with 100 query limit [R]

我有以下函数 'AccountHisTransactions',其中从我的交易账户中提取历史交易。我面临的挑战是我想提取账户中的所有可用数据,以便我可以分析数据并构建一个应用程序来审查交易。当前函数允许在我调用它时允许 100 行数据。当我在 'pag' 对象中放置一个整数时,它将专门从 API 中拉出该页面。我尝试了各种方法,但 json 文档指出我只能在此处输入整数。而不是 运行 这个函数多次提取所有数据,有没有人可以帮助我理解如何构建循环或某种方法将所有数据提取到 R 而不是 100 个增量?

提前感谢您的帮助

AccountHistTransactions  <- function(AccountType,AccountID,Token,Instrument,Count,ApiVersion) {

if(AccountType == "practice"){
httpaccount <- "https://api-fxpractice.oanda.com"
} else if (AccountType == "live"){
httpaccount <- "https://api-fxtrade.oanda.com"
} else {
print("Account type error. Must be practice or live")
}  
if(missing(ApiVersion) || ApiVersion == "v1") {

ApiVersion <- "v1"

# -- --------------------------------------------------------------------------- Version 1.0 -- #
# -- ------------------------------------------------------------------------------------------ #

auth      <- c(Authorization = paste("Bearer",Token,sep=" "))
Queryhttp <- paste(httpaccount,"/v1/accounts/",sep="")
Querythttp1 <- paste(Queryhttp,AccountID,sep="")
Querythttp2 <- paste(Querythttp1,"/transactions?instrument=",sep="")
Querythttp3 <- paste(Querythttp2,Instrument,sep="")
Querythttp4 <- paste(Querythttp3,"&count=",sep="")
Querythttp5 <- paste(Querythttp4,Count,sep="")
QueryInst1  <- getURL(Querythttp5,cainfo=system.file("CurlSSL","cacert.pem",
                                                     package="RCurl"),httpheader=auth)
InstJson <- fromJSON(QueryInst1, simplifyDataFrame = TRUE)

return(InstJson)

# -- --------------------------------------------------------------------------- Version 2.0 -- #
# -- ------------------------------------------------------------------------------------------ #

} else if (ApiVersion == "v2") {

auth      <- c(Authorization = paste("Bearer",Token,sep=" "))
Queryhttp <- paste(httpaccount,"/v3/accounts/",sep="")
Querythttp1 <- paste(Queryhttp,AccountID,sep="")
Querythttp2 <- paste(Querythttp1,"/transactions?instrument=",sep="")
Querythttp3 <- paste(Querythttp2,Instrument,sep="")
Querythttp4 <- paste(Querythttp3,"&count=",sep="")
Querythttp5 <- paste(Querythttp4,Count,sep="")
QueryInst1  <- getURL(Querythttp5,cainfo=system.file("CurlSSL","cacert.pem",
                                                     package="RCurl"),httpheader=auth)
InstJson <- fromJSON(QueryInst1, simplifyDataFrame = TRUE)

pagesize <- InstJson$pageSize
count    <- InstJson$count
Hist <- data.frame()

curlOptions(filter = "")
pag <- paste0(InstJson$pages[1])
QI1 <- getURL(pag,cainfo=system.file("CurlSSL","cacert.pem", package="RCurl"), httpheader=auth)
IJ  <- fromJSON(QI1, simplifyDataFrame = TRUE)

return(IJ)
} 
    }


##TESTING CODE ABOVE-----------------------------------------------------------------------------
#p1_AccountType <- "live"
#p2_Token       <- "-TOKEN"
#p3_Instrument  <- 
#p4_AccountID   <- "000-000-000000-00"
#p5_ApiVersion  <- "v2"
#p6_Count <- 3
#OA_HistTrans  <- AccountHistTransactions(AccountType = p1_AccountType,
                                      AccountID = p4_AccountID,
                                      Token = p2_Token, Instrument = p3_Instrument,
                                       Count = p6_Count, ApiVersion = p5_ApiVersion)

 ####--------------------------------------------------------------------------------------###
curlOptions(filter = "")
#print(length(InstJson$pages))
finalVect <- c()
for( pageLink in InstJson$pages ) {
  QI1 <- getURL(pageLink,cainfo=system.file("CurlSSL","cacert.pem", package="RCurl"), httpheader=auth)
  finalVect <- rbind(finalVect, fromJSON(QI1, simplifyDataFrame = TRUE))
}

return(finalVect)
}   
 }

我能够创建一个空数据框,然后遍历将信息绑定在一起的结果