質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

2回答

543閲覧

Unity C# docomo雑談対話APIリクエストパラメータについて

ths

総合スコア21

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2018/06/22 11:15

unityでdocomo雑談対話apiを使用したいです。
しかし、データをpostしてもError downloading: 400 Bad Requestが出ます。

using System.Collections; using System.Collections.Generic; using System.Text; using UnityEngine; using MiniJSON; public class Brain : MonoBehaviour { private string url = "https://api.apigw.smt.docomo.ne.jp/dialogue/v1/dialogue?APIKEY="; private string key = "xxxxxxxxxxxxxxxxxxxx"; // API key private string text = "こんにちは"; // Use this for initialization void Start () { this.url += key; StartCoroutine("connect"); } // Update is called once per frame void Update () { } private IEnumerator connect() { Hashtable header = new Hashtable(); header.Add("Content-type", "application/json"); string postData = "{'utt':'" + text + "', 'context':'', 'mode':'dialog'}"; byte[] data = System.Text.Encoding.UTF8.GetBytes(postData); WWW www = new WWW (url,data,header); yield return www; if(!string.IsNullOrEmpty(www.error)) { print( "Error downloading: " + www.error ); } else { string jsonText = www.text; var json = Json.Deserialize (jsonText) as Dictionary<string, object>; foreach (var jsondata in json) { Debug.Log ("key名:" + jsondata.Key + " value値" + jsondata.Value); } } } }

WWWのコンストラクタは指示通りにパラメータを入れています。
エラー原因となっているプログラムが必ずあると思うのですが、自分ではわかりません。
ちなみにpythonでアクセスしたときは成功するので、アクセス制限がかかっているわけではありません。
原因がわかる方教えていただきたいです。よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

もう書き直されているかもしれませんが、こちらの環境ではpostDataの内容のシングルクォーテーションをダブルクォーテーションに変更することで問題なくレスポンスが返ってきました。

C#

1string postData = "{\"utt\":\"" + text + "\", \"context\":\"\", \"mode\":\"dialog\"}";

良ければ試してみてください。

また、自分の場合は上記のような書き方が面倒だったのでインナークラスを定義し、以下のように用いていました。参考になれば幸いです。

C#

1public IEnumerator Connect() { 2 ///省略 3 4 string postDataStr = new DocomoJson(text).SaveToString(); 5 byte[] postData = System.Text.Encoding.UTF8.GetBytes (postDataStr); 6 7 ///省略 8 9} 10 11class DocomoJson { 12 public string utt = ""; 13 public string context = ""; 14 public string mode = "dialog"; 15 16 public DocomoJson(string text) { 17 utt = text; 18 } 19 20 public string SaveToString() 21 { 22 return JsonUtility.ToJson(this); 23 } 24 }

投稿2018/06/22 19:07

mosin_nozomi

総合スコア29

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ths

2018/06/23 00:48

回答ありがとうございます。 リクエストパラメータを自然対話API用に書き直し、JsonUtility.ToJson()を使う方法で試したところ、正常にレスポンスが返ってきました。 本当にありがとうございました。
guest

0

雑談対話APIは2018年6月末に廃止を予定とのことで、
今後は自然対話APIへの移行が薦められているようですがその辺は問題ありませんか?

雑談対話

投稿2018/06/22 12:05

buibui80

総合スコア1033

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ths

2018/06/22 12:25

すみません。一度、自然対話API用に書き直します。
ths

2018/06/23 00:49

回答ありがとうございました。 自然対話APIで試したところ、成功いたしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問