我已将AlchemyAPI服务添加到Bluemix上的Python应用程序中。我可以在AlchemyAPI服务的服务凭据中看到API密钥。在应用程序代码或文件中应该指定此密钥,以便我可以调用该服务?代码运行正常,除了我称之为AlchemyAPI的部分之外的所有内容。
我跟着Getting started tutorial here,但它只是停在"获取密钥"并没有告诉我该怎么做。
我试过但有些不起作用的事情:
manifest.yml
文件中添加了一个条目,如下所示。没用。services: - the_alchemy-service_name applications: - path: . env: ALCHEMY_KEY: the_actual_key
VCAP_SERVICES = os.getenv('VCAP_SERVICES') key = (VCAP_SERVICES['alchemy_api'][0]['credentials']['apikey']) from alchemyapi import AlchemyAPI alchemyapi = AlchemyAPI()
答案 0 :(得分:3)
您正在使用的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密钥。
答案 1 :(得分:1)
只要您不将代码推送到其他人可以看到您的密钥的公共存储库,您就可以使用manifest.yml
。否则,我建议您使用Bluemix UI编辑环境变量。
manifest.yml
:
- applications:
path: .
env:
ALCHEMY_KEY: the_actual_key
节点:
var alchemyKey = process.env.ALCHEMY_KEY || '<default-key>';
的Python:
alchemy_key = os.getenv('ALCHEMY_KEY', '<default-key>')
爪哇:
String alchemyKey = System.getenv("VCAP_SERVICES");
alchemyKey = alchemyKey != null ? alchemyKey || "<default-key>"
您还可以将Alchemy Service绑定到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"
}
}]
在这种情况下,代码将类似,但如果您使用其中一个SDK,如答案中提到的@Frederic Lavigne,则会自动提取密钥。
答案 2 :(得分:0)
感谢@Frederic和@German共享的资源,我能够通过更多的研究找到答案。我没有按原样使用建议的SDK,因为SDK包含所有内容,我正在尝试创建简单演示应用。
不要调用AlchemyAPI模块。请改为调用Watson Developer Cloud模块。
对于Bluemix上的Python应用程序,必须在requirements.txt文件中列出依赖项。 Bluemix将自动pip安装这些模块,无需您做任何事情。
因为我使用的是AlchemyAPI服务(并按照其入门指南),我将AlchemyAPI列为requirements.txt
中的依赖项。我假设Bluemix会pip安装它。在我的Python代码中,我通过from alchemyapi import AlchemyAPI
调用了该模块。
错误的假设。 alchemyapi
无法通过Bluemix安装pip。要调用的模块是watson-developer-cloud
。
调用后,您可以指定api键:
from watson_developer_cloud import AlchemyLanguageV1 alchemy_language = AlchemyLanguageV1(api_key='THE_API_KEY')
所以,以下是问题的答案:您使用api_key
变量来保存密钥的值,然后调用watson-developer-cloud
模块,不 alchemyapi
模块。将Alchemy服务绑定到应用程序时,可以通过服务凭据以编程方式提取API密钥。