簡體   English   中英

r 將 DOI 列表轉換為 BibTeX

[英]r convert list of DOIs to BibTeX

我有一個 DOI 列表,我想將其轉換為 BibTeX 記錄。 bib2doi 包似乎不起作用,所以我使用 R 的 curl 包編寫了以下代碼來掃描列表,創建 bibtex 記錄並將其附加到文件中。 它適用於許多 DOI,但它為 DOI 10.11975/j.issn.1002-6819.2017.z1.035返回此錯誤(Failed to connect to data.chinadoi.cn port 80: Connection refused) 我想不通的是如何寫出壞的 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錯誤Connection timed out after 10014 milliseconds

在此處輸入圖片說明

我在另一個帖子上找到了答案。 這是我用來讓它工作的代碼

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM