首页 > 解决方案 > 无法使用 Google texttoaudio API 设置凭据

问题描述

我能够设置为 Google 的翻译设置凭据,但是使用 texttospeech 我遇到了很多麻烦。首先,我无法将凭据作为 json 文件获取,而只是将其作为字符串获取。我找不到其他人的凭据是字符串的人,每个人都有一个 json 文件。我将字符串转换为 json 文件,但我认为这没有帮助,因为它们的 json 对象似乎必须是字典。无论如何,当我尝试这个时:

from google.oauth2 import service_account

key1 = 'key.json'
credentials = service_account.Credentials.from_service_account_file(key1)
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 3267, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-13-c7d030662a35>", line 1, in <module>
    credentials = service_account.Credentials.from_service_account_file(key1)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/google/oauth2/service_account.py", line 209, in from_service_account_file
    filename, require=['client_email', 'token_uri'])
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/google/auth/_service_account_info.py", line 73, in from_filename
    return data, from_dict(data, require=require)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/google/auth/_service_account_info.py", line 46, in from_dict
    missing = keys_needed.difference(six.iterkeys(data))
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/six.py", line 575, in iterkeys
    return iter(d.keys(**kw))
AttributeError: 'str' object has no attribute 'keys'

当我尝试此代码时,会发生以下情况:

os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = 'key.json'
client = texttospeech.TextToSpeechClient()
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 3267, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-14-d30e5cd41087>", line 2, in <module>
    client = texttospeech.TextToSpeechClient()
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/google/cloud/texttospeech_v1/gapic/text_to_speech_client.py", line 159, in __init__
    address=api_endpoint, channel=channel, credentials=credentials
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/google/cloud/texttospeech_v1/gapic/transports/text_to_speech_grpc_transport.py", line 61, in __init__
    channel = self.create_channel(address=address, credentials=credentials)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/google/cloud/texttospeech_v1/gapic/transports/text_to_speech_grpc_transport.py", line 91, in create_channel
    address, credentials=credentials, scopes=cls._OAUTH_SCOPES, **kwargs
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/google/api_core/grpc_helpers.py", line 177, in create_channel
    credentials, _ = google.auth.default(scopes=scopes)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/google/auth/_default.py", line 305, in default
    credentials, project_id = checker()
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/google/auth/_default.py", line 165, in _get_explicit_environ_credentials
    os.environ[environment_vars.CREDENTIALS])
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/google/auth/_default.py", line 102, in _load_credentials_from_file
    credential_type = info.get('type')
AttributeError: 'str' object has no attribute 'get'

我认为这是因为我的 json 对象不是字典而是字符串。但是谷歌给我的key是一个字符串而不是json文件,所以我真的不知道在这里做什么。再加上他们的文档太难理解了。

标签: google-text-to-speech

解决方案


当你说你有一个字符串时,你指的是 Key ID 吗?您仍然需要与该密钥关联的 json 文件。

要创建新的 json 文件,请转到 Google Cloud Console -> IAM & Admin -> Service Accounts。选择您的一个服务帐户,然后单击“创建密钥”,这会将密钥下载为 json 文件。它只能下载一次。


推荐阅读