2016-04-01 3 views
1

Хорошо, чтобы сэкономить место Я отправлю кусочки кода. Во-вторых, я не кодер Python. Обычно я C#. Поэтому я сделал все, что в моих силах, особенно когда узнал, что не было ЗАЯВЛЕНИЯ SWITCH.Пытается вызвать Lifx API и получить ошибку в одном случае, но не в другом

Так что у меня есть один метод в моем классе, чтобы поговорить с Lifx Cloud API, и он отлично работает.

def GetAllLifxs(self): 
     selector = 'all'; 

     uri = '%s%s' % (self._baseUri, selector) 
     response = requests.get(uri, headers = self._headers) 

     result = LifxProxyResult(999, {}) 
     if response: 
      result = LifxProxyResult(response.status_code, json.loads(response.text)) 

     return result 

Приведенный выше код заканчивается ударять URL API: https://api.lifx.com/v1/lights/all

Я пытающегося назвать (это не единственный метод, который имеет такой же вопрос) АНИ вызов тумблер. Я попробовал несколько отличных selectors еще ничего.

тумблер код, как например:

def ToggleLight(self, value, selectorType = 'all'): 
     if not selectorType == 'all': 
      if value == None: 
       raise TypeError('[value] cannot be None.') 

     typeSwitch = { 
      'id': 'id:%s' % value, 
      'label': 'label:%s' % value, 
      'group_id': 'group_id:%s' % value, 
      'group': 'group:%s' % value, 
      'location_id': 'location_id:%s' % value, 
      'location': 'location:%s' % value, 
      'scene_id': 'scene_id:%s' % value 
     } 

     #If nothing just for fun Toggle ALL lights 
     selector = '%s/toggle' % typeSwitch.get(selectorType, 'all') 

     uri = '%s%s' % (self._baseUri, selector) 
     response = requests.get(uri, headers = self._headers) 

     return response 

Три попытки имеют Response Code of 404. Метод ToggleLight в каждом случае создает эти URL-адреса.

  1. https://api.lifx.com/v1/lights/label:DreLight/toggle
  2. https://api.lifx.com/v1/lights/id:d073d5127a6e/toggle
  3. https://api.lifx.com/v1/lights/all/toggle

Ни один из них не работает, когда я вызываю метод ToggleLight. Но вот кикер. Когда я копирую URL-адреса сгенерированных URL-адресов в этот простой файл Python и запускаю его функции и правильно управляет светом.

import requests 

token = "MyMagicKeyHere" 

headers = { 
    "Authorization": "Bearer %s" % token, 
} 

response = requests.post('https://api.lifx.com/v1/lights/label:DreLight/toggle', headers=headers) 

Python настолько новичок в моей жизни. Я не понимаю, в чем моя проблема. Поскольку функция, которая работает и устанавливает информацию заголовка с токеном, одинакова для каждого метода, поэтому я не думаю, что это может быть так.

Заранее благодарим за вторую пару глаз. Бизнес.

EDIT: --------------------- Чтобы согласиться с ответом, который я получил, я мог бы уделять больше внимания моей диаграмме методов и тому, что я набираю , Я испортил довольно глупо (новое слово). Урок здесь, дети, уходят, когда вы застреваете, а затем возвращаетесь. больше смотреть не помогает.

enter image description here

+1

В вашем методе ToggleLight вы вызываете 'request.get', но в вашем автономном файле вы используете' request.post'. Вы пытались использовать это в «ToggleLight»? – Gerrat

+0

@ Геррат, когда я весь день занимаюсь, я чувствую себя глупо. Пожалуйста, преобразуйте свой комментарий в ответ, чтобы вы могли заявить свои правильные баллы. –

+1

Я чувствую вашу боль - мы все были там :) – Gerrat

ответ

1

Проблема, как представляется, вызывая в ToggleLight в request.get, вместо requests.post, как в отдельной программе.