为什么我在调用language_v1 API时得到以下错误



我正在尝试调用language_v1 API,但得到以下错误消息:

google.api_core.exceptions.Unauthenticated: 401 Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See
https://developers.google.com/identity/sign-in/web/devconsole-project.

这是我的代码:

from google.cloud import language_v1
from google.oauth2 import service_account
SCOPES = 'https://www.googleapis.com/auth/cloud-language'
SERVICE_ACCOUNT_FILE = 'service_account.json'
credentials = service_account.Credentials.from_service_account_file(SERVICE_ACCOUNT_FILE, scopes=SCOPES)
client = language_v1.LanguageServiceClient(credentials=credentials)
type_ = language_v1.Document.Type.PLAIN_TEXT
language = "en"
text = "I love life!"
document = {"content": text, "type_": type_, "language": language}
encoding_type = language_v1.EncodingType.UTF8
response = client.analyze_sentiment(request={'document': document, 'encoding_type': encoding_type})
score = response.document_sentiment.score
print(score)
  • 我已经确保我的服务帐户email有必要的权限来调用api
  • 我的服务帐户文件也是一个有效的文件,包含预期的项目(私钥等)

出现错误的原因是什么?

您使用的from_service_account_file不正确。

查看服务帐户私钥文件

from google.cloud import language_v1
from google.oauth2 import service_account
SERVICE_ACCOUNT_FILE = 'service_account.json'
# A list not a string
SCOPES = ['https://www.googleapis.com/auth/cloud-language']
credentials = service_account.Credentials.from_service_account_file(
SERVICE_ACCOUNT_FILE
)
credentials=credentials.with_scopes(SCOPES)
client = language_v1.LanguageServiceClient(credentials=credentials)
type_ = language_v1.Document.Type.PLAIN_TEXT
language = "en"
text = "I love life!"
document = {"content": text, "type_": type_, "language": language}
encoding_type = language_v1.EncodingType.UTF8
response = client.analyze_sentiment(request={
'document': document,
'encoding_type': encoding_type
})
score = response.document_sentiment.score
print(score)

几乎总是最好使用应用程序默认凭据:

export GOOGLE_APPLICATION_CREDENTIALS=./service_account.json
from google.cloud import language_v1
import google.auth
credentials, project = google.auth.default()
SCOPES = ['https://www.googleapis.com/auth/cloud-language']
credentials, project = google.auth.default(scopes=SCOPES)
client = language_v1.LanguageServiceClient(credentials=credentials)
type_ = language_v1.Document.Type.PLAIN_TEXT
language = "en"
text = "I love life!"
document = {"content": text, "type_": type_, "language": language}
encoding_type = language_v1.EncodingType.UTF8
response = client.analyze_sentiment(request={
'document': document,
'encoding_type': encoding_type
})
score = response.document_sentiment.score
print(score)

并且,在这种情况下,因为documents.analyzeSentiment接受cloud-platform作为作用域,您甚至不需要重新定义凭据:

from google.cloud import language_v1
client = language_v1.LanguageServiceClient()
type_ = language_v1.Document.Type.PLAIN_TEXT
language = "en"
text = "I love life!"
document = {"content": text, "type_": type_, "language": language}
encoding_type = language_v1.EncodingType.UTF8
response = client.analyze_sentiment(request={
'document': document,
'encoding_type': encoding_type
})
score = response.document_sentiment.score
print(score)

相关内容

最新更新