浙江省高等学校教师教育理论培训

微信搜索“毛凌志岗前心得”小程序

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

    Encode query with Python

    From WABI

    Jump to: navigation, search

 

    Contents

 

    [hide]

 

        1 Summary

        2 Description

        3 Sample program

        4 Link

 

 

    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

 

posted on 2012-03-19 00:30  lexus  阅读(233)  评论(0编辑  收藏  举报