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
我有一个 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