我在哪里指定Bluemix中的AlchemyAPI键?

时间:2016-04-27 07:19:07

标签: ibm-cloud alchemyapi

我已将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
  • 在应用程序代码中,在调用AlchemyAPI之前调用该键。没用。
VCAP_SERVICES = os.getenv('VCAP_SERVICES')
key = (VCAP_SERVICES['alchemy_api'][0]['credentials']['apikey'])
from alchemyapi import AlchemyAPI    
alchemyapi = AlchemyAPI()

3 个答案:

答案 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密钥。