unity +百度UNIT

百度UNIT 的 API使用理解

具体理解如下

  1. 创建:UNIT API
    • UNIT智能对话平台快速搭建智能对话机器人(这里百度智能对话定制与服务平台文档中心有详细的配置视频)。
  2. 掌握:对话API接口3.0的基本使用
    • Access Token获取”
      Access Token获取理解:通过POST请求完成HTTP API调用。就是告诉百度:百度你很荣幸获得我的宠幸,我要使用你的在线API。

    • UNIT API的调用
      UNIT API的调用理解:就是JSON文件的封装(他配叫封装吗?)和解析。就是按照百度的要求,上传一个JSON文件(一个请求,如:你好),百度给你返回一个JSON文件(一个应答,如:我听不懂你说什么);上传JSON文件中包含一些是必须的,一些是选填的,但是格式符合百度要求。

    • unity,unity这里没有什么说的,当作组件挂上就行了。

    • 如果理解偏差请指正,如果说的不好,别喷就好!

过程步骤

创建UNIT

登录百度自行创建

Access Token获取

不想看可以跳过!!!建议看看!!!!


using System;
using System.Collections.Generic;
using System.Net.Http;

namespace com.baidu.ai
{
	public static class AccessToken

	{
	    // 调用getAccessToken()获取的 access_token建议根据expires_in 时间 设置缓存
	    // 返回token示例
		public static String TOKEN = "24.adda70c11b9786206253ddb70affdc46.2592000.1493524354.282335-1234567";

        // 百度云中开通对应服务应用的 API Key 建议开通应用的时候多选服务
		private static String clientId = "百度云应用的AK";
		// 百度云中开通对应服务应用的 Secret Key
		private static String clientSecret = "百度云应用的SK";

		public static String getAccessToken() {
			String authHost = "https://aip.baidubce.com/oauth/2.0/token";
			HttpClient client = new HttpClient();
			List<KeyValuePair<String, String>> paraList = new List<KeyValuePair<string, string>>();
			paraList.Add(new KeyValuePair<string, string>("grant_type", "client_credentials"));
			paraList.Add(new KeyValuePair<string, string>("client_id", clientId));
			paraList.Add(new KeyValuePair<string, string>("client_secret", clientSecret));

			HttpResponseMessage response = client.PostAsync(authHost, new FormUrlEncodedContent(paraList)).Result;
			String result = response.Content.ReadAsStringAsync().Result;
			Console.WriteLine(result);
			return result;
		}
	}
}

UNIT API的调用

不想看可以跳过!!!建议看看!!!!


using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Text;
using System.Web.Script.Serialization;
using System.Net.Http;
namespace com.baidu.ai
{
    public class Utterance
    {
        // unit对话接口
        public static string unit_utterance()
        {
            string token = "#####调用鉴权接口获取的token#####";
            string host = "https://aip.baidubce.com/rpc/2.0/unit/service/v3/chat?access_token=" + token;
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host);
            request.Method = "post";
            request.ContentType = "application/json";
            request.KeepAlive = true;
            //str 是传入的json文件
            string str = "{"version":"3.0","service_id":"S10000","session_id":"","log_id":"7758521","request":{"terminal_id":"88888","query":"你好"}}"; // json格式  s100000是你机器人的ID需要改  你好 是传入的对话
            byte[] buffer = Encoding.UTF8.GetBytes(str);
            request.ContentLength = buffer.Length;
            request.GetRequestStream().Write(buffer, 0, buffer.Length);
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
            //result 是返回的json文件
            string result = reader.ReadToEnd();
            Console.WriteLine("对话接口返回:");
            Console.WriteLine(result);
            return result;
        }
    }
}

Unity

如果你Unity 少包:window->Package Manger->Unity Registry(右侧搜索);但是基本上应该不少啊!此不详述。
Unity 挂脚本,不用搭建场景,挂载到相机上就行。

源码

改动API 相关 已经标注!!!

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Net.Http;
using System.Text;
using UnityEngine;

