RISmed(从技术上讲是EUtilsGet)已决定是有问题的。尝试从约3000个PMID下载标题会导致错误:
Error in h(simpleError(msg, call)) :
error in evaluating the argument 'object' in selecting a method for function 'YearPubmed': cannot open the connection to 'https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?
我不包含示例代码,因为该问题是偶发性的(并且如果该问题是由于过多的查询导致的,我不想触发试图复制和使NCBI服务器饱和的人们的攻击!)
我怀疑这-可能是由于试图在单个请求中推送这么多PMID,但就像我说的那样,这是零星的。...它有时确实工作,现在比过去少了。
另一种选择可能是分块下载,或者使用entrez及其网络历史记录功能,但是在不知道为什么RISmed EUtilsGet令人窒息的情况下,我不相信这些方法也不会失败。
答案 0 :(得分:0)
API文档说:
可以传递给ESummary的UID的数量没有设置的最大值,但是如果要提供大约200个以上的UID,则应使用HTTP POST方法发出请求。
但这在RISmed软件包的代码中没有兑现。 EUtilsGet函数调用EUtilsSubGet,它只是折叠ID。这是代码的开头:
RISmed:::EUtilsSubGet
# the ::: operator will sometimes retrieve non-exported code.
function (ids, type = "efetch", db = "pubmed")
{
FetchURL <- EUtilsURL(type, db = db)
IDStr <- collapse("id=", paste(ids, collapse = ","))
EUtilsFetch <- collapse(FetchURL, IDStr)
Remainer snipped
因此,您可能不经意间发送的请求是API承诺要处理的时间的10倍以上。您可以要求维护者提供增强功能,该增强功能遵循API搜索另一个符合发布参数的软件包的要求。