我无法弄清楚如何使用python urllib或者请求正确调用这个api。
让我给你现在的代码:
import requests
url = "http://api.cortical.io:80/rest/expressions/similar_terms?retina_name=en_associative&start_index=0&max_results=1&sparsity=1.0&get_fingerprint=false"
params = {"positions":[0,6,7,29]}
headers = { "api-key" : key,
"Content-Type" : "application/json"}
# Make a get request with the parameters.
response = requests.get(url, params=params, headers=headers)
# Print the content of the response
print(response.content)
我甚至在其余的参数中加入了params变量:
url = 'http://api.cortical.io:80/rest/expressions/similar_terms?'
params = {
"retina_name":"en_associative",
"start_index":0,
"max_results":1,
"sparsity":1.0,
"get_fingerprint":False,
"positions":[0,6,7,29]}
我收到此消息:
已记录内部服务器错误@ Sun Apr 01 00:03:02 UTC 2018
所以我不确定我做错了什么。你可以在这里测试他们的api,但即使进行测试,我也无法弄明白。如果我转到http://api.cortical.io/,请点击表达式标签,点击 POST / expressions / similar_terms 选项,然后粘贴{“位置”:[0, 6,7,29]}在正文文本框中点击按钮,它会给你一个有效的回复,所以他们的API没有任何问题。
我不知道我做错了什么。你能救我吗?
答案 0 :(得分:6)
问题在于您在params
字典中混合查询字符串参数和发布数据。
相反,您应该为查询字符串数据使用params
参数,并为帖子正文数据使用json
参数(因为内容类型为json)。
使用json
参数时,默认情况下Content-Type标头为'application / json'
此外,当响应为json时,您可以使用.json
方法获取字典。
一个例子,
import requests
url = 'http://api.cortical.io:80/rest/expressions/similar_terms?'
params = {
"retina_name":"en_associative",
"start_index":0,
"max_results":1,
"sparsity":1.0,
"get_fingerprint":False
}
data = {"positions":[0,6,7,29]}
r = requests.post(url, params=params, json=data)
print(r.status_code)
print(r.json())
200
[{'term': 'headphones', 'df': 8.991197733061748e-05, 'score': 4.0, 'pos_types': ['NOUN'], 'fingerprint': {'positions': []}}]
答案 1 :(得分:1)
所以,我不能说出为什么第三方API中存在服务器错误,但是我按照你的建议尝试直接使用API UI,并注意到你正在使用完全不同的端点< / em>而不是您尝试在代码中调用的那个。在您的代码中,您GET
来自http://api.cortical.io:80/rest/expressions/similar_terms
,但在用户界面POST
到http://api.cortical.io/rest/expressions/similar_terms/bulk
。这是苹果和橘子。
调用您在UI调用中提到的端点对我来说很有用,使用代码中的以下变体,这需要使用requests.post
,并且正如t.m所指出的那样。 adam,有效负载的json
参数,也需要包含在列表中:
import requests
url = "http://api.cortical.io/rest/expressions/similar_terms/bulk?retina_name=en_associative&start_index=0&max_results=1&sparsity=1.0&get_fingerprint=false"
params = [{"positions":[0,6,7,29]}]
headers = { "api-key" : key,
"Content-Type" : "application/json"}
# Make a get request with the parameters.
response = requests.post(url, json=params, headers=headers)
# Print the content of the response
print(response.content)
给出:
b'[[{"term":"headphones","df":8.991197733061748E-5,"score":4.0,"pos_types":["NOUN"],"fingerprint":{"positions":[]}}]]'