我有一个 DOI 列表,我想将其转换为 BibTeX 记录。bib2doi 包似乎不起作用,所以我使用 R 的curl 包编写了以下代码来扫描列表,创建 bibtex 记录并将其附加到文件中。它对于许多 DOI 都可以正常工作,但(Failed to connect to data.chinadoi.cn port 80: Connection refused)对于 DOI会返回此错误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")
}
Run Code Online (Sandbox Code Playgroud)
如果您希望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"))
}
Run Code Online (Sandbox Code Playgroud)