雑談対話APIはHttpPostを使う必要があります。
これまでHttpGetを使うWeb APIはいくつか使ったことがあったのですが、HttpPostはあまり経験がなくて苦戦してしまいました。
なんとかできましたので、その時のメモを残しておきます。
苦戦したポイントは……(いやーお恥ずかしい)
- <uses-permission android:name="android.permission.INTERNET" />を忘れずに
- JSON形式でリクエストを送らないといけないことになかなか気づかなかったこと
- StringEntityのコンストラクタで第2引数 "UTF-8"が必要だったこと(機種依存なのかも? しれません)
参考にさせていただいたサイト様です。
- [Python] Docomoの雑談対話APIを使ったチャットを作ってみた
→ こちらでJSONを送らないといけないことがわかりました。 - [Java] HttpClient の POST で JSON を送信する件.
- HTTP POST using JSON in Java
HttpPostリクエストを実行して、HttpResponseを得るところまでのソースです。
AsyncTask#doInBackground()等main threadではないThreadで動作するように実装すればよいかとおもいます。
DefaultHttpClient httpclient = new DefaultHttpClient();
final String APIKEY = "ご自身のAPIKEYをお使いください";
HttpPost post = new HttpPost("https://api.apigw.smt.docomo.ne.jp/dialogue/v1/dialogue?APIKEY=" + APIKEY);
JSONObject json = new JSONObject();
try {
json.put("utt", "こんにちは");
StringEntity body = new StringEntity(json.toString(), "UTF-8"); /** LYNX 3D SH-03Cは第2引数"UTF-8"が必要でした。 */
//post.addHeader("Content-Type", "application/json"); /** 雑談対話APIでは設定をしなくてもよいようです。 */
post.setEntity(body);
HttpResponse response = httpclient.execute(post);
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == HttpStatus.SC_OK) {
HttpEntity entity = response.getEntity();
String jsonTxt = EntityUtils.toString(entity, "UTF-8");
JSONObject response_json = new JSONObject(jsonTxt);
/** レスポンスの取り出し */
String utt = response_json.getString("utt");
String yomi = response_json.getString("yomi");
String mode = response_json.getString("mode");
String da = response_json.getString("da");
String context = response_json.getString("context");
}
} catch (ClientProtocolException e) {
} catch (IOException e) {
} catch (JSONException e) {
}
final String APIKEY = "ご自身のAPIKEYをお使いください";
HttpPost post = new HttpPost("https://api.apigw.smt.docomo.ne.jp/dialogue/v1/dialogue?APIKEY=" + APIKEY);
JSONObject json = new JSONObject();
try {
json.put("utt", "こんにちは");
StringEntity body = new StringEntity(json.toString(), "UTF-8"); /** LYNX 3D SH-03Cは第2引数"UTF-8"が必要でした。 */
//post.addHeader("Content-Type", "application/json"); /** 雑談対話APIでは設定をしなくてもよいようです。 */
post.setEntity(body);
HttpResponse response = httpclient.execute(post);
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == HttpStatus.SC_OK) {
HttpEntity entity = response.getEntity();
String jsonTxt = EntityUtils.toString(entity, "UTF-8");
JSONObject response_json = new JSONObject(jsonTxt);
/** レスポンスの取り出し */
String utt = response_json.getString("utt");
String yomi = response_json.getString("yomi");
String mode = response_json.getString("mode");
String da = response_json.getString("da");
String context = response_json.getString("context");
}
} catch (ClientProtocolException e) {
} catch (IOException e) {
} catch (JSONException e) {
}