我写的脚本是:
##Call server
library(RCurl)
library(tidyverse)
library(stringr)
library(redcapAPI)
TableForR<-read.csv("//usershare/users$/aweible1/Profile_Data/Desktop/REDCap Monthly Check/TableForR.csv")
for(j in seq_len(nrow(TableForR))){
labelFile <- RCurl::postForm(
uri = "https://redcap.uhhospitals.org/redcap/api/",
token = TableForR[j,1],
content = 'report',
report_id = TableForR[j,2],
format = 'csv',
type = 'flat',
rawOrLabel = 'label',
exportDataAccessGroups = 'true',
.opts = curlOptions(ssl.verifypeer=FALSE)
)
backup <- read.csv(text = labelFile, stringsAsFactors = FALSE)
write.csv(backup, file = TableForR[j,3], row.names=FALSE)
}
i我期望它基于CSV文件中的变量输入,在桌面上的文件夹中吐出273个文件。这将对我有很大的帮助,因为我试图自动化一个API。
consisss让
REDCapR::redcap_report()
与服务器交谈,并在其周围编写一个循环。
uri <- "https://bbmc.ouhsc.edu/redcap/api/"
ds_control <-
tibble::tribble(
~token, ~report_id, ~file_name,
"9A81268476645C4E5F03428B8AC3AA7B", 5980L, "a.csv",
"9A81268476645C4E5F03428B8AC3AA7B", 6431L, "b.csv"
)
download_and_save_report <- function(token, report_id, file_name) {
message("Processing report ", ds_control$report_id[i])
d <-
REDCapR::redcap_report(
redcap_uri = uri,
token = token,
report_id = report_id
)$data
readr::write_csv(d, file_name)
}
for(i in seq_len(nrow(ds_control))) {
download_and_save_report(
token = ds_control$token[i],
report_id = ds_control$report_id[i],
file_name = ds_control$file_name[i]
)
}
Console&File System的输出
Downloading report 5980
5 records and 5 columns were read from REDCap in 0.1 seconds. The http status code was 200.
Downloading report 6431
5 records and 2 columns were read from REDCap in 0.1 seconds. The http status code was 200.
这个呼吁
purrr::walk()
完成与for loop的同一操作。
ds_control |>
purrr::pwalk(
\(token, report_id, file_name) {
download_and_save_report(token, report_id, file_name)
}
)
(向新用户注释,这个令牌指向一个没有PHI的示例项目。请不要向具有敏感数据的真实项目发布令牌。)