r - r 将 DOI 列表转换为 BibTeX
问题描述
我有一份想要转换为 BibTeX 记录的 DOI 列表。bib2doi 包似乎不起作用,所以我使用 R 的 curl 包编写了以下代码来扫描列表,创建 bibtex 记录并将其附加到文件中。它适用于许多 DOI,但它会为 DOI 返回此(Failed to connect to data.chinadoi.cn port 80: Connection refused)
错误10.11975/j.issn.1002-6819.2017.z1.035
。我想不通的是如何写出错误的 DOI 并继续前进。这是包含三个 DOI 的代码,第二个 DOI 是失败的。
library(curl)
DOIlist <- c("10.1111/1748-5967.12330", "10.11975/j.issn.1002-6819.2017.z1.035", "10.1016/j.envsci.2019.03.017")
h <- new_handle()
handle_setheaders(h, "accept" = "application/x-bibtex")
for (i in 1:length(DOIlist)) {
url <- paste0("https://doi.org/", DOIlist[i])
print(paste0("url: ", url))
curl_download(url, destfile = "curltest.bib", handle = h, mode = "a")
}
解决方案
如果您希望在for
由于 DOI 错误而引发错误后继续循环,您可以将curl_download()
调用包装在try()
. 它仍然会抛出错误,但您的循环将继续进行:
library(curl)
DOIlist <- c("10.1111/1748-5967.12330", "10.11975/j.issn.1002-6819.2017.z1.035", "10.1016/j.envsci.2019.03.017")
h <- new_handle()
handle_setheaders(h, "accept" = "application/x-bibtex")
for (i in 1:length(DOIlist)) {
url <- paste0("https://doi.org/", DOIlist[i])
print(paste0("url: ", url))
try(curl_download(url, destfile = "curltest.bib", handle = h, mode = "a"))
}
推荐阅读
- c++ - 已连接客户端的唯一标识符
- c - 无法在没有 toupper 的情况下使用 C 中的循环将 char* 指针转换为小写/大写
- c - 访问联合内的结构
- r - 是否可以从另一个 igraph 的顶点创建 igraph 对象?
- python-3.x - 如何根据从更具体的数据框派生的重叠日期创建聚合/汇总 pandas 数据框?
- python - 在一列中超过 20 行
- applescript - Applescript 多个“告诉应用程序”
- c - 为什么我的 C 程序不等待扫描输入?
- angular - 如何以角度正确地从拦截器调用服务方法
- docker - 为什么 docker-compose 卷没有正确安装?(我在 docker 中使用 nginx 和 certbot)