LiplisDevDiary/2015-01-14
Last-modified:
C#でドコモAPIにアクセスする。
Liplisにおしゃべり機能を実装しました。
なかなかいい感じです。
DocomoAPI 雑談APIのRESTのインターフェースを使ってアクセスしています。
https://dev.smt.docomo.ne.jp/?p=docs.api.index
リクエストのボディにはJsonで内容を設定する必要があります。
それを勘違いし、Postのパラメーターとして設定してハマりましたが、
DocomoAPIのサイトで質問したところ、親切にご回答頂き、
無事に応答を得ることが出来ました。
C#でアクセスしているサンプルが無かったので、晒してみます。
private void apiAccess() { //URL string url = "https://api.apigw.smt.docomo.ne.jp/dialogue/v1/dialogue?APIKEY=XXXXXX"; //文字コードを指定する Encoding enc = Encoding.UTF8; string reqstr = "{\"utt\":\"" + txtNaiyo.Text + "\", \"context\":\"" + txtContext.Text + "\", \"user\":\"99999\", \"nickname\":\"光\", \"nickname_y\":\"ヒカリ\", \"bloodtype\":\"B\", \"birthdateY\":\"1997\", \"birthdateM\":\"5\", \"birthdateD\":\"30\", \"age\":\"16\", \"constellations\":\"双子座\", \"place\":\"東京\", \"mode\":\"" + txtMode.Text + "\"}"; //バイト型配列に変換 byte[] postDataBytes = System.Text.Encoding.UTF8.GetBytes(reqstr); //WebRequestの作成 HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); req.Method = "POST"; req.ContentType = "application/json"; req.ContentLength = postDataBytes.Length; Stream reqStream = req.GetRequestStream(); reqStream.Write(postDataBytes, 0, postDataBytes.Length); reqStream.Close(); //レスポンス取得 WebResponse res = req.GetResponse(); Stream resStream = res.GetResponseStream(); //ストリーム読込 using (StreamReader sr = new StreamReader(resStream, enc)) { msgDocomoTalkResponse result = JsonConvert.DeserializeObject<msgDocomoTalkResponse>(sr.ReadToEnd()); txtResult.Text = result.utt; txtContext.Text = result.context; txtMode.Text = result.mode; } }