google-text-to-speech - 无法使用 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文件,所以我真的不知道在这里做什么。再加上他们的文档太难理解了。
解决方案
当你说你有一个字符串时,你指的是 Key ID 吗?您仍然需要与该密钥关联的 json 文件。
要创建新的 json 文件,请转到 Google Cloud Console -> IAM & Admin -> Service Accounts。选择您的一个服务帐户,然后单击“创建密钥”,这会将密钥下载为 json 文件。它只能下载一次。
推荐阅读
- sql - 查询出一列数字字段的前3位
- ajax - Django - AJAX - 为什么我需要 url 参数?
- swift - Xcode 9.4.1 'guard' 语句的代码覆盖率
- python - DPI-1047:无法加载 64 位 Oracle 客户端库
- docker - 使用 root 权限执行 /docker-entrypoint-initdb.d 下的脚本
- hibernate - Spring Data JPA 向 Cascading 添加异常
- cucumber - 用于 POST 休息呼叫的 Gherkins 功能文件
- python - Django:无法在现场登录,但在本地服务器上它可以工作,而不是在现场
- oracle - 在 Oracle 中为外部表创建存储(和自动化)过程
- powershell - 获取文件夹的用户权限,包括通过 AD 和本地组的间接权限