使用 curl 或 RCurl 在 R 中下载并解压缩 JSON 文件
Download & decompress JSON file in R using curl or RCurl
我有以下 bash 脚本来下载和解压缩 JSON 文件:
#!/bin/sh -ex
# Ensure data directory (or a link) exists.
test -e results || mkdir results
# Download and decompress data.
curl -u $GISAID_USERNAME:$GISAID_PASSWORD --retry 4 \
https://www.epicov.org/epi3/3p/$GISAID_FEED/export/provision.json.xz \
| xz -d -T8 > results/gisaid.json
理想情况下,我希望有一个 R 函数来在给定目录中下载和解压缩此文件,环境变量高于 $GISAID_USERNAME、$GISAID_PASSWORD 和 $GISAID_FEED作为参数传递。谁知道如何做到这一点,例如使用包 curl
或 RCurl
? (不解压缩并保留为 .json.xz 也可以,因为我稍后会使用
读取文件
library(jsonlite)
GISAID_json <- jsonlite::stream_in(gzfile(".//data//GISAID_json//provision.json.xz"))
使用 system
函数在 R 中执行终端命令对您有帮助吗?
将您的终端调用输入 system()
,它应该会执行并创建您的文件。然后读入文件。当然,您必须将 $GISAID_USERNAME、$GISAID_PASSWORD 替换为您的实际信息。如果登录信息或 url 应该是灵活的,您可以预先组合一个字符串,因为 system()
需要一个包含要执行的命令的字符串。
system("curl -u $GISAID_USERNAME:$GISAID_PASSWORD --retry 4 \
https://www.epicov.org/epi3/3p/$GISAID_FEED/export/provision.json.xz \
| xz -d -T8 > results/gisaid.json")
然后读入(希望如此)创建的文件。
无法使用您的设置进行测试,但对我来说,例如这个小例子成功创建了一个文件:
system("curl https://raw.githubusercontent.com/SteffenMoritz/imputeTS/master/pkgdown/favicon/favicon.ico > /Users/Steve/Downloads/x.ico")
像这样的东西应该可以工作:
library(curl)
library(glue)
custom_curl <- function(user, pass, feed, dest) {
custom_handle <- curl::new_handle()
curl::handle_setopt(
custom_handle,
username = user,
password = pass
)
url <- glue::glue(
"https://www.epicov.org/epi3/3p/{feed}/export/provision.json.xz"
)
curl::curl_download(url, dest, handle = custom_handle)
}
custom_curl('my_user', 'xxxxxx', 'feed1', 'dest/filename.json.xz')
由于我无法在真实文件中进行测试,而且 url,我不确定是否需要对函数进行少量修改,但至少是您的起点。
我有以下 bash 脚本来下载和解压缩 JSON 文件:
#!/bin/sh -ex
# Ensure data directory (or a link) exists.
test -e results || mkdir results
# Download and decompress data.
curl -u $GISAID_USERNAME:$GISAID_PASSWORD --retry 4 \
https://www.epicov.org/epi3/3p/$GISAID_FEED/export/provision.json.xz \
| xz -d -T8 > results/gisaid.json
理想情况下,我希望有一个 R 函数来在给定目录中下载和解压缩此文件,环境变量高于 $GISAID_USERNAME、$GISAID_PASSWORD 和 $GISAID_FEED作为参数传递。谁知道如何做到这一点,例如使用包 curl
或 RCurl
? (不解压缩并保留为 .json.xz 也可以,因为我稍后会使用
library(jsonlite)
GISAID_json <- jsonlite::stream_in(gzfile(".//data//GISAID_json//provision.json.xz"))
使用 system
函数在 R 中执行终端命令对您有帮助吗?
将您的终端调用输入 system()
,它应该会执行并创建您的文件。然后读入文件。当然,您必须将 $GISAID_USERNAME、$GISAID_PASSWORD 替换为您的实际信息。如果登录信息或 url 应该是灵活的,您可以预先组合一个字符串,因为 system()
需要一个包含要执行的命令的字符串。
system("curl -u $GISAID_USERNAME:$GISAID_PASSWORD --retry 4 \
https://www.epicov.org/epi3/3p/$GISAID_FEED/export/provision.json.xz \
| xz -d -T8 > results/gisaid.json")
然后读入(希望如此)创建的文件。
无法使用您的设置进行测试,但对我来说,例如这个小例子成功创建了一个文件:
system("curl https://raw.githubusercontent.com/SteffenMoritz/imputeTS/master/pkgdown/favicon/favicon.ico > /Users/Steve/Downloads/x.ico")
像这样的东西应该可以工作:
library(curl)
library(glue)
custom_curl <- function(user, pass, feed, dest) {
custom_handle <- curl::new_handle()
curl::handle_setopt(
custom_handle,
username = user,
password = pass
)
url <- glue::glue(
"https://www.epicov.org/epi3/3p/{feed}/export/provision.json.xz"
)
curl::curl_download(url, dest, handle = custom_handle)
}
custom_curl('my_user', 'xxxxxx', 'feed1', 'dest/filename.json.xz')
由于我无法在真实文件中进行测试,而且 url,我不确定是否需要对函数进行少量修改,但至少是您的起点。