美国国旗

美国政府的官方网站

NCBI书架。美国国立卫生研究院国家医学图书馆的一项服务。

Entrez编程实用程序帮助[Internet]。贝塞斯达(医学博士):美国国家生物技术信息中心;2010-.

Entrez编程实用程序帮助封面

Entrez编程实用程序帮助[Internet]。

显示详细信息

E-utilities的示例应用程序

,博士。

作者信息和附属机构

创建:; 上次更新时间:2017年11月1日.

预计阅读时间:9分钟

介绍

本章提供了几个示例,说明如何使用电子实用程序构建有用的应用程序。这些示例使用Perl创建E-utility管道,并假设安装了LWP::Simple模块。本模块包括得到支持HTTP GET请求的函数。一个示例(应用程序4)使用HTTPPOST请求,并且需要LWP::UserAgent模块。在Perl中,标量变量名称前面是“$”符号,数组名称前面是一个“@”。在一些情况下,结果将存储在这些变量中,以便在随后的E-utility调用中使用。这里的代码示例是可以复制到文本编辑器并直接执行的工作程序。等效的HTTP请求可以用许多现代编程语言构造;所需要的只是创建和发布HTTP请求的能力。

基本管道

所有E-utility应用程序都由一系列调用组成,我们称之为管道。最简单的E-utility管道由两个调用组成,任何任意管道都可以从这些基本构建块组装而成。许多管道都以ESummary(检索DocSums)或EFetch(检索完整记录)结尾。注释指示代码中任何一个调用都需要的部分。

E搜索–E摘要/E提取

输入:Entrez文本查询

E总结输出:XML文档摘要

EFetch输出:格式化数据记录(例如摘要、FASTA)

使用LWP::Simple;

#下载在MeSH中为哮喘和哮喘编入索引的PubMed记录
#《白三烯》也于2009年出版。

$db=“已发布”;
$query=“哮喘[mesh]+AND+白三烯[mesh]+AND+2009[pdat]”;

#汇编搜索URL
$base='https://eutils.ncbi.nlm.nih.gov/enterz/eutils/';
$url=$base。“esearch.fcgi?db=$db&term=$query&usehistory=y”;

#发布搜索URL
$output=获取($url);

#解析WebEnv和QueryKey
$web=$1,如果($output=~/<WebEnv>(\S+)<\/WebEnv>/);
如果($output=~/<QueryKey>(\d+)<\/QueryKey>/),$key=$1;

###为ESearch-ESummary包含此代码
#汇编摘要URL
$url=$base。“esummary.fcgi?db=$db&query_key=$key&WebEnv=$web”;

#发布摘要URL
$docsums=获取($url);
打印“$docsums”;

###为ESearch-EFetch包含此代码
#组装efetch URL
$url=$base。“efetch.fcgi?db=$db&query_key=$key&WebEnv=$web”;
$url.=“&rettype=abstract&retmode=text”;

#发布efetch URL
$data=获取($url);
打印“$data”;

E成本–E摘要/E蚀刻

输入:Entrez UID列表(整数标识符,例如PMID、GI、Gene ID)

E总结输出:XML文档摘要

EFetch输出:格式化数据记录(例如摘要、FASTA)

使用LWP::Simple;

#下载与GI编号列表相对应的蛋白质记录。

$db=“蛋白质”;
$id_list='1946809225097886262855898295071996678417';

#组装epost URL
$base='https://eutils.ncbi.nlm.nih.gov/enterz/eutils/';
$url=$base。“epost.fcgi?db=$db&id=$id_list”;

#发布报告URL
$output=获取($url);

#解析WebEnv和QueryKey
$web=$1,如果($output=~/<WebEnv>(\S+)<\/WebEnv>/);
如果($output=~/<QueryKey>(\d+)<\/QueryKey>/),$key=$1;

###为EPost-ESummary包含此代码
#汇编摘要URL
$url=$base。“esummary.fcgi?db=$db&query_key=$key&WebEnv=$web”;

#发布摘要URL
$docsums=获取($url);
打印“$docsums”;

###为EPost-EFetch包含此代码
#组装efetch URL
$url=$base。“efetch.fcgi?db=$db&query_key=$key&WebEnv=$web”;
$url.=“&rettype=fasta&retmode=text”;

#发布efetc URL
$data=获取($url);
打印“$data”;

