Encode query with Perl

From WABI

Jump to: navigation, search

Contents

Summary

Result may not be able to be retrieved normally, if query including non alphanumeric character is used with Perl.

Description

You have to encode your query. If $query is a query to be encoded, please do as follows.

$query =~ s/([^\w ])/'%'.unpack('H2', $1)/eg;
$query =~ tr/ /+/;

Sample program

Following is a sample code that search entries with the condition of Feature Key is 'rRNA', Qualifier name is 'product' and Qualifier value is '16S ribosomal RNA' by using ARSA searchByXMLPath method.
Download this program

use Socket;
use FileHandle;

# set hostname
$con_host = "xml.nig.ac.jp";
#set port number.
$con_port = 80;
#set service location
$path = "/rest/Invoke";

# make socket
$ip = inet_aton($con_host) || die "host($con_host) not found.\n";
$sockaddr = pack_sockaddr_in($con_port, $ip);
socket(SOCKET, PF_INET, SOCK_STREAM, 0) || die "socket error.\n";

# make connection
connect(SOCKET, $sockaddr) || die "connect $con_host $con_port error.\n";
autoflush SOCKET (1);

# you should encode your query.
$query = "/ENTRY/DDBJ/feature-table/feature/f_key=='rRNA' AND ";
$query .= "(/ENTRY/DDBJ/feature-table/feature{/f_key=='rRNA' AND ";
$query .= "/f_quals/qualifier{/q_name=='product' AND /q_value='16S ribosomal RNA'}}) ";
$query =~ s/([^\w ])/'%'.unpack('H2', $1)/eg;
$query =~ tr/ /+/; 

$return = "/ENTRY/DDBJ/primary-accession,/ENTRY/DDBJ/definition";
$return =~ s/([^\w ])/'%'.unpack('H2', $1)/eg;
$return =~ tr/ /+/; 

$offset = "1";
$count = "10";

#set parameter.
$query = "service=ARSA&method=searchByXMLPath&queryPath=$query&returnPath=$return&offset=$offset&count=$count";
$len = length($query);

# send http request.
print SOCKET "POST $path HTTP/1.0\n";
print SOCKET "User-Agent: perl/socket\n";
print SOCKET "Content-Type: application/x-www-form-urlencoded\n";
print SOCKET "Content-Length: $len\n\n";
print SOCKET $query."\n";

# show response.
while (chomp($buf=<SOCKET>)) {
 print "$buf\n";
}

# socket close
close(SOCKET);

Link

Japanese page

Personal tools