首页 > 解决方案 > 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")
}

标签: rcurldoi

解决方案


如果您希望在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"))
}

推荐阅读