httplib.ResponseNotReady с API.ai

Я пытаюсь создать свой собственный чат-бот с помощью api.ai.

В первый раз все идет хорошо, но во второй раз я получаю эту ошибку:

   Traceback (most recent call last):
  File "/root/Documents/Projects/Darlene/core/api.py", line 34, in <module>
    main()
  File "/root/Documents/Projects/Darlene/core/api.py", line 28, in main
    speech, action = b.handle(cmd)
  File "/root/Documents/Projects/Darlene/core/api.py", line 15, in handle
    response = self.request.getresponse().read()
  File "/usr/local/lib/python2.7/dist-packages/apiai/requests/request.py", line 133, in getresponse
    return self._connection.getresponse()
  File "/usr/lib/python2.7/httplib.py", line 1123, in getresponse
    raise ResponseNotReady()
httplib.ResponseNotReady

Похоже, проблема с API или около того. Но я не уверен. Вот мой код:

import apiai
import json



class Bot(object):
    def __init__(self, client_token='<clientToken>'):

        self.AI = apiai.ApiAI(client_token)
        self.request = self.AI.text_request()
        self.request.lang = 'en'

    def handle(self, text):
        self.request.query = text
        response = self.request.getresponse().read()
        speech = str(json.loads(response)['result']['fulfillment']['speech'])
        action = str(json.loads(response)['result']['action'])
        if action is not '':
            return speech, action
        else:
            return speech, None


def main():
    b = Bot()
    while True:
        cmd = raw_input('me; ')
        speech, action = b.handle(cmd)
        print speech
        if action is not None:
            print 'action'

if __name__ == '__main__':
    main()

Кто-нибудь знает способ исправить это?


person user6547408    schedule 04.07.2016    source источник


Ответы (2)


Пожалуйста, не используйте запрос повторно. Просто для каждого этапа создайте новый запрос. Аналогично этому:

def handle(self, text):
    self.request = self.AI.text_request()
    self.request.lang = 'en'

    self.request.query = text
    response = self.request.getresponse().read()
    speech = str(json.loads(response)['result']['fulfillment']['speech'])
    action = str(json.loads(response)['result']['action'])
    if action is not '':
        return speech, action
    else:
        return speech, None
person Dmitriy Kuragin    schedule 11.01.2017
comment
Почему я не должен повторно использовать запрос? - person user6547408; 02.02.2017

после чтения () используйте декодирование ('utf-8').

И поскольку вы находитесь в самом начале, было бы неплохо сейчас перенести ваш код на Python 3.5 вместо 2.7...

apiai_request.getresponse().read().decode('utf-8'))

Обратите внимание, что, к сожалению, они назвали в своем примере «запрос», поскольку он конфликтует с библиотекой запросов, запросом фляги и т. д., но это жизнь.

person OWADVL    schedule 10.10.2016