效果如下
(由于我还不会图形界面程序的开发,所以使用的Unity _(:з」∠)_)
在开始制作之前,我们需要先去图灵机器人官网申请一个机器人,并获取它的key:
帮助文档:http://www.tuling123.com/help/h_cent_webapi.jhtml?nav=doc
这样前期准备工作就好啦!
接下来我们看下图灵机器人官方给的开发文档:
接口地址:http://www.tuling123.com/openapi/api
请求方式:HTTP POST
注:若之前使用get请求方式,仍能继续使用,日后将对该请求方式不再进行更新及维护工作,建议采用post请求方式。
请求参数:请求参数格式为json
请求示例
{
“key”: “APIKEY”,
“info”: “今天天气怎么样”,
“loc”:“北京市中关村”,
“userid”:“123456”
}
部分参数如下:
参数 | 是否必须 | 长度 | 示例 | 说明 |
---|---|---|---|---|
key | 必须 | 32 | 1ca8089********736b8ce41591426(32位) | 注册之后在机器人接入页面获得(参见本文档第2部分) |
info | 必须 | 1-30 | 打招呼“你好” 查天气“北京今天天气” | 请求内容,编码方式为UTF-8 |
userid | 必须 | 1-32 | abc123(支持0-9,a-z,A-Z组合,不能包含特殊字符) | 用户唯一标志(对应自己的每一个用户) 用户对话上下文控制 |
返回示例
{
"code":100000,
"text":"你也好 嘻嘻"
}
部分参数如下:
字段 | 说明 |
---|---|
code | 文本类标识码 |
text | 结果 |
看到这里我们大概有了思路,首先我们将需要发送的文本和key等封装在一个json里,通过post方式发送给图灵机器人的接口地址,然后获取其返回的信息(json格式),解析出来其中的text就是我们想要的结果。
这里我用了Litjson作为json解析工具,首先我创建了一个用于封装发送信息的类RequstData:
其中key是从图灵机器人官网获得的key,info代表发送的文本,userid是区别用户的id,可自定义设置。ConvertToJson()方法将上述信息封装成一个json字符串。
class RequstData
{
private const string key = "你的KEY";
public string Key { get; private set; }
public string Info { get; set; }
public string UserID { get; set; }
public RequstData(string info, string userid)
{
Info = info;
UserID = userid;
}
public string ConverToJson()
{
JsonData jd = new JsonData();
jd["key"] = key;
jd["info"] = Info;
jd["userid"] = UserID;
return JsonMapper.ToJson(jd);
}
}
然后是post方法发送并接受数据,返回值为结果字符串,参数postUrl为目标地址,这里就是”http://www.tuling123.com/openapi/api”,paramData就是上面封装的json字符串。
emmmm说实话这部分我也不是很熟悉,自己看吧。。。
/// <summary>
/// Post提交数据
/// </summary>
/// <param name="postUrl">URL</param>
/// <param name="paramData">参数</param>
/// <returns></returns>
private string PostWebRequest(string postUrl, string paramData)
{
string ret = string.Empty;
try
{
if (!postUrl.StartsWith("http://"))
return "";
byte[] byteArray = Encoding.UTF8.GetBytes(paramData); //转化
HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(new Uri(postUrl));
webReq.Method = "POST";
webReq.ContentLength = byteArray.Length;
Stream newStream = webReq.GetRequestStream();
newStream.Write(byteArray, 0, byteArray.Length);//写入参数
newStream.Close();
HttpWebResponse response = (HttpWebResponse)webReq.GetResponse();
StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
ret = sr.ReadToEnd();
sr.Close();
response.Close();
newStream.Close();
}
catch (Exception ex)
{
return ex.Message;
}
return ret;
}
最后是解析获得的json字符串,依旧是利用litjson做解析,还是挺简单的
// 获取到结果字符串
string result = PostWebRequest(url, requstData.ConverToJson());
JsonData dejson = JsonMapper.ToObject(result);
// 通过索引获得text
Debug.Log(dejson["text"].ToString());