使用 r (httr) 获取多个 pubmed 摘要
Fetching multiple pubmed abstract using r (httr)
这是我试图从这个问题中执行的相同任务的延续。
使用下面的答案,我能够找到感兴趣的摘要的 pubmed ID。
现在,我正在尝试获取这些摘要的标题和全文(作为 2 列数据框,一列用于标题,一列用于摘要文本)。
我从 api 文档中了解到可以传递多个 ID,因此我尝试了下面的代码。
library(XML)
library(httr)
library(glue)
library(dplyr)
####
####
query = 'asthma[mesh]+AND+leukotrienes[mesh]+AND+2009[pdat]'
reqq = glue ('https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term={query}')
reqq = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=science[journal]+AND+breast+cancer+AND+2008[pdat]&usehistory=y"
op = GET(reqq)
content(op)
df_op <- op %>% xml2::read_xml() %>% xml2::as_list()
pmids <- df_op$eSearchResult$IdList %>% unlist(use.names = FALSE)
上面的代码将pmid作为一个字符获取,然后我尝试将它们传递给efetch
reqq1 = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&id=pmids&rettype=abstract&retmode=xml"
op1 = GET(reqq1)
content(op1)
我收到一条错误消息:ID 列表为空!可能它没有正确的 ID。
然后我尝试更改 ID 字符串的格式,使它们以逗号分隔且不带引号或 space in-between.
idc = paste(shQuote(pmids, type = "cmd"), collapse = ", ")
idc = gsub('"', '', idc)
idc = gsub(' ', '', idc)
# Then pass them to the same code:
reqq1 = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&id=idc&rettype=abstract&retmode=xml"
op1 = GET(reqq1)
content(op1)
但我仍然收到与上述相同的错误。
我想要实现的是获取包含这些摘要数据的 xml 文件(然后最终将标题和摘要 body 提取到数据框中)。
是否可以将所有 ID 传递到一次提取中,或者必须使用循环将这些 ID 一个一个发送?如果您能提供一些指导或有一个可用的简短脚本,将不胜感激。
谢谢
reqq1
仍然只是一个字符串。您可以使用 glue
来使用 pmids
的实际值。我认为您可以一起查询多个 ID,在这种情况下,您可以使用 paste0(..., collapse = ',')
将 ID 折叠为一个逗号分隔的字符串。
reqq1 = glue("https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&id={paste0(pmids, collapse = ',')}&rettype=abstract&retmode=xml")
op1 = GET(reqq1)
content(op1)
{xml_document}
<PubmedArticleSet>
[1] <PubmedArticle>\n <MedlineCitation Status="MEDLINE" Owner="NLM">\n <PMID Version="1">19008416</PMID> ...
[2] <PubmedArticle>\n <MedlineCitation Status="MEDLINE" Owner="NLM">\n <PMID Version="1">18927361</PMID> ...
[3] <PubmedArticle>\n <MedlineCitation Status="MEDLINE" Owner="NLM">\n <PMID Version="1">18787170</PMID> ...
[4] <PubmedArticle>\n <MedlineCitation Status="MEDLINE" Owner="NLM">\n <PMID Version="1">18487186</PMID> ...
[5] <PubmedArticle>\n <MedlineCitation Status="MEDLINE" Owner="NLM">\n <PMID Version="1">18239126</PMID> ...
[6] <PubmedArticle>\n <MedlineCitation Status="MEDLINE" Owner="NLM">\n <PMID Version="1">18239125</PMID> ...
这是我试图从这个问题中执行的相同任务的延续。
使用下面的答案,我能够找到感兴趣的摘要的 pubmed ID。
现在,我正在尝试获取这些摘要的标题和全文(作为 2 列数据框,一列用于标题,一列用于摘要文本)。
我从 api 文档中了解到可以传递多个 ID,因此我尝试了下面的代码。
library(XML)
library(httr)
library(glue)
library(dplyr)
####
####
query = 'asthma[mesh]+AND+leukotrienes[mesh]+AND+2009[pdat]'
reqq = glue ('https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term={query}')
reqq = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=science[journal]+AND+breast+cancer+AND+2008[pdat]&usehistory=y"
op = GET(reqq)
content(op)
df_op <- op %>% xml2::read_xml() %>% xml2::as_list()
pmids <- df_op$eSearchResult$IdList %>% unlist(use.names = FALSE)
上面的代码将pmid作为一个字符获取,然后我尝试将它们传递给efetch
reqq1 = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&id=pmids&rettype=abstract&retmode=xml"
op1 = GET(reqq1)
content(op1)
我收到一条错误消息:ID 列表为空!可能它没有正确的 ID。
然后我尝试更改 ID 字符串的格式,使它们以逗号分隔且不带引号或 space in-between.
idc = paste(shQuote(pmids, type = "cmd"), collapse = ", ")
idc = gsub('"', '', idc)
idc = gsub(' ', '', idc)
# Then pass them to the same code:
reqq1 = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&id=idc&rettype=abstract&retmode=xml"
op1 = GET(reqq1)
content(op1)
但我仍然收到与上述相同的错误。 我想要实现的是获取包含这些摘要数据的 xml 文件(然后最终将标题和摘要 body 提取到数据框中)。 是否可以将所有 ID 传递到一次提取中,或者必须使用循环将这些 ID 一个一个发送?如果您能提供一些指导或有一个可用的简短脚本,将不胜感激。
谢谢
reqq1
仍然只是一个字符串。您可以使用 glue
来使用 pmids
的实际值。我认为您可以一起查询多个 ID,在这种情况下,您可以使用 paste0(..., collapse = ',')
将 ID 折叠为一个逗号分隔的字符串。
reqq1 = glue("https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&id={paste0(pmids, collapse = ',')}&rettype=abstract&retmode=xml")
op1 = GET(reqq1)
content(op1)
{xml_document}
<PubmedArticleSet>
[1] <PubmedArticle>\n <MedlineCitation Status="MEDLINE" Owner="NLM">\n <PMID Version="1">19008416</PMID> ...
[2] <PubmedArticle>\n <MedlineCitation Status="MEDLINE" Owner="NLM">\n <PMID Version="1">18927361</PMID> ...
[3] <PubmedArticle>\n <MedlineCitation Status="MEDLINE" Owner="NLM">\n <PMID Version="1">18787170</PMID> ...
[4] <PubmedArticle>\n <MedlineCitation Status="MEDLINE" Owner="NLM">\n <PMID Version="1">18487186</PMID> ...
[5] <PubmedArticle>\n <MedlineCitation Status="MEDLINE" Owner="NLM">\n <PMID Version="1">18239126</PMID> ...
[6] <PubmedArticle>\n <MedlineCitation Status="MEDLINE" Owner="NLM">\n <PMID Version="1">18239125</PMID> ...