r 将 DOI 列表转换为 BibTeX

r convert list of DOIs to BibTeX

我有一个 DOI 列表,我想将其转换为 BibTeX 记录。 bib2doi 包似乎不起作用,所以我使用 R 的 curl 包编写了以下代码来扫描列表,创建 bibtex 记录并将其附加到文件中。它适用于许多 DOI,但它 returns 这个错误 (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")
}

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

我尝试了 运行 代码,结果 .bib 文件只有一个条目。它似乎没有附加它们。下面是截图。还有其他人有这个问题吗?此外,字符串中的第三个 DOI 会导致 Connection timed out after 10014 milliseconds 错误。

我在另一个 post 上找到了答案。这是我用来让它工作的代码

pacman::p_load(curl,readr, tidyverse) # load required packages

urls <- c("https://doi.org/10.1016/j.tvjl.2017.12.021", "https://doi.org/10.1016/j.yqres.2013.10.005") 
walk(urls, ~ {
  curl(., handle = h) %>%
    readLines(warn = FALSE) %>%
    write(file = "Desktop\test.bib", append = TRUE) 
})

read_delim("Desktop\test.bib", delim = "\n") # this will add break lines to your bib file you created