3
3

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.

SotaでHTTP通信をする

Posted at

SotaでVstoneMagicを使ってHTTP通信をする場合、HTTP通信ブロックというものは無いので、以下の2つ方法が考えられる。

  1. VstoneMagicでsotaライブラリのHttpHelperクラスのHttpProcメソッドを使用する
  2. 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ブロック、発話用テキストを発話する発話ブロックの構成にした。
000.PNG

HTTP通信処理

最初にも書いたが、HTTP通信ブロックというものは無いため、HTTP通信処理は自由記述ブロックに書いていく。
Google Translate APIを使って、getする場合、以下のようになる。
TranslatedクラスはAPI仕様に基づいて自分で作成した、パース用クラスになる。
001.PNG

// 日本語から英語に翻訳する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通信処理を自由記述ブロックに書き、そのままビルドすると、以下のようにエラーが発生する。
002.PNG

原因は、HttpRequestクラスやGsonクラスのパッケージ名がimport文で追加されていないため。
VstoneMagicでimport文を追加するには、追加するクラスを選択し、プロパティの「Import」項目をダブルクリックする。
003_2.PNG

開いたダイアログに追加するパッケージ名を記載し、OKボタンを押下する。
004.PNG

これでビルドするとエラーが解消されていると思う。

今回作成したHTTP通信用サンプルプログラムはGitHubにあげた。

3
3
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
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?