2013-12-07 3 views
1

Я создаю небольшую услугу с помощью API зеркала для GAE, используя декораторы из клиентской библиотеки API Google для Python для автоматизации танка OAuth. У меня возникли проблемы с обработкой обработчика уведомлений для подписки, и я просто понял, что, удалив декоратор из метода POST, который обрабатывает ping подписки, он работает (то есть я могу ввести метод и проверить JSON).Использование декодера клиента Python в обратном вызове подписки

Это имеет смысл, так как Mirror API вызывает обратный вызов, а не пользователь.

Но я все же должен сделать авторизованный запрос для обработки полезной нагрузки, что означает, что мне понадобится авторизованный служебный объект, поэтому мне нужно вручную записать OAuth для этой части или автоматически будет библиотека получить учетные данные для пользователя, вызвавшего уведомление?

Благодарим за помощь!

# leaving the decorator on the method causes it not to work 
# @decorator.oauth_required 
def post(self): 

    logging.info('PAYLOAD %s' % self.request.body) 

    # get the authorized object created by the decorator 
    # this isn't going to work since it's dependent on the decorator 
    http = decorator.http() 

    # handle the inbound JSON payload from the body of the request via POST 
    data = json.load(self.request.body) 
    item_id = data["itemId"] 
    user_id = data["userToken"] 
    update_item = mirror_api_service.timeline().get(id=item_id).execute(http=http) 

    for user_action in data.get('userActions',[]): 
     if user_action.get('type') == 'LAUNCH': 

      speakable_text = "Echoing your speech input: " % update_item["text"] 

      card_content = { 
       "text": speakable_text, 
       "speakableText": speakable_text, 
       "notification": { "level": "DEFAULT" } 
      } 

      try: 
       mirror_api_service.timeline().insert(body=card_content).execute(http=http)  
       self.response.set_status(200) 
      except errors.HttpError, error: 
       logging.warn('PROBLEM: ' + str(error)) 

      # only process the first userAction 
      break 

ответ

0

Вам необходимо загрузить свои учетные данные и использовать его для создания клиента API. Вот фрагмент кода из Python quick start.

def post(self): 
    """Handles notification pings.""" 
    logging.info('Got a notification with payload %s', self.request.body) 
    data = json.loads(self.request.body) 
    userid = data['userToken'] 

    self.mirror_service = util.create_service(
     'mirror', 'v1', 
     StorageByKeyName(Credentials, userid, 'credentials').get()) 

    if data.get('collection') == 'locations': 
     self._handle_locations_notification(data) 
    elif data.get('collection') == 'timeline': 
     self._handle_timeline_notification(data) 
+0

Получил это ... как я и предполагал. Я собирался скопировать документы, но я не знал, будет ли клиент lib делать это самостоятельно. Спасибо, Дженни! – user2302078

 Смежные вопросы

  • Нет связанных вопросов^_^