SotaでVstoneMagicを使ってHTTP通信をする場合、HTTP通信ブロックというものは無いので、以下の2つ方法が考えられる。
- VstoneMagicでsotaライブラリのHttpHelperクラスのHttpProcメソッドを使用する
- JavaでHTTP通信処理を書いてjarにし、VstoneMagicにインポートして呼び出す
2の方は自分で好きなライブラリ(僕の場合はOkHttp3)を使えばいいと思う。
1の方は標準ライブラリだが、あまり情報がないので、どう使うのかを紹介しようと思う。
説明用にGoogle Translate APIを使用したが、Google Translate APIの仕様については、今回は説明しない。
公式ドキュメント参照。
環境はいつも通り。
対象 | OS、バージョン |
---|---|
PC | Windows10 x64 |
Sota | 1.6.0 |
VstoneMagic | 1.0.6156.22367(VstoneMagic_update20170126) |
VstoneMagicのSotaライブラリ | 1.6.0 |
VstoneMagicでの今回の構成
レスポンスコードと発話用テキストの変数ブロックと、HTTP通信処理を記述する自由記述ブロック、レスポンスコードを見て処理を分けるためのifブロック、発話用テキストを発話する発話ブロックの構成にした。
HTTP通信処理
最初にも書いたが、HTTP通信ブロックというものは無いため、HTTP通信処理は自由記述ブロックに書いていく。
Google Translate APIを使って、getする場合、以下のようになる。
TranslatedクラスはAPI仕様に基づいて自分で作成した、パース用クラスになる。
// 日本語から英語に翻訳するURL
String baseUrl = "https://www.googleapis.com/language/translate/v2?key=(キー)&source=ja&target=en&q=";
// 翻訳する単語を足し込む
String url = baseUrl + "こんにちは。よろしくね。";
// SSLを使用するかどうか
boolean isSsl = true;
// get用のHTTPリクエストオブジェクトを生成する
HttpRequest request = HttpRequest.createGet(url, isSsl);
// リクエストを投げる
HttpResponse response = HttpHelper.HttpProc(request);
// レスポンスコードはresponseCodeに格納されている
code = response.responseCode;
if(response.responseBody != null){
// ボディはresponseBodyに格納されている。バイト配列なのでStringに変換
String body = new String(response.responseBody);
// jsonをパース
Gson gson = new Gson();
Translated trans = gson.fromJson(body, Translated.class);
text = trans.data.translations[0].translatedText;
}
もし、何かのjsonをpostする場合は、以下のようになる。
// postするURL
String url = "https://xxx";
// SSLを使用するかどうか
boolean isSsl = true;
// レスポンスを受けるかどうか
boolean receivedResponse = true;
// タイムアウト(ms)
int timeoutMs = 30000;
// postするjson文字列
String postJson = "{\"value\":\"sample value\"}";
// post用のHTTPリクエストオブジェクトを生成する
HttpRequest request = HttpRequest.createPostJson(url, isSsl, receivedResponse, timeoutMs, postJson);
// リクエストを投げる
HttpResponse response = HttpHelper.HttpProc(request);
インポート文の追加
HTTP通信処理を自由記述ブロックに書き、そのままビルドすると、以下のようにエラーが発生する。
原因は、HttpRequestクラスやGsonクラスのパッケージ名がimport文で追加されていないため。
VstoneMagicでimport文を追加するには、追加するクラスを選択し、プロパティの「Import」項目をダブルクリックする。
開いたダイアログに追加するパッケージ名を記載し、OKボタンを押下する。
これでビルドするとエラーが解消されていると思う。
今回作成したHTTP通信用サンプルプログラムはGitHubにあげた。