前几天有点忙,一直没写第三方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的方法。时间有限,具体的一些细节我下次再写吧,大家可以给我多提点意见。