public class baiduai_02 : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        //获取认证
        // String accessToken = AccessToken.getAccessToken();
        //调用接口chart接口
        Utterance.unit_utterance();
    }

    // Update is called once per frame
    void Update()
    {
    }
	public static class AccessToken
	{
		// 调用getAccessToken()获取的 access_token建议根据expires_in 时间 设置缓存
		// 返回token示例
		public static String TOKEN = "24.adda70c11b9786206253ddb70affdc46.2592000.1493524354.282335-1234567";
		// 百度云中开通对应服务应用的 API Key 建议开通应用的时候多选服务
		private static String clientId = "自己的";
		// 百度云中开通对应服务应用的 Secret Key
		private static String clientSecret = "自己的";
		public static String getAccessToken()
		{
			String authHost = "https://aip.baidubce.com/oauth/2.0/token";
			HttpClient client = new HttpClient();
			List<KeyValuePair<String, String>> paraList = new List<KeyValuePair<string, string>>();
			paraList.Add(new KeyValuePair<string, string>("grant_type", "client_credentials"));
			paraList.Add(new KeyValuePair<string, string>("client_id", clientId));
			paraList.Add(new KeyValuePair<string, string>("client_secret", clientSecret));
			HttpResponseMessage response = client.PostAsync(authHost, new FormUrlEncodedContent(paraList)).Result;
			String result = response.Content.ReadAsStringAsync().Result;
			Console.WriteLine(result);
			Debug.Log(result);
            //TOKEN = result;
			return result;
		}
    }
    public  class Utterance
    {
        // unit对话接口
        public static string unit_utterance()
        {
            JObject jo = (JObject)JsonConvert.DeserializeObject(AccessToken.getAccessToken());
            string token = jo["access_token"].ToString();
            //string message = jo["Message"].ToString();
            // string token = AccessToken.getAccessToken();//token已经获取
            string host = "https://aip.baidubce.com/rpc/2.0/unit/service/v3/chat?access_token=" + token;
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host);
            request.Method = "post";
            request.ContentType = "application/json";
            request.KeepAlive = true;
            //改成自己的!
            string wen = "承德今天天气";
            string str = "{\"version\":\"3.0\",\"service_id\":\"S10000\",\"session_id\":\"\",\"log_id\":\"7758521\",\"request\":{\"terminal_id\":\"88888\",\"query\":\""+wen+"\"}}"; // json格式  S10000 需要自己的!
            byte[] buffer = Encoding.UTF8.GetBytes(str);
            request.ContentLength = buffer.Length;
            request.GetRequestStream().Write(buffer, 0, buffer.Length);
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
            string result = reader.ReadToEnd();
            Console.WriteLine("对话接口返回:");
           // Debug.Log("________json________result______________________"+result);//看一下json格式
            Console.WriteLine(result);
            //解析json
            /*
            1.Json字符串嵌套格式解析
            string jsonText = "{\"beijing\":{\"zone\":\"海淀\",\"zone_en\":\"haidian\"}}";
            JObject jo = (JObject)JsonConvert.DeserializeObject(jsonText);
            string zone = jo["beijing"]["zone"].ToString();
            string zone_en = jo["beijing"]["zone_en"].ToString();       
            2.Json字符串数组格式解析
            string jsonArrayText = "[{'a':'a1','b':'b1'},{'a':'a2','b':'b2'}]"; //"[{'a':'a1','b':'b1'}]即使只有一个元素,也需要加上[]
            string jsonArrayText = "[{\"a\":\"a1\",\"b\":\"b1\"},{\"a\":\"a2\",\"b\":\"b2\"}]";  //上面写法和此写法效果一样
            JArray jArray = (JArray)JsonConvert.DeserializeObject(jsonArrayText);//jsonArrayText必须是带[]数组格式字符串
            string str = jArray[0]["a"].ToString();
             */
            //Json字符串嵌套格式解析
            Debug.Log(result);
            JObject jresult = (JObject)JsonConvert.DeserializeObject(result);
            string sjresult = jresult["result"]["responses"].ToString();
            Debug.Log(sjresult);
            
            //Json字符串数组格式解析
            JArray jArray = (JArray)JsonConvert.DeserializeObject(sjresult);
            string jactions = jArray[0]["actions"].ToString();
            Debug.Log(jactions);
            
            //Json字符串数组格式解析
            JArray jArray1 = (JArray)JsonConvert.DeserializeObject(jactions);
            string jactions1 = jArray1[0]["say"].ToString();   
            Debug.Log(jactions1);
            //咏鹅,唐,骆宾王。鹅鹅鹅,曲项向天歌。白毛浮绿水,红掌拨清波。
            ///另外一种解析方式:///
            /*            
                JObject resultObj = (JObject)JsonConvert.DeserializeObject(result);
                string actions = resultObj["result"]["responses"].ToString();

                JArray sayObj = (JArray)JsonConvert.DeserializeObject(actions);
                string responses = sayObj[0].ToString();
            //区别处:
                JObject actionsObj = (JObject)JsonConvert.DeserializeObject(responses);
                string sayobj = actionsObj.GetValue("actions")[0].ToString();

                JObject ac = (JObject)JsonConvert.DeserializeObject(sayobj);
                string acc = ac.GetValue("say").ToString();
            */
            return result;
        }
    }
}

效果

如图
在这里插入图片描述
具体说的不明白的请 自行百度理解,他说的很详细

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值