API Mapbox возвращает функцию ввода наборов данных «Предоставить единственную функцию для вставки»

#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)