Skip to content

Instantly share code, notes, and snippets.

@ddbj-repo
Created December 18, 2017 01:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ddbj-repo/62a1a3390d0cf4e2df701c20704df498 to your computer and use it in GitHub Desktop.
Save ddbj-repo/62a1a3390d0cf4e2df701c20704df498 to your computer and use it in GitHub Desktop.
#!/usr/bin/perl
# usage: perl wabi-client conf.json
use strict;
use warnings;
use LWP::UserAgent;
use HTTP::Request::Common;
use JSON qw/encode_json decode_json/;
# JSONファイルから値を取り出す。
my $json_file = $ARGV[0];
open IN, $json_file or die;
my $json_in = '';
while (<in>) {
chomp;
$json_in .= $_;
}
close IN;
my $data_ref = decode_json($json_in);
my %data = %$data_ref;
my $format = 'text';
my $url = $data{'urlStr'};
my $fasta_file = $data{'fasta'};
my $database = $data{'database'};
my $parameters = $data{'parameters'};
my $result = $data{'result'};
my $address = $data{'address'};
open FASTA, $fasta_file or die;
my $fasta = '';
while (<fasta>) {
$fasta .= $_;
}
close FASTA;
# 取り出した値をPOSTする。
my %post_data = (
'querySequence' => $fasta,
'format' => $format,
'database' => $database,
'parameters' => $parameters,
'result' => $result,
'address' => $address
);
my $request = POST($url, \%post_data);
my $ua = LWP::UserAgent -> new;
my $res = $ua -> request( $request );
my $request_id = '';
if ($res->is_success) {
my $content = $res->content;
if ($content =~ /requestId: (.*)/) {
$request_id = $1;
}
} else {
die $res->status_line;
}
print "request-ID: $request_id\n";
# request-IDでGETする。
my $status = '';
while (1) {
$request = GET($url . $request_id);
$res = $ua -> request( $request );
if ($res->is_success) {
my $content = $res->content;
if ($content =~/status: (.*)/) {
$status = $1;
}
} else {
die $res->status_line;
}
print "$status\n";
if ($status eq 'waiting') {
sleep(10);
} elsif ($status eq 'running') {
sleep(10);
} elsif ($status eq 'finished') {
last;
}
}
# 検索結果を取得する。
$request = GET($url . $request_id . '?info=result');
$res = $ua -> request( $request );
if ($res->is_success) {
open OUT, ">${request_id}.txt" or die;
print OUT $res->content;
close OUT;
print "Search result is outputed to ${request_id}.txt\n";
} else {
die $res->status_line;
}
</fasta></in>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment