Запрос API для имени пользователя (Philips Hue lights, Python 3.7 - запросы) - PullRequest
1 голос
/ 12 февраля 2020

Я пытаюсь получить удаленный доступ и управлять светом Philips Hue.

Проходя через 3-стороннюю процедуру OAuth2 с веб-сайта Philips Developer, мне удалось создать функцию, которая успешно извлекает ключ-носитель, и другую функцию. это успешно обновляет ключ носителя. Следующим шагом является получение имени пользователя. Для этого Philips предлагает очень простой курс действий:

Сделать PUT на https://api.meethue.com/bridge/0/config с телом:

{ “linkbutton”:true }

и заголовками:

Authorization: Bearer <access_token>
Content-Type: application/json

Сразу после выполнения POST для https://api.meethue.com/bridge/ с телом:

{ “devicetype”:”<your-application-name>” }

и заголовками:

Authorization: Bearer <access_token>
Content-Type: application/json

Этот последний вызов вернет имя пользователя, которое вы можете сохранить и использовать в последующие URL:

[
  {
"success": {
  "username": “*****"
    }
  }
]

Я сделал первый PUT с успешным ответом 200 и пустым телом, но ответ от второго запроса меня заинтриговал:

<Response [200]>
[{'error': {'type': 5, 'address': '/', 'description': 'invalid/missing parameters in body'}}]

Итак, ответ успешен, но с ошибкой, исходящей от тела. Просто верно? Очевидно, мой ”<your-application-name>” не так. Ну, я проверил имя пользователя, которое отображается на стороне клиента, и оно совпадает с именем приложения, которое я дал в своей учетной записи разработчика, и таким же значением, которое я указал в своем запросе. Чтобы объяснить, что я имею в виду под «клиентской стороной», это то, что Philips сказал в одной из своих предыдущих команд

Имя устройства должно быть именем приложения или устройства, обращающегося к удаленному API. Имя устройства используется в обзоре «Мои приложения» пользователя в учетной записи Hue (визуализируется как «вкл.»). Если нет, deviceid также используется для devicename. Это имя приложения, которое вы предоставили нам в тот момент, когда запрашивали доступ к удаленному API.

Таким образом, предоставленный мною ”<your-application-name>” должен быть верным, но это не помешало мне использовать многие другие вещи. чтобы заполнить этот параметр, в том числе даже с использованием разных имен параметров (отличается от "devicetype"). Ничего не помогло, и я получил тот же ответ ... и проблема достаточно проста, поэтому у меня быстро закончились идеи.

Я новичок в запросах API, но не новичок в Python. Я использовал Python 3.7 - модуль запросов для всего этого. Мой мост также виден и подключен на стороне моего клиента

...