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

Ibm cloud 我在哪里指定Bluemix中的AlchemyAPI键?,ibm-cloud,alchemyapi,Ibm Cloud,Alchemyapi,我已将AlchemyAPI服务添加到Bluemix上的Python应用程序中。我可以在AlchemyAPI服务的服务凭据中看到API密钥。在哪里,我应该在应用程序代码或文件中指定此密钥,以便调用服务?代码运行良好,除了我称之为AlchemyAPI的部分之外,其他的都做了 我遵循了命令,但它只是以“拿到钥匙”停止,并没有告诉我如何处理它 一些我尝试过但不起作用的事情: 在manifest.yml文件中添加了一个条目,如下所示。不起作用 服务: -炼金术服务名称 应用: -路径:。 环境: 炼金

我已将AlchemyAPI服务添加到Bluemix上的Python应用程序中。我可以在AlchemyAPI服务的服务凭据中看到API密钥。在哪里,我应该在应用程序代码或文件中指定此密钥,以便调用服务?代码运行良好,除了我称之为AlchemyAPI的部分之外,其他的都做了

我遵循了命令,但它只是以“拿到钥匙”停止,并没有告诉我如何处理它

一些我尝试过但不起作用的事情:

  • manifest.yml
    文件中添加了一个条目,如下所示。不起作用
服务: -炼金术服务名称 应用: -路径:。 环境: 炼金术钥匙:实际钥匙
  • 在应用程序代码中,在调用AlchemyAPI之前调用密钥。不起作用
VCAP_SERVICES=os.getenv('VCAP_SERVICES')) 密钥=(VCAP_服务['alchemy_api'][0]['credentials']['apikey']) 从alchemyapi进口alchemyapi
alchemyapi=alchemyapi()您正在使用的Python API要求将alchemyapi键作为参数传递给脚本或存储在文件中。您可以在代码中看到这一点

如果您想继续使用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()

现在有一个更新的Python SDK可用,我强烈建议使用这个SDK。它支持炼金术的更多功能

基于你想要使用的炼金术,你可以看看各种各样的例子。下面是一个使用炼金术语言的例子:


如果您将AlchemyAPI服务绑定到应用程序,此SDK将自动从VCAP_服务中找到AlchemyAPI密钥。

您可以使用
manifest.yml
,只要您不将代码推送到其他人可以看到您的密钥的公共存储库。否则,我建议您使用Bluemix UI编辑环境变量

manifest.yml

- applications:
  path: .
  env:
     ALCHEMY_KEY: the_actual_key
节点:


在本例中,代码类似,但如果您使用一个SDK,如@Frederic Lavigne在其答案中提到的SDK,则会自动提取密钥。

多亏@Frederic和@German共享的资源,我才能够通过更多的研究找到答案。我没有按原样使用建议的SDK,因为SDK包含所有内容,我正在尝试创建一个简单的演示应用程序

简短回答 不要调用AlchemyAPI模块。改为调用Watson开发者云模块

长话短说 对于Bluemix上的Python应用程序,依赖项必须列在requirements.txt文件中。Bluemix将自动pip安装这些模块,而无需您做任何事情

因为我使用的是AlchemyAPI服务(并参考了他们的入门指南),所以我在
requirements.txt
中将AlchemyAPI列为依赖项。我以为Bluemix会安装它。在我的Python代码中,我通过alchemyapi import alchemyapi的
调用了该模块

错误的假设<代码>alchemyapi
不能通过Bluemix安装pip。要调用的模块是
watson developer cloud

调用后,可以指定api密钥,以便:

from watson_developer_cloud import AlchemyLanguageV1 alchemy_language = AlchemyLanguageV1(api_key='THE_API_KEY') 从watson_开发者_云导入AlchemyLanguageV1 炼金术语言=炼金术语言v1
因此,下面是问题的答案:您使用
api_key
变量来保存密钥的值,并调用
watson developer cloud
模块,NOT调用
alchemyapi
模块。当您将Alchemy服务绑定到应用程序时,您可以通过编程方式从服务凭据中提取API密钥。

对不起,我不清楚这里提出的建议。请澄清以下几点:(1)如何将AlchemyAPI键传递给脚本?具体来说,炼金术派在寻找什么变量或参数<代码>api_键?在本地文件系统中,我可以通过在本地运行
alchemy.py
文件来传递密钥,但如果我在Bluemix上使用AlchemyAPI服务,我不会期望应用程序代码空间中必须存在
alchemy.api
。我的理解正确吗?(2) 最近的Python SDK:您是否建议将整个应用程序代码迁移到此SDK?澄清了我的答案。是的,我会使用最新的Python SDK,它有更多的功能,并与Bluemix更好地集成。谢谢你,德文。你的回答,加上@FredericLavigne的回答,帮助了我。简单的回答是:调用watson开发者云而不是alchemyAPI。我发布了一个更新我的问题与长版本。
- 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_api": [{
  "name": "alchemy_api_free_docs",
  "label": "alchemy_api",
  "plan": "free",
  "credentials": {
    "url": "https://gateway-a.watsonplatform.net/calls",
    "apikey": "THE-API-KEY"
  }
}]
from watson_developer_cloud import AlchemyLanguageV1 alchemy_language = AlchemyLanguageV1(api_key='THE_API_KEY')