慕课网《Android智能机器人“小慕”的实现》项目上手操作与代码解读【2】_移动开发_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > 移动开发 > 慕课网《Android智能机器人“小慕”的实现》项目上手操作与代码解读【2】

慕课网《Android智能机器人“小慕”的实现》项目上手操作与代码解读【2】

 2015/1/21 12:49:46  Anakin_cheng  程序员俱乐部  我要评论(0)
  • 摘要:前几天有点忙,一直没写第三方API是怎么调用的,今天我先介绍一下如何调用图灵机器人第三方API。一、图灵机器人API的调用首先登录图灵机器人官网首页http://www.tuling123.com/openapi/,注册一个账号,注册完以后登录,登录后就出现如下界面其中比较重要的是APIKEY,这是与申请账号是一一对应的,每一个账号有且只有一个APIKEY,这在后面的调用中会用到。左边一栏有功能选择、知识库、机器人调教和机器人设定等,这些完全可以根据个人喜好来设定
  • 标签:android 实现 代码 项目 操作 机器人 智能

  前几天有点忙,一直没写第三方API是怎么调用的,今天我先介绍一下如何调用图灵机器人第三方API。

一、图灵机器人API的调用

  首先登录图灵机器人官网首页http://www.tuling123.com/openapi/,注册一个账号,注册完以后登录,登录后就出现如下界面

  其中比较重要的是API KEY,这是与申请账号是一一对应的,每一个账号有且只有一个API KEY,这在后面的调用中会用到。左边一栏有功能选择、知识库、机器人调教和机器人设定等,这些完全可以根据个人喜好来设定,比较好玩的是你可以在此设定特定问题的回答,尤其是当整个项目做好之后,你可以把APK发给妹纸,然后让她问一下特定的问题,然后得到你设计好的回答,哈哈,是不是逼格很高啊,哈哈!

  好了,废话不多说,我们下面进入正题,看看究竟是如何调用的。其实调用的方法官网里面有介绍,首先点击右上角“平台接入”,可以看到请求方式

  由上图可见,请求方式是用的http get方法,其实就是到图灵机器人的服务器上用get方法拉数据,服务器响应后反馈给用户结果,也就是你的问题的回复,回复是json格式的,如果大家不知道json格式是啥样的,可以上网查一查。

  

  上图就是给出的返回参数和返回码的示例,我只是截取了一部分。从上面也可以大致了解到Json格式的大致样貌,个人感觉跟结构体有点像。。。返回码可以判断接口返回的数据是否正确。

  官网还给出了最最重要的调用示例,因为我们是开发Android程序,所以我们选择java调用方式

 

  其实很简单,就是把前面提到的API KEY和你所要发的信息(经过utf-8转码)封装成url,然后发送get请求得到服务器的响应。整个调用过程最主要的也就是这几句代码,那么下面我们就看看这部分代码的具体编写。

  首先,我们先创建一个工具类HttpUtils,这个工具类包含了发送get请求,接收数据过程以及将Json转化成Java对象的过程。

  首先写一个函数把请求参数封装起来:

private static String setParam(String msg) {
        String requesturl = "";
        try {
            requesturl = URL + "?key=" + APIKEY + "&info="
                    + URLEncoder.encode(msg, "utf-8");  //官网给出的需要的请求参数
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return requesturl;
    }

  这段代码就不用我解释了吧。。其实就是官网中的给出的方法。

  然后就是发送get请求并接收数据了

public static String doGet(String msg) {
        String result = "";
        String url = setParam(msg);             //调用setParam函数得到请求参数
        ByteArrayOutputStream baos = null;              //使用ByteArrayOutputStream输出流
        InputStream is = null;           //定义输入流
        try {
            java.net.URL realURL = new java.net.URL(url);       //创建url
            HttpURLConnection conn = (HttpURLConnection) realURL
                    .openConnection();               //打开连接
            conn.setReadTimeout(5 * 1000);            //设置读取时的超时值
            conn.setConnectTimeout(5 * 1000);       //设置连接超时值
            conn.setRequestMethod("GET");             //设置请求方式
            is = conn.getInputStream();    //设置输入流
            int len = -1;  
            byte[] bytes = new byte[128];  //设置缓冲区
            baos = new ByteArrayOutputStream();
            while ((len = is.read(bytes)) != -1) {  //从输入流读取数据存入缓冲区直到结束
                baos.write(bytes, 0, len);  //把数据从缓冲区写到输出流
            }
            baos.flush();   //刷新输出流
            result = new String(baos.toByteArray());  //将输出的字节流转化成byte数组

        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (baos != null) {  //关闭输出流
                try {
                    baos.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if (is != null) {
                try {
                    is.close();  //关闭输入流
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
        return result;
    }

 以上代码中用到了http get请求的发送方式以及输入输出流的一些用法, 如果读者们有不懂的地方可以上网查询一下这方面的资料,因为我不可能把里面每一个用到的知识点都写的很详细。通过查阅资料,大家至少可以掌握get请求发送方法以及输入输出流的一些知识和用法。

  由于收到的是Json格式的数据,还需将其转成Java对象才可以使用,此处的方法有很多,我们这里采用的是用gson将json转成java的方法。时间有限,具体的一些细节我下次再写吧,大家可以给我多提点意见。

发表评论
用户名: 匿名