注: 要在单个URL中发布大量(数百个以上)UID,请对EPost调用使用HTTP post方法(请参阅 应用程序4).

EPost–E搜索

输入:Entrez UID列表(整数标识符,例如PMID、GI、Gene ID)

输出:历史记录集,由与Entrez文本查询匹配的已发布UID子集组成

使用LWP::Simple;

#给定一组蛋白质GI编号,此脚本创建
#包含输入集成员的历史集
#对应于人类蛋白质。
#(这些蛋白质中哪些来自人类?)

$db=“蛋白质”;
$query=“人类[orgn]”;
$id_list='1946809225097886262855898295071996678417';

#组装epost URL
$base='https://eutils.ncbi.nlm.nih.gov/enterz/eutils/';
$url=$base。“epost.fcgi?db=$db&id=$id_list”;

#发布报告URL
$output=获取($url);

#解析WebEnv和QueryKey
$web=$1,如果($output=~/<WebEnv>(\S+)<\/WebEnv>/);
如果($output=~/<QueryKey>(\d+)<\/QueryKey>/),$key=$1;

#汇编搜索URL
$term=“%23$key+AND+$query”;
#%23将“#”放在查询键之前
$url=$base。“esearch.fcgi?db=$db&term=$term”;
$url.=“&WebEnv=$web&usehistory=y”;

#搜索后URL
$limited=get($url);

打印“$limited\n”;

#输出仍保留在历史服务器上(&query_key,&WebEnv)
#使用上述ESummary或EFetch检索它们

注: 要在单个URL中发布大量(数百个以上)UID,请对EPost调用使用HTTP post方法(请参阅 应用程序4).

应用1:将GI编号转换为登录编号

目标:从核苷酸GI编号列表开始,准备一组相应的登录编号。

解决方案:将EFetch与retttype=acc一起使用(&R)

输入:$gi_list–以逗号分隔的gi编号列表

输出:加入编号列表。

使用LWP::Simple;
$gi_list=“24475906224465210509786259507198”;

#组装URL
$base='https://eutils.ncbi.nlm.nih.gov/enterz/eutils/';
$url=$base。“efetch.fcgi?db=nucleotide&id=$gi_list&rettype=acc”;

#发布URL
$output=获取($url);
打印“$output”;

笔记: 输入的顺序与$GI_list中GI编号的顺序相同。

应用2:将加入号转换为数据

目标:从蛋白质登录号列表开始,以FASTA格式返回序列。

解决方案:创建一个由项目组成的字符串,项目之间用“OR”分隔,其中每个项目都是后跟“[accn]”的登录号。

示例:accn1[accn]+OR+accn2[accn]+OR+accn3[accn2]+OR+…

在ESearch中将此字符串作为术语提交,然后使用EFetch检索FASTA数据(&T)。

输入:$acc_list–以逗号分隔的加入列表

输出:FASTA数据

使用LWP::Simple;
$acc_list='NM_009417号,NM_000547,NM_001003009,NM_019353号';
@acc_array=拆分(/,/,$acc_list);

#将[accn]字段附加到每个登录
对于($i=0;$i<@acc_array;$i++){
$acc_array[$i].=“[accn]”;
}

#用OR连接加入项
$query=联接('+OR+',@acc_array);

#汇编搜索URL
$base='https://eutils.ncbi.nlm.nih.gov/enterz/eutils/';
$url=$base。“esearch.fcgi?db=nuccore&term=$query&usehistory=y”;

#发布搜索URL
$output=获取($url);

#解析WebEnv和QueryKey
$web=$1,如果($output=~/<WebEnv>(\S+)<\/WebEnv>/);
如果($output=~/<QueryKey>(\d+)<\/QueryKey>/),$key=$1;

#组装efetch URL
$url=$base。“efetch.fcgi?db=nuccore&query_key=$key&WebEnv=$web”;
$url.=“&rettype=fasta&retmode=text”;

#发布efetch URL
$fasta=获取($url);
打印“$fasta”;

笔记: 对于大量访问,请使用HTTP POST提交搜索请求(请参阅 应用程序4),请参阅 应用程序3 用于批量下载大型集。

应用程序3:检索大型数据集

目标:下载FASTA格式的所有黑猩猩mRNA序列(>50000个序列)。

解决方案:首先使用ESearch检索这些序列的GI编号并将其发布到历史服务器上,然后使用多个EFetch调用检索500个批次的数据。

