Запрос имеет тип LocalProxy, но ожидается один из: байтов, Unicode - PullRequest
1 голос
/ 26 марта 2019

Я пытаюсь использовать API естественного языка Google Cloud Platform с Python в облачной функции Google.Всякий раз, когда я использую код, указанный в этом руководстве Google для анализа анализа сущностей с использованием текста в облачном хранилище, я получаю следующее сообщение об ошибке:

 File "/user_code/main.py", line 9, in entity_sentiment_file
    type=enums.Document.Type.PLAIN_TEXT)
TypeError: <Request 'http://25e4801f1004e4eb41d11633d9b2e9e9-dot-ad6bdc7c397c15e62-tp.appspot.com/'
[POST]> has type LocalProxy, but expected one of: bytes, unicode

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

Я попытался указать параметры тестового события, как показано ниже, но я получилтот же результат.

{"gcs_uri":"gs://test-news-articles/news-article-1.txt"}

Вот вся моя функция:

from google.cloud import language
from google.cloud.language import enums
from google.cloud.language import types

def entity_sentiment_file(gcs_uri,request=None):
    print('gcs_uri: {}'.format(gcs_uri))
    client = language.LanguageServiceClient()
    document = types.Document(
        gcs_content_uri=gcs_uri,
        type=enums.Document.Type.PLAIN_TEXT)

    # Detect and send native Python encoding to receive correct word offsets.
    encoding = enums.EncodingType.UTF32
    if sys.maxunicode == 65535:
        encoding = enums.EncodingType.UTF16

    result = client.analyze_entity_sentiment(document, encoding)

    for entity in result.entities:
        print(u'Name: "{}"'.format(entity.name))
        for mention in entity.mentions:
            print(u'  Begin Offset : {}'.format(mention.text.begin_offset))
            print(u'  Content : {}'.format(mention.text.content))
            print(u'  Magnitude : {}'.format(mention.sentiment.magnitude))
            print(u'  Sentiment : {}'.format(mention.sentiment.score))
            print(u'  Type : {}'.format(mention.type))
        print(u'Salience: {}'.format(entity.salience))
        print(u'Sentiment: {}\n'.format(entity.sentiment))

Любая помощь будет высоко ценится.

1 Ответ

2 голосов
/ 26 марта 2019

Функция, которая отвечает на запрос HTTP, должна иметь подпись:

def my_function(request):
    ...

, где request предоставляется средой выполнения облачных функций при каждом новом запросе.

В данный момент gcs_uri устанавливается в значение request (тип LocalProxy), а затем вы пытаетесь отформатировать строку с ним, что вызывает исключение.

Я не уверен, откуда вы ожидаете gcs_uri, но он не будет предоставлен функции в качестве аргумента. Если вы делаете запрос с JSON, он будет доступен с помощью request.json['gcs_uri']. См. " Написание функций HTTP " для получения более подробной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...