#python #python-requests #mapbox #mapbox-marker #grequests
#python #python-запросы #mapbox #mapbox-marker #grequests
Вопрос:
Я пытаюсь добавить функцию в набор данных через Mapbox API с использованием Python. Я следую этой инструкции https://docs.mapbox.com/api/maps/#update-a-dataset но продолжайте получать эту ошибку:
{'message': 'Provide a single Feature to insert'}
Код выглядит следующим образом:
rs = []
dictionary = {
"id":1,
"type":"Feature",
"properties":{},
"geometry":{"coordinates":[-83.750246, 42.269375],"type":"Point"}}
url = "https://api.mapbox.com/datasets/v1/voratima/" dataset "/features/1?access_token=" access_token
rs.append(grequests.put(url, data=dictionary, hooks = {'response' : do_something}))
grequests.map(rs, exception_handler=exception_handler)
Я пробовал следующее, но ни один из них не работает:
- используя
requests
вместоgrequests
- обертывание словаря с помощью
json.dumps()
- изменение параметра put с
data=dictionary
наjson=dictionary
- Убедитесь
id
, что для данных и URL установлено значение1
.
У Postman точно такого же запроса нет ошибки. Чего мне не хватает?
Ответ №1:
Учитывая, что существует набор данных с идентификатором набора dataset
данных, тело вашего запроса выглядит нормально. Пожалуйста, добавьте заголовок
headers = {'Content-type': 'application/json'}
Также можете ли вы проверить, соответствуете ли вы этим спецификациям:
Это должна быть одна отдельная функция GeoJSON, а не коллекция функций GeoJSON. Если функция GeoJSON имеет свойство идентификатора верхнего уровня, оно должно соответствовать feature_id, который вы используете в конечной точке URL.
Комментарии:
1. Идентификатор feature_id равен 1 для обоих. А словарь — это функция GeoJSON. Добавление заголовка выдает другую ошибку. <Ответ [400]> {‘сообщение’: ‘Неожиданный токен i’}
2. Идентификатор в словаре должен быть строкой.
Ответ №2:
Оказывается, я забыл заголовок. Спасибо Mortiz за указание на это. После обновления я получил
<Response [400]> {'message': 'Unexpected token i'}
Это потому, что мне нужно обернуть словарь внутри json.dumps()
. Затем ошибка стала
<Response [422]> {'message': 'Request URI does not match feature id'}
Это потому id
, что в словаре должна быть строка, то "id":"1"
есть нет "id":1
. Вот код, который работает:
rs = []
dictionary = {
"id":"1",
"type":"Feature",
"properties":{},
"geometry":{"coordinates":[-83.750246, 42.269375],"type":"Point"}}
headers = {'Content-type': 'application/json'}
url = "https://api.mapbox.com/datasets/v1/voratima/" dataset "/features/1?access_token=" access_token
rs.append(grequests.put(url, data=json.dumps(dictionary), headers=headers, hooks = {'response' : do_something}))
grequests.map(rs, exception_handler=exception_handler)