Я не могу понять, как правильно вызвать этот api, используя python urllib или запросы.
Позвольте дать вам код, который у меня есть сейчас:
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]}
Я получаю это сообщение:
An internal server error has been logged @ Sun Apr 01 00:03:02 UTC 2018
Так что я не уверен, что делаю не так. Вы можете протестировать их api здесь, но даже с тестированием я не могу этого понять. Если я выйду на http://api.cortical.io/, щелкните вкладку Выражение, выберите параметр POST / выражения / similar_terms, затем вставьте {"position": [0,6,7,29]} в текстовое поле основного текста и нажмите кнопку, это даст вам правильный ответ, значит, с их API все в порядке.
Я не знаю, что делаю не так. можешь мне помочь?
да, я проверил, потому что вы можете перейти на их веб-сайт и протестировать их api, я говорил о том, как это сделать, во втором и последнем абзацах. их api работает.
Я взял ваш URL, скопировал и вставил его в свой браузер. Это дает мне то же сообщение об ошибке внутреннего сервера. Не могли бы вы также проверить URL-адрес?
@ troymyname00 ну, у вас нет моего ключа api, но вы можете зайти на их веб-сайт api.cortical.io и попробовать там api.
О, одна проблема, которую я вижу сейчас, заключается в том, что это получение, но это должно быть сообщение. Тем не мение. изменение этого не исправило.
Похоже, you'e не использует urllib.request. Вы напрямую используете библиотеку запросов. Не могли бы вы проверить, в этом ли проблема?






Проблема в том, что вы смешиваете параметры строки запроса и данные публикации в своем словаре 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': []}}]
Итак, я не могу объяснить, почему произошла ошибка сервера в стороннем API, но я последовал вашему предложению, чтобы попробовать использовать интерфейс API напрямую, и заметил, что вы используете совершенно другая конечная точка, а не тот, который вы пытаетесь вызвать. в вашем коде. В вашем коде вы GET от http://api.cortical.io:80/rest/expressions/similar_terms, но в пользовательском интерфейсе вы POST на http://api.cortical.io/rest/expressions/similar_terms/bulk. Это яблоки и апельсины.
Вызов конечной точки, которую вы упоминаете в вызове пользовательского интерфейса, работает для меня с использованием следующего варианта вашего кода, который требует использования 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":[]}}]]'
Вы проверили, не проблема ли это в Cortical API, а не в вашем коде?