4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

IBM Cloud上のNode.jsでライブラリを使わずにWatson APIを呼び出す方法

Last updated at Posted at 2017-12-30

通常、IBM Cloud(旧Bluemix)上のNode.jsのアプリからWatson APIを呼び出す場合、Watson APIのライブラリを使うのですが、わけあって、直接REST API Callをしたいことがあり、その時の話のメモとしての雛形コードを記載します。Language Tanslator APIが対象となっていますが、同じ考え方で他のAPI Callもできるはずです。

前提

  • Node.jsはローカルでもテストできるよう、ローカルとIBM Cloudどちらでも動くものとします。
  • ローカル環境では、通常のサンプルアプリのお作法通り、.envファイルにusername、passwordの記載を行うものとします。
  • IBM Cloud環境では、APIサービスはアプリケーションにバインドされており、VCAP_SERVICES環境変数経由で、username、passwordを取得できるものとします。

サンプルコード

  • 上記の条件を実装するための部分のみ抽出した雛形コードです。通常のお作法によるNode.jsコードはこの外側に必要です。
  • エラー処理は省略しています。
// .envファイルの読み込み
require('dotenv').load({silent: true});

// アプリ(ブラウザ側)から /api/translateで呼ばれた場合の処理
app.post('/api/translate',  function(req, res, next) {
    // パスワードエンコードに必要
    const bufferFrom = require('buffer-from');

    // リクエストを直接出すのに必要
    const request = require('request');

    // username一時保存用
    var username;

    // password一時保存用
    var password;

    // ローカル環境で.envファイルからusername、password取得
    if (process.env['LANGUAGE_TRANSLATOR_USERNAME']) {
        username = process.env['LANGUAGE_TRANSLATOR_USERNAME']
    }
    if (process.env['LANGUAGE_TRANSLATOR_PASSWORD']){
        password = process.env['LANGUAGE_TRANSLATOR_PASSWORD'];
    }
    
    // IBM Cloud環境上でusername、password取得 (サービスがバインドされている前提)
    if (process.env.VCAP_SERVICES)
    {
        var env = JSON.parse(process.env.VCAP_SERVICES);
        var vcap = env.language_translator;
        username = vcap[0].credentials.username;
        password = vcap[0].credentials.password;
     }

    // リクエストヘッダの生成
    // username, passwordはBase64でエンコードする
    var headers = {
        Authorization: 'Basic ' + bufferFrom(username + ':' + password).toString('base64'),
        'Content-Type':'application/json'
    }

    // リクエスト時のオプションデータ作成
    var options = {
        url: 'https://gateway.watsonplatform.net/language-translator/api/v2/translate',
        method: 'POST',
        headers: headers,
        json: true,
        body: {
            text: req.body.text,
            model_id: req.body.model_id
        }
    }

    // リクエスト実行
    request(options, function (error, response, body) {
        if ( error ) {
            console.log(error);
            return next(error);
        } else {
            // 正常終了時
            res.json(body);
        }
    })
})

参考リンク Bluemix上のWatsonアプリをローカル環境で開発・デバッグする際のTips

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?