[ create a new paste ] login | about

Link: http://codepad.org/tLvLWX1N    [ raw code | fork ]

Perl, pasted on Jul 30:
#!/usr/bin/perl 

use strict;
use warnings;

use Bio::DB::EUtilities;
 
my @ids = qw(4826782);
 
my $factory = Bio::DB::EUtilities->new(-eutil => 'epost',
                                       -email => 'pat.boutet@gmail.com',
                                       -db => 'protein',
                                       -id => \@ids);

# epost does not return a count, get this from scalar(@ids)

my $count = scalar(@ids);

# get history from queue
my $hist = $factory->next_History || die 'No history data returned';
print "History returned\n";
# note db carries over from above
$factory->set_parameters(-eutil => 'efetch',
                         -rettype => 'fasta',
                         -history => $hist);
 
my $retry = 0;
my ($retmax, $retstart) = (500,0);
 
RETRIEVE_SEQS:
while ($retstart < $count) {
    $factory->set_parameters(-retmax => $retmax,
                            -retstart => $retstart);
    eval{
        # -file is a file name, not a file handle
        $factory->get_Response(-file => 'output.txt' );
    };
    if ($@) {
        die "Server error: $@.  Try again later" if $retry == 5;
        print STDERR "Server error, redo #$retry\n";
        $retry++ && redo RETRIEVE_SEQS;
    }
    print "Retrieved $retstart";
    $retstart += $retmax;
}


Create a new paste based on this one


Comments: