......建筑与建筑实施Perl& amp;休息

时间:2012-10-25 17:28:09

标签: perl rest

我真的只需要一些基本的软件工程架构指导......当我说“架构”时,我的意思是伪代码或语句,我可以在Perl书中找到,并希望有些在线实例...

我正在使用Perl而我正在尝试解析Unix系统上的Medline / Pubmed文件路径,以便最终将PMID从每个路径传递到pmid2doi转换网站(http://www.pmid2doi.org/

每个链接的结构都是格式的文件路径...

/xxxxx/xxxxx/xxxxx/xxxxx/xxxxx/UNC00000000000042/00223468/v45i3/S0022346809003820
                                                |<-PMID->|

其中00223468是PMID。

$ ls
18507872 main.pdf main.raw main.xml

到目前为止,我已经看到了这样的内容(在bash中):

for doi in `find . -name "*.xml" | awk -F\/ '{print $2}' `  #this extracts the PMID
do
        echo  $doi
        wget pmid2doi website
done

现在我需要帮助将其翻译成Perl。

pmid2doi 网站需要输入PMID才能返回DOI。

这是我需要在Perl中运行的东西,我需要一些帮助来设计实现这个......

鉴于您的开发背景,我将非常感谢您在Perl中生成正则表达式的任何见解或推荐网站。

非常感谢!

此外:

我看到 pmid2doi 网站上说REST API期望网站加上的DOI值。
所以我需要找一些从URL获取REST值的Perl代码示例 在REST中,我只是按照指定准备URL,然后返回的结果应该是我想要的值。

2 个答案:

答案 0 :(得分:2)

这样的事可能吗?

use File::Find;

my $client = REST::Client->new( $an_url );
File::Find::find( sub { 
        return unless m/\.xml$/;
        carp "Could not open $File::Find::name!" 
            unless open( my $fh, '<', $File::Find::name )
            ;
        my $doi;
        while ( <$fh> ) { 
            next unless ( $doi ) = m{[^/]*/([^/]*)};
            $client->GET( join( '/', $base, $doi ));
            do_stuff_with_content( $client->responseContent );
        }
        close $fh;
    } => '.'
);

答案 1 :(得分:1)

我是否误解了这些事情,或者您是否可以在本地Perl中执行此操作而不打扰网站?无需点击远程主机并处理延迟,使用限制等...

https://metacpan.org/module/Bio::DB::EUtilities

编辑:我是,这是NCBI的CGI客户端。来自文档:'一个单独的项目,目前存在于BioPerl-Run中,利用基于SOAP的eUtils接口。'

https://bitbucket.org/reece/docdepot/src/ca32360f6fa4/archive/perl-version/bin/doi-to-pmid

#!/usr/bin/perl
# doi-to-pmid -- get the PubMed ids for a doi

use strict;
use warnings;

use Bio::DB::EUtilities;

my @pmids = doi_to_pmids( $ARGV[0] );
exit 1 unless (@pmids);
print( join("\n",@pmids), "\n" );

exit;


sub doi_to_pmids {
  my $doi = $_[0];
  my $f = Bio::DB::EUtilities->new(-eutil => 'esearch',
                                                                   -db => 'pubmed',
                                                                   -term => "$doi [doi]");
  my @ids = $f->get_ids();
  return (@ids);
}