bluemixにpython+Flask+watson api環境を構築してみた。

  • 9
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

IBMのBluemixを触ることになったので、
ちょい下調べ。

まずは、ざっと触って気づいた点
・Bluemixの動作は全体的にもったりしてる
・ほぼ英語。日本語は意訳あり
・Python、Rubyなどもカバー
・仮想マシンも使える?近日公開とのこと
・無料枠があり、無料サーバーとしても使えそう。

最初にPythonを指定してアプリを作成します。
bluemix上でクリッククリックで簡単に作成できました。

開発方法は2つ

1)bluemixの開発キッドをダウンロードしてローカル作業
or
2)Git連携
→ 使い方がいまいち分かりにくい。

とりあえず、IDEダウンロードとかだるいので、
後者のGit連携でやってみます。

まずは、ダッシュボードからadd gitをクリックして、
ibm上にgithubリポジトリを作成。

で、ローカルでcloneして、
いじってpushすれば自動でデプロイされる。

次にpython2をpython3にする。

デフォルトでバージョン 2.7.10
runtime.txtで変更可能

(参考)
https://console.ng.bluemix.net/docs/runtimes/python/index.html#python_runtime

# pyenvインストール
$ brew install pyenv

# 設定
$ export PYENV_ROOT="$HOME/.pyenv"
$ export PATH="$PYENV_ROOT/bin:$PATH"
$ eval "$(pyenv init -)"

# python3.4.3をインストール
$ pyenv install --list
$ pyenv install 3.4.3
$ pyenv global 3.4.3
$ pyenv versions
$ pyenv rehash
$ python --version # → 3.4.3になってること確認

bluemix側のruntime.txtに以下に変更
$ python-3.4.3 # → deployするとpython3.4.3になっている。

フレームワークのインストール

DjangoなどTornado、色々ありましたが、
軽量ということで、Flaskを選択。
ほぼ、python3対応されてきてますね。

$ pip install Flask

ここを参考にbluemix環境構築

https://github.com/IBM-Bluemix/bluemix-python-flask-sample/blob/master/static/index.html

・server.py修正

import os
from flask import Flask

app = Flask(__name__)

@app.route('/')
def Welcome():
    return app.send_static_file('index.html')

@app.route('/myapp')
def WelcomeToMyapp():
    return 'Welcome again to my app running on Bluemix!'

port = os.getenv('PORT', '5000')
if __name__ == "__main__":
    app.run(host='0.0.0.0', port=int(port))

・requirements.txt修正

Flask==0.11.1

・静的ファイルのパス変更
"static/"を追加

これで、bluemix上でPython3とFlaskが動くようになりました。

deploy中は「404 Not Found」出る(汗

で、次は
Watson APIとの連携です。

今回は、Personality Insightsを利用します。

これ一言で言うと、Watsonによる「性格診断」。

SNSなどのテキストデータをインプットに、
情緒不安定性とか、外向性、知的好奇心、誠実性、協調性など、
15種類の百分率で診断してくれます。

http://www.ibm.com/smarterplanet/us/en/ibmwatson/developercloud/personality-insights.html

連携は簡単で、
まずはBluemixのダッシュボードの左メニュー「サービス」で、対象のサービスを選択。
リージョンの概念があるので注意。(違うリージョンがデフォルト選択されていて、消えてる!って焦りました)

連携できると、対象アプリの環境変数で、
VCAP_SERVICESに値が格納されます。

アプリ開発ではここから環境変数を参照して、APIなどにアクセスします。

具体的なコーディングは下記を参照

(参考)
https://github.com/watson-developer-cloud/personality-insights-python

ポイントだけ書くと、

・VCAP_SERVICESから値を参照
・Personality Insights serviceにアクセス
・json形式で診断結果が返ってくるので、これを適宜表示

注)Flaskだと以下でjsonを返す。
return app.response_class(response.content, content_type='application/json')

以上、
まずは簡単なAPI連携でした。

次は
Natural Language Classifier(NLC)などを使って、
会話を楽しむWatsonを作ってみたいと思います。