1

我针对 RESTful API(我正在使用 python/urllib2/pandas)触发 3 个单独的查询,每个查询包含以下字符串变体之一:

(1) 'Caveolin-1 suppresses Human Immunodeficiency Virus-1 replication by inhibiting acetylation of NF-\xce\xbaB'

(2) 'Caveolin-1 suppresses Human Immunodeficiency virus-1 replication by inhibiting acetylation of NF-κB'

(3) 'Caveolin-1 suppresses Human Immunodeficiency virus-1 replication by inhibiting acetylation of NF

结果是:

(1) 不返回任何结果(从 python 以编程方式完成时)

(2) 工作并返回预期结果 - 匹配记录(使用 Chrome 插件手动触发查询以进行 RESTful API 调用,并将字符串按原样粘贴到 API 调用的适当部分)

(3) 工作原理与 (2) 相同

由于我有源数据并且正在通过从数据帧中读取字符串以编程方式从 python 执行 (1),有没有什么方法可以用我的源数据中的 unicode 字符做某事(不知道是什么)(我猜那是什么) \xbaB' 等)使它们可以传递给 API?'\xce\xbaB' 似乎是基于上述内容的 'κB' 的编码。

或者这就是我将不得不查看 API 文档的东西(对于这一点,我认为不存在......)。

如果这很难/更容易 - 在传递查询之前从字符串中删除任何 unicode 字符的最佳方法是什么(即回退到(3))?

提前致谢!

REF:从python我正在执行以下API附带

api_call = 'http://some_api/index:ABCDE?query=title(' + str(title_string) + ')'
headers = {'APIKey': API_key, 'accept':'text/xml, application/atom+xml'}
request = urllib2.Request(api_call, headers = headers, )
response = urllib2.urlopen(request,'' , 30)

return response.read()
4

2 回答 2

2

\xce 和 \xba 是分别具有十六进制值 ce 和 ba 的字符。在不了解更多关于您如何与 API 交谈或它的期望的情况下,我认为您可以做这样的事情来使字符串可以通过:

>>> urllib.quote('an Immunodeficiency Virus-1 replication by inhibiting acetylation of NF-\xce\xbaB')
'an%20Immunodeficiency%20Virus-1%20replication%20by%20inhibiting%20acetylation%20of%20NF-%CE%BAB'

编辑:

通常在 python 中,这是我将参数添加到 URL 的方式:

params = {'query' : 'title(' + title_string + ')'}
api_call = 'http://some_api/index:ABCDE?' + urllib.urlencode(params)

所以我会倾向于这个,而不是我之前的 urllib.quote 建议(如果 title_string 是路径的一部分,我认为这将适用),但我不确定 title_string 中的十六进制值是否足够。我认为这将取决于它在服务器端的处理方式。

于 2013-06-28T23:13:38.450 回答
0

尝试将“\”转换为“\\”,因为 '\x' 表示一个十六进制字符代码,预置为十六进制数

于 2013-06-28T23:16:57.940 回答