[UNIT] C#利用API调用UNIT
goJhou 发布于2017-10 浏览:40777 回复:55
7
收藏

以下是类内的静态变量。用于管理状态及TOKEN信息,SESSION信息。

// 调用getAccessToken()获取的 access_token建议根据expires_in 时间 设置缓存
        // 返回token示例
        public static readonly String TOKEN = getAccessToken();

        public static bool IsFinishedThisUnit;
        private static string sessionId="";
        private static bool first=true;

下面是一段 c#调用百度API接口,获取临时token值。

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

            HttpResponseMessage response = client.PostAsync(authHost, new FormUrlEncodedContent(paraList)).Result;
            String result = response.Content.ReadAsStringAsync().Result;
            //Console.WriteLine(result);
            JObject res = JObject.Parse(result);
            return res["access_token"].ToString();
        }

再根据TOKEN调用UNIT通用API接口获取返回json字符串并分析字符串指向的方法

public static JObject Unit_Send(string Content)
        {
            IsFinishedThisUnit = false;
            string host = "https://aip.baidubce.com/rpc/2.0/solution/v1/unit_utterance?access_token=" + TOKEN;
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host);
            request.Method = "post";
            request.ContentType = "application/json";
            request.KeepAlive = true;
            string str = "{\"scene_id\":【这里填入UNIT场景ID】,\"query\":\"" + Content + "\", \"session_id\":\"" + sessionId + "\"}"; // json格式
            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);
            JObject res = JObject.Parse(reader.ReadToEnd());
            if (res["error_code"] == null)
            {
                sessionId = res["result"]["session_id"].ToString();
                if (res["result"]["action_list"][0]["action_type"]["act_type"].ToString() == "satisfy")
                {
                    //意图完成
                    IsFinishedThisUnit = true;
                    return res;
                }
                else if (res["result"]["action_list"][0]["action_type"]["act_type"].ToString() == "clarify")
                {
                    //意图未完成
                    Console.Write(res["result"]["action_list"][0]["say"].ToString());
                    return null;
                }
                else
                {
                    //未知意图 可加本地日志记录逻辑 以后期扩充样本集
                    Console.Write("你到底想干嘛?");
                    return null;
                }
            }
            else
            {
                return null;
            }
        }
    }
收藏
点赞
7
个赞
共55条回复 最后由用户已被禁言回复于2022-04
#56goJhou回复于2018-11
#55 才能我浪费99回复
是啊,我也是十几年前用的这些工具

你多大呀

0
#55才能我浪费99回复于2018-11
#52 goJhou回复
那个连百度都没有的年代

是啊,我也是十几年前用的这些工具

0
#54才能我浪费99回复于2018-11
#51 荒墨丶迷失回复
这几个还真是一点都不熟悉 有些框架确实强大

Delphi好像已经没有谁用了

0
#53才能我浪费99回复于2018-11
#50 goJhou回复
现在基本都不怕大小了  一个游戏都几十g  程序大就大呗 稳定就好

是啊,不过还是很怀念当年想办法各种优化的时候

0
#52goJhou回复于2018-11
#51 荒墨丶迷失回复
这几个还真是一点都不熟悉 有些框架确实强大

那个连百度都没有的年代

0
#51荒墨丶迷失回复于2018-11
#46 才能我浪费99回复
是啊,怀念当年用 VC++,VB,Delphi直接编译原生程序的年代。现在的VC++好像生成的也是.Net的ByteCode
展开

这几个还真是一点都不熟悉 有些框架确实强大

1
#50goJhou回复于2018-11
#49 才能我浪费99回复
现在是这样,以前用VC编译成机器的原生可执行程序,可以编译的很小的。

现在基本都不怕大小了  一个游戏都几十g  程序大就大呗 稳定就好

0
#49才能我浪费99回复于2018-11
#48 goJhou回复
好像任何语言都需要平台的。你像用python也需要python运行库,用java也需要java j什么的好像叫jdk。哪怕js也要浏览器支撑、这是正常滴
展开

现在是这样,以前用VC编译成机器的原生可执行程序,可以编译的很小的。

0
#48goJhou回复于2018-11
#47 才能我浪费99回复
.NetFramework很讨厌的一点就是编译出来的东西很大

好像任何语言都需要平台的。你像用python也需要python运行库,用java也需要java j什么的好像叫jdk。哪怕js也要浏览器支撑、这是正常滴

0
#47才能我浪费99回复于2018-11
#45 goJhou回复
C#本身就是寄生在.Net之上的语言喔

.NetFramework很讨厌的一点就是编译出来的东西很大

0
#46才能我浪费99回复于2018-11
#45 goJhou回复
C#本身就是寄生在.Net之上的语言喔

是啊,怀念当年用 VC++,VB,Delphi直接编译原生程序的年代。现在的VC++好像生成的也是.Net的ByteCode

0
#45goJhou回复于2018-11
#44 才能我浪费99回复
C# 现在编译的程序必须装.Net Framework吧

C#本身就是寄生在.Net之上的语言喔

0
#44才能我浪费99回复于2018-11
#43 goJhou回复
标题里写了喔。c# windows平台开发

C# 现在编译的程序必须装.Net Framework吧

0
#43goJhou回复于2018-10
#42 Bzjgis回复
你一般用什么平台开发呢

标题里写了喔。c# windows平台开发

0
#42Bzjgis回复于2018-10

你一般用什么平台开发呢

0
#41goJhou回复于2018-08
#40 你口耐的妹儿回复
我这边执行的时候会返回error_code:0,有人遇到过吗。。

这是很老的代码版本了,请以文档中心为准

0
#40你口耐的妹儿回复于2018-08

我这边执行的时候会返回error_code:0,有人遇到过吗。。

0
#39goJhou回复于2018-06
#37 天武独尊回复
C#利用api接口写文字识别,有例子嘛? 大神,请教一下!!

文字识别可以去文字识别板块看一看喔

0
#38卡农LLLL回复于2018-06

什么样的文字识别.文字很多细分的类别

0
#37天武独尊回复于2018-06

C#利用api接口写文字识别,有例子嘛? 大神,请教一下!!

0
TOP
切换版块