Encode query with Python

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 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

 


Link

Japanese page

Personal tools