输入:$query–黑猩猩[orgn]+AND+生物醇+mrna[prop]

输出:一个名为“himpe.fna”的文件包含FASTA数据。

使用LWP::Simple;
$query=“黑猩猩[orgn]+AND+biomol+mrna[prop]”;

#汇编搜索URL
$base='https://eutils.ncbi.nlm.nih.gov/enterz/eutils/';
$url=$base。“esearch.fcgi?db=nucleotide&term=$query&usehistory=y”;

#发布搜索URL
$output=获取($url);

#解析WebEnv、QueryKey和Count(检索到的记录数)
$web=$1,如果($output=~/<WebEnv>(\S+)<\/WebEnv>/);
如果($output=~/<QueryKey>(\d+)<\/QueryKey>/),$key=$1;
如果($output=~/<count>(\d+)<\/count>/),$count=$1;

#打开输出文件进行写入
open(OUT,“>himple.fna”)||die“无法打开文件!\n”;

#以500个批次检索数据
$retmax=500;
for($retstart=0;$retstart<$count;$rettart+=$retmax){
$efetch_url=$base。“efetch.fcgi?db=nucleotide&WebEnv=$web”;
$efetch_url.=“&query_key=$key&retstart=$retstart”;
$efetch_url.=“&retmax=$retmax&rettype=fasta&retmode=text”;
$efetch_out=获取($efetch _url);
打印输出“$efetch_OUT”;
}
收尾;

应用程序4:为大型数据集的每个成员查找唯一的链接记录集

目标:分别下载人类20号染色体上每个当前基因的SNP编号(标识符)。

解决方案:首先使用ESearch检索基因的基因ID,然后组装ELink URL,其中每个基因ID作为单独的&ID参数提交。

输入:$query–人类[orgn]+AND+20[chr]+AND+活动[prop]

输出:一个名为“snp_table”的文件,每行包含基因id,后跟一个冒号(“:”),后跟以逗号分隔的链接snp编号列表。

使用LWP::Simple;
使用LWP::UserAgent;
$query='human[orgn]+AND+20[chr]+AND+alive[prop]';
$db1=“基因”;
$db2='snp';
$linkname='gene_snp';

#汇编搜索URL
$base='https://eutils.ncbi.nlm.nih.gov/enterz/eutils/';
$url=$base。“esearch.fcgi?db=$db1&term=$query&usehistory=y&retmax=5000”;

#发布搜索URL
$output=获取($url);

#解析检索到的ID
while($output=~/<Id>(\d+?)<\/Id>/sg){
推送(@ids,1美元);
}

#将链接URL组装为HTTP POST调用
$url=$base。“elink.fcgi”;

$url_params=“dbfrom=$db1&db=$db2&linkname=$linkname”;
foreach$id(@ids){
$url_params.=“&id=$id”;
}

#创建HTTP用户代理
$ua=新LWP::UserAgent;
$ua->代理(“elink/1.0”.$ua->agent);

#创建HTTP请求对象
$req=新HTTP::请求POST=>“$url”;
$req->content_type('应用程序/x-www-form-urlencoded');
$req->内容(“$url_params”);

#发布HTTP请求
$response=$ua->请求($req);
$output=$response->content;

open(OUT,“>snp_table”)||die“无法打开文件!\n”;

while($output=~/<LinkSet>(.*?)<\/LinkSet>/sg){

$linkset=$1;
if($linkset=~/<IdList>(.*?)<\/IdList>/sg){
$input=$1;
$input_id=$1,如果($input=~/<id>(\d+)<\/id>/sg);
}

而($linkset=~/<Link>(.*?)<\/Link>/sg){
$link=$1;
如果($link=~/<Id>(\d+)<\/Id>/),则推送(@output,$1);
}

打印输出“$input_id:”。join(',',@output)。“\n”;

}

收尾;

笔记: 本例使用HTTP POST请求进行elink调用,因为Gene ID的数量超过500。ESearch调用中的&retmax参数设置为5000,因为这是对在一个请求中发送到ELink的ID数量的合理限制(如果发送5000个ID,则实际上执行了5000个ELink操作)。如果需要链接5000多条记录,请将&retstart添加到ESearch调用中,并对每批5000个ID重复整个过程,对每批递增&retstart。

示范项目

请参阅第1章用于示例Perl脚本。

有关更多信息

请参阅第1章获取有关电子实用程序的更多信息。