服务热线
178 0020 3020
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,
body = list(
db='pubmed',
term=searchArticleParam$term,
retmode='json',
retstart=searchArticleParam$retstart,
retmax=searchArticleParam$retmax,
usehistory=searchArticleParam$usehistory,
rettype='uilist'
)
)
stop_for_status(r) #清除http状态字符串
data=content(r, "parsed", "application/json")
#data里面存储了所有数据
esearchresult=data$esearchresult
# $count=562,$retmax=20, $retstart=0,$querykey=1, $webenv=NCID_1_30290513_130.14.18.34_9001_1515165012_617859421_0MetA0_S_MegaStore_F_1
count = esearchresult$count
print(count)
第一题,第一次做按照自己的理解,写了一下,结果是552,对比其他人的做法,发觉自己的理解太奇葩了,所以奇葩的代码就不贴出来了,万一误导大众呢?
library("xml2")
searchArticleParam$total_num=esearchresult$count
searchArticleParam$querykey=esearchresult$querykey
searchArticleParam$webenv=esearchresult$webenv
pubmedidStr="29275861,29275860";postFetchUrl=paste(baseUrl,pubmedACTION$fetch,sep="")
r2=POST(postFetchUrl,body=list(db='pubmed',id=pubmedidStr,retmode='xml',usehistory=searchArticleParam$usehistory,querykey=searchArticleParam$querykey,webenv=searchArticleParam$webenv))
r2
stop_for_status(r2)
data2=content(r2,"parsed","application/xml")
article=xml_children(data2)
count=length(article)
cnt=1
while(cnt<=count){
title=xml_find_first(article[cnt],".//ArticleTitle")
abstract=xml_find_first(article[cnt],".//AbstractText")
print(xml_text(title))
print(xml_text(abstract))
cnt = cnt + 1}
第二题真的没有明白,嗯,好难。
附件