BoxとBluemixの連携をやってみた

##BoxとBluemixの連携
BoxとBluemixのWatson Personality Insights サービスを連携させるデモが以下に公開されていましたので、試してみました。
>[Analyze the Personality of of your Box.com files using IBM Watson, IBM Bluemix](https://www.youtube.com/watch?v=KPT7ttRRpr4)
>[Integrate Cloud File Storage and Sharing into your Bluemix App with Box](https://developer.ibm.com/bluemix/2015/06/24/intro-to-box/)

Boxの中に格納されているテキストファイルをAPIで読み取り、その筆者の特徴を推測するというものです。
##Boxアカウントの準備
まずは、Boxのアカウントを準備します。すでにアカウントをお持ちの方は、このステップは不要です。ただし、企業などでお使いの場合に、API接続が制限されている場合があります。その場合、この後のステップで、「このアプリケーションは、あなたのBox管理者によって許可されていないため、使用できません。」のエラーが出てしまいます。別のアカウントを作成する必要があります。
Boxの30日無料トライアルは以下から申し込めます。
>[Try Box Free for 30 Days No Credit Card Required!](http://bit.ly/1XUNTTc)

Boxアカウントの登録が完了したら、以下のサイトからログインをします。（通常のログイン画面とは異なります。）
>[Box Developers](https://developer.box.com/platform)

![1-3.png](https://qiita-image-store.s3.amazonaws.com/0/130520/7c175a86-f81d-114e-4565-0ff0ed6d880c.png)

「はじめに」を押します。

![1-4.png](https://qiita-image-store.s3.amazonaws.com/0/130520/d3506dd6-fd9e-5eff-f231-9d2de28383a4.png)

任意のアプリケーション名をつけ、「アプリケーションの作成」を押します。

![1-6.png](https://qiita-image-store.s3.amazonaws.com/0/130520/f8e1519f-dbb8-78cb-0ed5-930575e306b6.png)

「アプリケーション名」と「メールアドレス」を確認します。
![1-7.png](https://qiita-image-store.s3.amazonaws.com/0/130520/de84dd34-96c9-1a10-73df-0337050e9ffe.png)

「client_id」と「client_secret」は後ほど、Bluemixとの接続に使います。
「redirect_uri」に、https://personality-box-XXXXXX.mybluemix.net　
を入力します。ここでXXXXXXの部分は、任意につけてください。ただし、他のユーザとかぶれないため、ユニークになるようにします。

![1-8.png](https://qiita-image-store.s3.amazonaws.com/0/130520/7bcce192-e497-4edf-c8e6-d1cce906982a.png)

「APIキー」は後ほど、Bluemixとの接続に使います。
もう一箇所、「リダイレクトURL」に上と同じURLを入れます。「アプリケーションの保存」をします。

![1-9.png](https://qiita-image-store.s3.amazonaws.com/0/130520/41343703-88cf-bae8-2dc2-aa2cdaeb7618.png)

##Bluemix Boxサービスの作成
以下のURLからBluemixにログオンします。
>[Bluemix](https://ace.ng.bluemix.net/)

Bluemixは、「米国南部」「英国」「シドニー」の3つの地域で稼動しています。上部メニューの 「地域」 をクリックすることで、稼動する環境を選択することができます。今回は「米国南部」を利用します。地域が「米国南部」になっていることを確認してください。「米国南部」になっていない場合は、「地域」をクリックして、「米国南部」を選択してください。

![1-10png.png](https://qiita-image-store.s3.amazonaws.com/0/130520/397936a0-148c-c42b-cf26-6c262993c491.png)

「カタログ」->「Webとアプリケーション」から「Box」を選択します。

![1-11.png](https://qiita-image-store.s3.amazonaws.com/0/130520/227975b3-d56b-0422-86c9-1ca80dfbb62a.png)

「サービス名」には「Box」と入れます。

![1-12.png](https://qiita-image-store.s3.amazonaws.com/0/130520/dae665a8-6c4d-98df-3d06-88176e6201ef.png)

先ほど、Box側で取得した「API Key」「Client Id」「Client Secret」を入力します。（コピペした方が良いと思います。）

![1-13.png](https://qiita-image-store.s3.amazonaws.com/0/130520/dee6c0eb-63f7-a3c5-a2c6-693c025dbd38.png)

「作成」を押すと、BluemixのBoxのサービスが起動します。

##サンプルアプリケーションのダウンロード
以下のサイトより、サンプルアプリケーションをダウンロードします。
>[Personality Box](https://github.com/IBM-Bluemix/box-watson)

![1-1.png](https://qiita-image-store.s3.amazonaws.com/0/130520/72a6075f-ed61-6abc-0ed4-29851ff31539.png)

Download ZIPをクリックしてダウンロードします。
任意のフォルダを作成し、ZIPファイルを展開します。私は、C:\boxwatsonというフォルダを作成しました。

![1-2.png](https://qiita-image-store.s3.amazonaws.com/0/130520/9d7b2ca9-ef67-3967-1713-455527317198.png)

manifest.ymlを開き、以下のように編集します。（他の記述は不要です。）
>applications:
- name: personality-box
  host: personality-box-XXXXXX
  framework: node
  runtime: node12
  memory: 128M
  instances: 1

host名ですが、先ほどリダイレクトURLで入力した値の、「personality-box-XXXXXX」の部分を抜き出してつけてください。
次に、config.jsを開き、以下のように編集します。（他の記述は不要です。）
> var VCAP_APPLICATION = process.env["VCAP_APPLICATION"],
    vcapApplication;
if (VCAP_APPLICATION) {
    vcapApplication = JSON.parse(VCAP_APPLICATION);
}
module.exports = function() {
    return {
        appURL: function(port) {
            if (VCAP_APPLICATION) {
                return "https://personality-box-XXXXXX.mybluemix.net";
            }
            else {
                return "http://localhost:" + port.toString();
            }
        }
    };
};

Retuen URLの箇所を、先ほどのリダイレクトURLと同じにしてください。
##アプリケーションのデプロイ
以下のサイトより、Cloud Foundry CLIをダウンロードして、インストールします。
>[Cloud Foundry CLI](https://github.com/cloudfoundry/cli#downloads)

私は、Windows版でやりました。
インストール後、コマンドプロンプトを起動します。Cloud Foundry CLIのインストールフォルダに移動し、

>cf config --locale ja_JP

でとりあえず、表示を日本語にします。
今回Bluemixの「地域」を「米国南部」にしたので、

>cf api https://api.ng.bluemix.net

を実行します。
API　エンドポイントが設定されました。

>cf login

を実行して、BluemixのユーザID/パスワードを入力します。
認証されます。
コマンドプロンプトで、先ほどアプリケーションを入れたディレクトリに移動します。（私の場合は、C:\boxwatsonというフォルダです。）そのフォルダで

>cf push --no-start

を実行して、アプリケーションをデプロイします。

Bluemixのダッシュボードより、「personality-box」というアプリケーションを確認します。

![1-20.png](https://qiita-image-store.s3.amazonaws.com/0/130520/82d5a17a-7872-fc50-9b55-db38ad4f229c.png)

「サービスまたはAPIのバインド」で先に作成した「Box」のサービスを追加します。

コマンドプロンプトで、再ステージをします。コマンドプロンプトで、先ほどアプリケーションを入れたディレクトリに移動します。（私の場合は、C:\boxwatsonというフォルダです。）そのフォルダで

>cf restage personality-box

を実行して、再ステージします。
以上でアプリケーションが完成しました。

##サンプルアプリケーションの確認
Boxにログインをし、その最上位にテキストファイルをアップロードします。
私の場合には、
>[Personality Insights](https://personality-insights-livedemo.mybluemix.net/)

こちらの「テキスト入力」というところにある「2012ディベート　- バラク・オバマ (英語)」と「道草 - 夏目漱石 (日本語)」を入れました。

![1-22.png](https://qiita-image-store.s3.amazonaws.com/0/130520/9dc1cbb6-8182-4248-94be-7a42f045ca02.png)

以下に接続をします。（「personality-box-XXXXXX」の部分は、上で設定をした自身のURLです。）

> https://personality-box-XXXXXX.mybluemix.net/

![1-25.png](https://qiita-image-store.s3.amazonaws.com/0/130520/7ad0177a-5f33-b330-ee02-149b377c6b71.png)

「Sigh in with Box」をクリック

![1-26.png](https://qiita-image-store.s3.amazonaws.com/0/130520/d88ccebf-9538-89b9-c047-754d1b9d35d9.png)

Boxのアカウント情報を入力します。

![1-27.png](https://qiita-image-store.s3.amazonaws.com/0/130520/1fecc158-dfd9-f266-0e5e-a402c3121f94.png)

「Boxへのアクセスの許可」をクリックします。

![1-28.png](https://qiita-image-store.s3.amazonaws.com/0/130520/afc64ffa-53fc-e1d0-0b72-5220646c9297.png)

Boxの中に格納されているテキストファイルをAPIで読み取り、その筆者の特徴を推測しています。

![1-29png.png](https://qiita-image-store.s3.amazonaws.com/0/130520/cb3b54d8-4bbb-2067-f68e-f555b17eb44c.png)

##終わりに
今回は、簡単なサンプルで試してみましたが、Bluemixを利用することで、簡単にBoxのAPIとの連携やそのアプリケーションが構築できることが分かりました。
この応用で、様々なWatson APIとBoxを連携させることも可能だと思いますので、より実用的なアプリケーションにチャレンジしてみたいです。