Encode query with Python
From WABI
Contents |
Summary
Result may not be able to be retrieved normally, if query including non alphanumeric character is used with Python.
Description
You have to encode your query. If qPath is a query to be encoded, please do as follows.
import urllib
urllib.urlencode({'<parameter_name>':qPath,})
Sample program
This tutorial introduces a example that retrieve entries which feature-key is 'rRNA', qualifier name is 'product' and has '16s ribosomal RNA' in qualifier value with searchByXMLPath of ARSA.
Download this program
import socket
import urllib
#set server
host = "xml.nig.ac.jp"
port = 80
#set API server
url = "/rest/Invoke"
qPath = "/ENTRY/DDBJ/feature-table/feature/f_key=='rRNA' AND "
qPath = qPath + "(/ENTRY/DDBJ/feature-table/feature{/f_key=='rRNA' AND "
qPath = qPath + "/f_quals/qualifier{/q_name=='product' AND /q_value='16S ribosomal RNA'}}) "
rPath = "/ENTRY/DDBJ/primary-accession,/ENTRY/DDBJ/definition"
offset = "1";
count = "10";
query = urllib.urlencode({'queryPath':qPath,'returnPath':rPath,'offset':offset,'count':count});
#set parameter
query = "service=ARSA&method=searchByXMLPath&"+ query;
#make connection
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
sock.connect((host, port))
sock.send("POST " + url + " HTTP/1.0\n")
sock.send("Content-Type: application/x-www-form-urlencoded\n")
sock.send("User-Agent: python/socket\n")
sock.send("Content-Length:" + `len(query)` + "\n\n")
sock.send(query)
except socket.error, e:
print 'Error: %s' % e
while 1:
rcvmsg = sock.recv(1024)
print rcvmsg,
if rcvmsg == :
break
sock.close
