我已经将 AlchemyAPI 服务添加到我在 Bluemix 上的 Python 应用程序中。我可以在AlchemyAPI服务的服务凭据中看到API密钥。在应用代码或文件中的哪个位置,我应该指定此密钥,以便我可以调用服务?代码运行良好,除了我调用 AlchemyAPI 的部分之外,可以执行所有操作。
我在这里遵循了入门教程,但它只是以"获取密钥"停止,并没有告诉我如何处理它。
我尝试过但不起作用的一些事情:
- 向
manifest.yml
文件中添加了一个条目,如下所示。没用。
服务业:- the_alchemy-service_name应用:-路径:。 环境: ALCHEMY_KEY: the_actual_key
- 在
- 应用代码中,在调用 AlchemyAPI 之前调用密钥。没用。
VCAP_SERVICES = os.getenv('VCAP_SERVICES')key = (VCAP_SERVICES['alchemy_api'][0]['credentials']['apikey'])从炼金术进口炼金术API 炼金术 = 炼金术API()
您使用的Python API需要将AlchemyAPI密钥作为参数传递给脚本或存储在文件中。您可以在代码中看到这一点 https://github.com/AlchemyAPI/alchemyapi_python/blob/master/alchemyapi.py
如果你想在 https://github.com/AlchemyAPI/alchemyapi_python 坚持使用AlchemyAPI SDK,它希望API密钥存储在当前工作目录中名为"api_key.txt"的文件中。如果要在 Bluemix 中使用此 SDK,并假设您从环境中检索 API 密钥的值(如德语所示),则应在代码中创建"api_key.txt"文件:
# write the key to the file
f = open('api_key.txt', 'w')
f.write(alchemy_key)
f.close()
https://github.com/watson-developer-cloud/python-sdk 有一个更新和最新的Python SDK,我强烈建议使用此SDK。它支持AlchemyAPI的更多功能。
基于您要使用的AlchemyAPI,您可以查看各种示例。这是一个使用炼金术语言: https://github.com/watson-developer-cloud/python-sdk/blob/master/examples/alchemy_language_v1.py
如果您将 AlchemyAPI 服务绑定到您的应用程序,此 SDK 将自动从VCAP_SERVICES中查找 AlchemyAPI 密钥。
您不将代码推送到其他人可以看到您的密钥的公共存储库,您就可以使用该manifest.yml
。否则,我建议您使用 Bluemix UI 来编辑环境变量。
manifest.yml
:
- applications:
path: .
env:
ALCHEMY_KEY: the_actual_key
节点:
var alchemyKey = process.env.ALCHEMY_KEY || '<default-key>';
蟒:
alchemy_key = os.getenv('ALCHEMY_KEY', '<default-key>')
爪哇岛:
String alchemyKey = System.getenv("VCAP_SERVICES");
alchemyKey = alchemyKey != null ? alchemyKey || "<default-key>"
您还可以将 Alchemy 服务绑定到 Bluemix 应用程序,并获取环境中的密钥以及其他环境变量。在这种情况下,键将是VCAP_SERVICES
对象的一部分。
"alchemy_api": [{
"name": "alchemy_api_free_docs",
"label": "alchemy_api",
"plan": "free",
"credentials": {
"url": "https://gateway-a.watsonplatform.net/calls",
"apikey": "THE-API-KEY"
}
}]
在这种情况下,代码将是类似的,但是如果您使用像Lavigne在他的答案中提到的@Frederic SDK之一,则会自动提取密钥。
感谢@Frederic和@German共享的资源,我能够通过更多的研究找到答案。我没有按原样使用建议的 SDK,因为 SDK 包含所有内容,并且我正在尝试创建一个简单的演示应用程序。
简答题
不要调用 AlchemyAPI 模块。请改为调用 Watson Developer Cloud 模块。
长答案
对于 Bluemix 上的 Python 应用程序,依赖项必须列在 requirements.txt 文件中。Bluemix 将自动 pip 安装这些模块,而无需您执行任何操作。
因为我使用的是AlchemyAPI服务(并按照他们的入门指南),所以我在requirements.txt
中将AlchemyAPI列为依赖项。我以为 Bluemix 会安装它。在我的 Python 代码中,我通过 from alchemyapi import AlchemyAPI
调用了该模块。
错误的假设。 alchemyapi
不能通过 Bluemix 进行 pip 安装。要调用的模块是 watson-developer-cloud
。
调用后,您可以指定 api 密钥,以便:
从watson_developer_cloud导入炼金语言V1alchemy_language = AlchemyLanguageV1(api_key='THE_API_KEY')
所以,这里是问题的答案:你使用 api_key
变量来保存键的值,你调用watson-developer-cloud
模块,而不是alchemyapi
模块。将 Alchemy 服务绑定到应用程序时,可以通过编程方式从服务凭据中提取 API 密钥。