Hi Leandro,
this is the only method that returns the results. What exactly are you
after ?
Best
Syed
On 14/07/2010 13:14, Leandro Hermida wrote:
Sorry forgot to post what I did before! For those of your who use the
Biomart APIs and want to get results back into a Perl data structures,
here is the approach I use:
If using the Perl API:
use BioMart::Initializer;
use BioMart::Query;
use BioMart::QueryRunner;
my $bm_initializer = BioMart::Initializer->new(
registryFile => "/path/to/myRegistry.xml",
action => 'update',
);
my $bm_query = BioMart::Query->new(
registry => $bm_initializer->getRegistry(),
virtualSchemaName => 'default'
);
$bm_query->setDataset('my_dataset');
$bm_query->addFilter('attr1', ['Q6LTE1']);
$bm_query->addAttribute('attr2');
$bm_query->addAttribute('attr3');
$bm_query->formatter('TSV');
my $bm_query_runner=BioMart::QueryRunner->new();
$bm_query_runner->uniqueRowsOnly(1);
$bm_query_runner->execute($bm_query);
open(RESULTS, '+>', \my $results) or die "$!\n";
$bm_query_runner->printResults(\*RESULTS);
seek(RESULTS, 0, 0);
while (<RESULTS>) {
chomp;
my @row_fields = split /\t/;
# build up a data structure or processed your fields here...
}
close(RESULTS);
Using the REST API:
use LWP::UserAgent ();
my $query_xml =<<XML;
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Query>
<Query virtualSchemaName="default" formatter="TSV" header="0"
uniqueRows="1" count="" datasetConfigVersion="0.7">
<Dataset name="my_dataset" interface="default">
<Filter name="attr1" value="Q6LTE1"/>
<Attribute name="attr2" />
<Attribute name="attr3" />
</Dataset>
</Query>
XML
my $ua = LWP::UserAgent->new();
my $response = $ua->post('http://myserver.mydomain:9002/biomart/martservice',
[ query => $query_xml ]);
if ($response->is_success and $response->decoded_content !~
/BioMart::Exception/i) {
open(RESULTS, '<', \$response->decoded_content) or die "$!\n";
while (<RESULTS>) {
chomp;
my @row_fields = split /\t/;
# build up a data structure or processed your fields here...
}
close(RESULTS);
}
else {
die $response->decoded_content, "\n";
}
On Thu, Jun 10, 2010 at 12:03 AM, Syed Haider<[email protected]> wrote:
Hi Leandro,
The datastructures representation of results is not returned by the API. If
you are feeling adventurous please feel free to look into the
lib/BioMart/Formatter/ directory for the appropriate formatter that you are
interested in.
Best
Syed
On 09/06/2010 17:51, Leandro Hermida wrote:
Hi,
I was wondering if there is a way using the Perl API to get results in a
Perl data structure and, if possible, row by row. For example each row
returned as an array or arrayref. It seems inefficient to take
printResults() and have to break everything up again when I know somewhere
in the Perl API it was doing the reverse...
thanks,
Leandro