慕课网《Android智能机器人“小慕”的实现》项目上手操作与代码解读【2】
前几天有点忙,一直没写第三方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】的更多相关文章
- 慕课网-Java入门第一季-6-7 使用 Arrays 类操作 Java 中的数组
来源:http://www.imooc.com/code/1556 Arrays 类是 Java 中提供的一个工具类,在 java.util 包中.该类中包含了一些方法用来直接操作数组,比如可直接实现 ...
- 慕课网c#开发轻松入门6-8最终项目
下面是一些同学的姓名和对应的考试分数,请输出他们的平均分和高于平均分的同学姓名. 运行效果如下: using System; using System.Collections.Generic; usi ...
- newbee-mall开源项目被慕课网拿去做课程,然后我毫不知情,这又是什么骚操作?
万万没想到,这种事情会发生在我身上. 之前写过<开源囧事>系列而且已经写了四篇,四次开源囧事如下: <开源囧事(一)捅娄子了,写个bug被国家信息安全漏洞共享平台抓到了?> & ...
- 【小尝试】Java获取慕课网原有路径课程列表
作为一个老慕课网(https://www.imooc.com/)粉丝,还记得最开始的慕课网有很多免费的路径课程,练习什么的也特别详细,是入门一门语言的好方法. 现在慕课网发展起来了收费模式,添加了很多 ...
- 07慕课网《进击Node.js基础(一)》HTTP小爬虫
获取HTML页面 var http = require('http') var url='http://www.imooc.com/learn/348' http.get(url,function(r ...
- 慕课网4-2 编程练习:jQuery祖先后代选择器小案例
4-2 编程练习 结合所学的祖先后代选择器,实现如下图所示效果 任务 (1)使用祖先后代选择器将第二段文字背景色变成红色 (2)使用jQuery的.css()方法设置样式,语法css('属性 '属性值 ...
- 慕课网视频破解付费分享-前端开发-Python等
微信小程序 慕课网 BAT大牛经验总结全面深入解读Android面试 前端JS基础面试技巧 vue2.0+node.js+mongodb全栈打造商城 Vue.js高级实战-开发移动端音 ...
- java网络爬虫----------简单抓取慕课网首页数据
© 版权声明:本文为博主原创文章,转载请注明出处 一.分析 1.目标:抓取慕课网首页推荐课程的名称和描述信息 2.分析:浏览器F12分析得到,推荐课程的名称都放在class="course- ...
- 安卓开发_慕课网_Fragment实现Tab(App主界面)
学习内容来自“慕课网” 这里用Fragment来实现APP主界面 思路: 底部横向排列4个LinearLayout,每个LinearLayout包含一个图片按钮和一个文字 1.默认显示第一个功能(微信 ...
随机推荐
- 第二篇:R语言数据可视化之数据塑形技术
前言 绘制统计图形时,半数以上的时间会花在调用绘图命令之前的数据塑型操作上.因为在把数据送进绘图函数前,还得将数据框转换为适当格式才行. 本文将给出使用R语言进行数据塑型的一些基本的技巧,更多技术细节 ...
- Codeforces 540D Bad Luck Island - 概率+记忆化搜索
[题意] 一个岛上有三种生物A,B,C,各有多少只在输入中会告诉你,每种最多100只 A与B碰面,A会吃掉B, B与C碰面,B会吃掉C, C与A碰面,C会吃掉A...忍不住想吐槽这种环形食物链 碰面是 ...
- WPF DataGrid 绑定DataSet数据 自动生成行号
1.绑定数据:dataGrid1.ItemsSource = dataSet.Tables[0].DefaultView; 注意:在创建DataGrid 时可以通过AutoGenerateColumn ...
- (一)SAPI简述
SAPI,软件中的语音技术包括两方面的内容,一个是语音识别(speech recognition) 和语音合成(speech synthesis).这两个技术都需要语音引擎的支持. 下面我们来了解下基 ...
- jquery get checkbox inside element(td).
<td id="skill"><input name="skill" type="checkbox" value=&quo ...
- C#简单一句代码,实现pictureBox的照片另存为磁盘文件不出错
开发人事档案系统时,一般都要利用pictureBox对人员的照片进行操作,包括选择保存照片.另存照片.删除照片,如下图: 将照片保存到数据库和从数据库中删除,网友写了很多实用代码,非常好用.但是要将p ...
- centos 6.X 安装输入法
1.打开终端 su 输入 密码 yum install "@Chinese Support" 2.接下来是启用中文输入法的操作 系统 ->首选项 ->输入法 3.在弹出 ...
- Java安全发布的理解
看<Java并发编程实战>遇到如下问题 代码: /** * Created by yesiming on 16/11/11. */public class Holder { private ...
- 跟我学android- 创建运行环境(二)
Android程序 需要在Android手机上运行,因此 Android开发时 必须准备相关运行,调试环境. Android真机(建议使用真机,速度快,效果好) Android虚拟设备(AVD) 使用 ...
- C#实现的异步Socket服务器
介绍 我最近需要为一个.net项目准备一个内部线程通信机制. 项目有多个使用ASP.NET,Windows 表单和控制台应用程序的服务器和客户端构成. 考虑到实现的可能性,我下定决心要使用原生的soc ...