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

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

  1. 慕课网-Java入门第一季-6-7 使用 Arrays 类操作 Java 中的数组

    来源:http://www.imooc.com/code/1556 Arrays 类是 Java 中提供的一个工具类,在 java.util 包中.该类中包含了一些方法用来直接操作数组,比如可直接实现 ...

  2. 慕课网c#开发轻松入门6-8最终项目

    下面是一些同学的姓名和对应的考试分数,请输出他们的平均分和高于平均分的同学姓名. 运行效果如下: using System; using System.Collections.Generic; usi ...

  3. newbee-mall开源项目被慕课网拿去做课程,然后我毫不知情,这又是什么骚操作?

    万万没想到,这种事情会发生在我身上. 之前写过<开源囧事>系列而且已经写了四篇,四次开源囧事如下: <开源囧事(一)捅娄子了,写个bug被国家信息安全漏洞共享平台抓到了?> & ...

  4. 【小尝试】Java获取慕课网原有路径课程列表

    作为一个老慕课网(https://www.imooc.com/)粉丝,还记得最开始的慕课网有很多免费的路径课程,练习什么的也特别详细,是入门一门语言的好方法. 现在慕课网发展起来了收费模式,添加了很多 ...

  5. 07慕课网《进击Node.js基础(一)》HTTP小爬虫

    获取HTML页面 var http = require('http') var url='http://www.imooc.com/learn/348' http.get(url,function(r ...

  6. 慕课网4-2 编程练习:jQuery祖先后代选择器小案例

    4-2 编程练习 结合所学的祖先后代选择器,实现如下图所示效果 任务 (1)使用祖先后代选择器将第二段文字背景色变成红色 (2)使用jQuery的.css()方法设置样式,语法css('属性 '属性值 ...

  7. 慕课网视频破解付费分享-前端开发-Python等

    微信小程序 慕课网   BAT大牛经验总结全面深入解读Android面试   前端JS基础面试技巧   vue2.0+node.js+mongodb全栈打造商城   Vue.js高级实战-开发移动端音 ...

  8. java网络爬虫----------简单抓取慕课网首页数据

    © 版权声明:本文为博主原创文章,转载请注明出处 一.分析 1.目标:抓取慕课网首页推荐课程的名称和描述信息 2.分析:浏览器F12分析得到,推荐课程的名称都放在class="course- ...

  9. 安卓开发_慕课网_Fragment实现Tab(App主界面)

    学习内容来自“慕课网” 这里用Fragment来实现APP主界面 思路: 底部横向排列4个LinearLayout,每个LinearLayout包含一个图片按钮和一个文字 1.默认显示第一个功能(微信 ...

随机推荐

  1. 基于SSH的数据库中图片的读写

    近期项目中遇到了这个问题,网上查了一些资料所谓是零零散散,这里写篇博文做个笔记. 注:这篇博文中部分类的属性声明未列出,应该不算难,基本都是以private 类型 名称 格式声明,然后配getter ...

  2. 案例:我行我素购物系统 v1.1

    系统逻辑结构: import java.util.Scanner; public class ShoppingSystem { public static void main(String[] arg ...

  3. Shell 脚本模拟 milter 实现黑白名单及关键词过滤

    程序执行流程:1. 开始接受邮件.2. 检查发件人是否在黑名单内,如果是拒绝接受;否则继续3. 检查发件人是否在白名单内,如果是接收邮件;否则继续4. 对邮件进行关键字过滤,如果邮件中包含被过滤的关键 ...

  4. 码表 ASCII Unicode GBK UTF-8

    2017-1-3 [ASCII]一个字节(7位,128个字符,2个16进制) 不包含中文 ASCII(American Standard Code for Information Interchang ...

  5. IIS相关问题

    问题:使用vs开发项目完成后,发布在本地IIS上,访问链接出现如下情况: 解决方案:打开IIS--->>

  6. Dedecms当前位置{dede:field name='position'/}修改

    这个实在list_article.htm模板出现的,而这个模板通过loadtemplage等等一系列操作是调用的include 下的arc.archives.class.php $this->F ...

  7. 【转】NSString / NSData / char* 类型之间的转换

    原文 :http://www.cnblogs.com/pengyingh/articles/2341880.html NSString 转换成NSData 对象 NSData* xmlData = [ ...

  8. Solution(项目部署):The server does not support version 3.0 of the J2EE Web module specification

    1.错误: 在eclipse中使用run->run on server的时候,选择tomcat6会报错误:The server does not support version 3.0 of t ...

  9. ASP.NET中实现页面间数据传递的方法

    说到页面间数据传递,很多人都会想到通过像Session这样的全局变量,但是向Session中添加的东西太多会增加服务器的压力,页面间数据传递,数据的作用范围越小越好.   ASP.NET页面间数据传递 ...

  10. FindBugs的Eclipse插件安装与使用

    1.FindBugs介绍 FindBugs是一款Java静态代码分析工具,与其他静态分析工具(如Checkstyle和PMD)不同,FindBugs 不注重样式或者格式,它专注于寻找真正的缺陷或者潜在 ...