Где указать ключ AlchemyAPI в Bluemix?

Я добавил службу AlchemyAPI в свое приложение Python в Bluemix. Я вижу ключ API в учетных данных службы AlchemyAPI. Где, в коде приложения или файлах, я должен указать этот ключ, чтобы я мог вызвать службу? Код работает нормально и делает все, кроме той части, где я вызываю AlchemyAPI.

Я следовал руководству по началу работы здесь, но он просто заканчивается "Получи ключ" и не говорит мне, что с ним делать.

Некоторые вещи, которые я пробовал, но которые не работали:

  • Добавил запись в файл 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()

person abasu    schedule 27.04.2016    source источник


Ответы (3)


Используемый вами Python API требует, чтобы ключ AlchemyAPI был передан в качестве аргументов скрипту или сохранен в файле. Вы можете увидеть это в коде https://github.com/AlchemyAPI/alchemyapi_python/blob/master/alchemyapi.py

Если вы хотите использовать SDK AlchemyAPI по адресу https://github.com/AlchemyAPI/alchemyapi_python, ожидает, что ключ API будет храниться в файле с именем «api_key.txt» в текущем рабочем каталоге. Если вы хотите использовать этот SDK в Bluemix и предполагаете, что вы получаете значение ключа API из среды, как показано немецким языком, вы должны создать файл «api_key.txt» в своем коде:

# write the key to the file
f = open('api_key.txt', 'w')
f.write(alchemy_key)
f.close()

Более свежий и актуальный Python SDK доступен по адресу https://github.com/watson-developer-cloud/python-sdk Я настоятельно рекомендую вместо этого использовать этот SDK. Он поддерживает больше функций AlchemyAPI.

В зависимости от AlchemyAPI, который вы хотите использовать, вы можете посмотреть различные примеры. Вот один из них, использующий язык Alchemy: https://github.com/watson-developer-cloud/python-sdk/blob/master/examples/alchemy_language_v1.py

Этот SDK автоматически найдет ключ AlchemyAPI из VCAP_SERVICES, если вы привяжете службу AlchemyAPI к своему приложению.

person Frederic Lavigne    schedule 27.04.2016
comment
Извините, но мне не совсем ясны предложения, сделанные здесь. Не могли бы вы уточнить следующие моменты: (1) Как ключ AlchemyAPI должен передаваться сценарию? В частности, какую переменную или аргумент ищет AlchemyAPI? api_key? В локальной файловой системе я могу передать ключ, запустив файл alchemy.py локально, но если я использую службу AlchemyAPI в Bluemix, я бы не ожидал, что alchemy.api должен существовать в кодовом пространстве приложения. Правильно ли я понимаю? (2) Более поздний Python SDK: вы предлагаете перенести весь код приложения в этот SDK? - person abasu; 27.04.2016
comment
уточнил мой ответ. и да, я бы использовал более свежий Python SDK, он имеет больше функций и лучшую интеграцию с Bluemix. - person Frederic Lavigne; 28.04.2016

Вы можете использовать manifest.yml до тех пор, пока не отправите свой код в общедоступный репозиторий, где другие люди смогут увидеть ваш ключ. В противном случае я бы посоветовал вам использовать пользовательский интерфейс Bluemix для редактирования переменных среды.

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"
  }
}]

В этом случае код будет аналогичным, но если вы используете один из SDK, например тот, который @Frederic Lavigne упомянул в своем ответе, ключ будет извлечен автоматически.

person German Attanasio    schedule 27.04.2016
comment
Спасибо, Герман. Ваш ответ вместе с ответом @FredericLavigne мне помог. Короткий ответ: вызовите watson-developer-cloud вместо alchemyAPI. Выкладываю обновление на мой вопрос с длинной версией. - person abasu; 29.04.2016

Благодаря ресурсам, которыми поделились как @Frederic, так и @German, я смог найти ответ, проведя немного больше исследований. Я не использовал предлагаемые SDK как есть, потому что SDK содержат все, и я пытаюсь создать простое демонстрационное приложение.

Краткий ответ

Не вызывайте модуль AlchemyAPI. Вместо этого вызовите модуль Watson Developer Cloud.

Длинный ответ

Для приложения Python в Bluemix зависимости должны быть перечислены в файле requirements.txt. Bluemix автоматически установит эти модули, и вам не нужно будет ничего делать.

Поскольку я использовал службу AlchemyAPI (и руководствовался их руководством по началу работы), я указал AlchemyAPI как зависимость в requirements.txt. Я предполагал, что Bluemix установит его. В моем коде Python я назвал этот модуль from alchemyapi import AlchemyAPI.

Неверное предположение. alchemyapi нельзя установить через Bluemix. Модуль для вызова: watson-developer-cloud.

Как только это будет вызвано, вы можете указать ключ API так:

from watson_developer_cloud import AlchemyLanguageV1
alchemy_language = AlchemyLanguageV1(api_key='THE_API_KEY')

Итак, вот ответ на вопрос: вы используете переменную api_key для хранения значения ключа и вызываете модуль watson-developer-cloud, НЕ модуль alchemyapi. Вы можете программно извлечь ключ API из учетных данных службы при привязке службы Alchemy к приложению.

person abasu    schedule 29.04.2016