服务热线
178 0020 3020
#任务1
install.packages("httr")
library(httr)
#模块一:搜索所需信息
baseUrl="https://eutils.ncbi.nlm.nih.gov/"
pubmedAction=list(base="entrez/eutils/index.fcgi",
search="entrez/eutils/esearch.fcgi", #搜索接口
fetch="entrez/eutils/efetch.fcgi", #获取数据接口
summary="entrez/eutils/esummary.fcgi" #获取数据接口(fetch可返回多种数据格式)) #搜索文章的参数
#模块二:将请求的各项数据整理为表格
searchArticleParam=list(retstart=0, #起始位置
retmax=20, #每次取的数量
usehistory='Y',#是否使用历史搜索
querykey='',
webenv='',
term='(cell[TA]) AND 2017[DP]',#提交pubmed的词,
total_num=0, #总记录
total_page=1, #总页数
page_size=20, #每页数目
current_page=1 #当前所在页数
)#不知道为啥好像一定要空行才行
#向网站发送请求信息
postSearchUrl=paste(baseUrl,pubmedAction$search,sep="") #拼接搜索地址
r <- POST(postSearchUrl, #post发送内容
body = list(db='pubmed',
term=searchArticleParam$term,
retmode='json',#解析json数据(一种存高维键值对的格式)
retstart=searchArticleParam$retstart,
retmax=searchArticleParam$retmax,
usehistory=searchArticleParam$usehistory,
rettype='uilist'))
stop_for_status(r) #清除http状态字符串,获取信息后停止请求
#模块三:整理获取得到的信息并输出count结果
data=content(r, "parsed", "application/json")
esearchresult=data$esearchresult
count = esearchresult$count
print(count)
#任务2
#获得title和abstract
#这里使用了上面搜索返回的querkey,webnv,可以加快速度。下面的POST中可以不加上这参数
install.packages("xml2")
library(xml2)
#模块一:搜索所需信息
searchArticleParam$total_num=esearchresult$count
searchArticleParam$querykey=esearchresult$querykey
searchArticleParam$webenv=esearchresult$webenv
#模块二:将请求的各项数据整理为表格
pubmedidStr="29275861,29275860"; #多个pubmedid之间用“,”连接
postFetchUrl=paste(baseUrl,pubmedAction$fetch,sep="")
r2 <- POST(postFetchUrl,
body = list(
db='pubmed',
id=pubmedidStr,
retmode='xml', #返回xml格式的,这个接口不支持json格式
usehistory=searchArticleParam$usehistory,
querykey=searchArticleParam$querykey,
webenv=searchArticleParam$webenv)
)
stop_for_status(r2)
#模块三:整理信息并输出结果
data2=content(r2, "parsed", "application/xml")
article=xml_children(data2)#xml_length(article)为里面文章的数量
count=length(article)
cnt=1
while(cnt<=count){ #循环将title和abstract输出
title=xml_find_first(article[cnt],".//ArticleTitle") #找到第一个ArticleTitle节点
abstract=xml_find_first(article[cnt],".//AbstractText")
print(xml_text(title))
print(xml_text(abstract))
cnt = cnt + 1
}实在无从下手,同样用的R2-02的代码,只是用刚学到的模块化思维分了下类
附件