【C#】Yahoo雑談対話APIを試してみる
コンソール上で雑談会話APIと会話してみる
Yahoo雑談会話APIの利用登録
1. docomoのデベロッパーサイトへ行き、新規登録をする
dev.smt.docomo.ne.jp
ちなみに自分はGoogleアカウントで登録
3. アプリケーション登録をする。以下、主な設定値。
- アプリケーション名:任意
- アプリケーション概要:任意
- サービス開始日:任意
- アプリケーションタイプ:ネイティブアプリケーション
- コールバックURL:https://dummy(適当なURLです)
- 提供者名:任意
4. API機能選択
雑談対話にチェックを入れて[次へ] > [利用申請する]
実装
1. リクエスト用のデータクラスを生成
APIとのやり取りはJSONで行う。以下を参考にデータクラスを作成
husk.hatenablog.com
using System.Runtime.Serialization; namespace ConsoleApplication1 { [DataContract] class RequestData { [DataMember] public string utt { get; set; } [DataMember] public string context { get; set; } [DataMember] public string nickname { get; set; } [DataMember] public string nickname_y { get; set; } [DataMember] public string sex { get; set; } [DataMember] public string bloodtype { get; set; } [DataMember] public string birthdateY { get; set; } [DataMember] public string birthdateM { get; set; } [DataMember] public string birthdateD { get; set; } [DataMember] public string age { get; set; } [DataMember] public string constellations { get; set; } [DataMember] public string place { get; set; } [DataMember] public string mode { get; set; } [DataMember] public string t { get; set; } } }
2. APIからのレスポンスを格納するデータクラスを作成
using System.Runtime.Serialization; namespace ConsoleApplication1 { [DataContract] class ResponseData { [DataMember] public string utt { get; set; } [DataMember] public string yomi { get; set; } [DataMember] public string mode { get; set; } [DataMember] public string da { get; set; } [DataMember] public string context { get; set; } } }
3. APIへリクエストを投げる用のメソッドを作成
以下を参考
husk.hatenablog.com
private async Task<string> getRequest(string url, string message) { try { using (HttpClient client = new HttpClient()) { HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, url); // リクエストデータを生成(必要最低限だけ) RequestData reqData = new RequestData(); reqData.utt = message; reqData.mode = "dialog"; string json = JsonUtils.ToJson(reqData); request.Content = new StringContent(json, Encoding.UTF8, "application/json"); var response = await client.SendAsync(request); return await response.Content.ReadAsStringAsync(); } } catch(Exception ex) { throw ex; } }
実際に試す
static void Main(string[] args) { string url = "https://api.apigw.smt.docomo.ne.jp/dialogue/v1/dialogue?APIKEY="; string key = "取得したAPIKEY"; url += key; do { string input = Console.ReadLine(); if (!string.IsNullOrEmpty(input)) { if (input.Equals("exit")) { break; } getRequest(url, input).ContinueWith( (task) => { string json = task.Result; ResponseData resData = JsonUtils.ToObject<ResponseData>(json); Console.Write(">> "); Console.WriteLine(resData.utt); contextId = resData.context; }); } } while (true); Console.WriteLine("\nStopped.."); Console.ReadLine(); }