By 何明桂(http://blog.csdn.net/hmg25) 转载请注明出处
在给我们的Siri添加小I的接口之后,感觉它还是不够智能,无法像Iphone的Siri一样功能强大。可是国内我依旧没有找到一个能够强大如苹果Siri的服务器,所以只能退而求其次,我引入了”虫洞“的开放API,网站http://www.uzoo.cn/,这是一个功能很强大的接口,可以根据你提供的关键字进行网络搜索,反馈给你答案,官方上的描述:
·支持生活、教育、娱乐等最常使用的几十种功能;
·功能包括:公交、百科、提问、报价、翻译、快讯、歌词、余票……
·自动识别IP地址,查询公交、天气等功能时可以免输入关键词(城市名)
·可查询全国各地周边的餐馆、酒店、银行、学校、机关单位、娱乐场所……
·可选择推送流行IN语、生活小知识、笑话……
这个完全可以实现很智能的功能,但是有一个很致命的缺陷,由于太过智能了,不能实现基本的聊天功能,比如你发句”你好“,它就会在百度百科里给你搜索返回一个你好的详细解释。冏,
~_~!所以我们只好刚柔兼并,区分用于无聊调戏的聊天模式以及正常使用的问答模式。好啦,言归正传,今天我们就来实现用于问答模式的虫洞开放API~~详细信息请查询:
http://www.uzoo.cn/web201012/kaifangAPI.jsp
顺便提一句:他们官方QQ交流群里的人都很热情,特别是光年5号,哈哈,耐心回答了我很多问题,感谢一下~~~
虫洞的接口是开放的API,所以使用起来方便多了~
接口地址:
http://wap.unidust.cn/api/searchout.do
参数表:
是否必需 |
字段名 |
名称 |
类型 |
说明 |
是 |
info |
查询内容 |
Text |
查询内容,建议采取post方式传参 |
type |
请求类型 |
CHAR(6) |
web或者wap或者client |
|
ch |
渠道代码 |
CHAR(5) |
以区分请求来源 |
|
否 |
appid |
应用id |
CHAR(12) |
等同于分类关键字,若为空则后台自动进行判断 |
使用起来很简单:
private String WebAPI_Path= "http://wap.unidust.cn/api/searchout.do?type=wap&ch=1001&info=";
String strQuestion = WebAPI_Path+ question;
直接在开放的API接口后边添加问题,然后接收反馈就行了。
例如”http://wap.unidust.cn/api/searchout.do?type=wap&ch=1001&info=深圳时间“
需要特别注意下的是,反馈回来是数据是UTF-8格式的,所以对于反馈回来的数据需要进行下编码的转换:
String str = EntityUtils.toString(httpResponse.getEntity());
strResult = new String(str.getBytes("ISO-8859-1"), "UTF-8");
由于反馈回来的数据中包含一些不需要的数据,所以需要裁剪下:
public Spanned getAnswer(String question){
String result=getResult(question);
int firstIndex=result.indexOf("
")+"
".length();
int lastIndex=result.lastIndexOf("
");
return Html.fromHtml(result.substring(firstIndex,lastIndex));
}
这样就完成了虫洞这个接口的调用,更多复杂的功能,期待着你去开发~~
本文完整代码:
public class ChongDong {
private String WebAPI_Path = "http://wap.unidust.cn/api/searchout.do?type=wap&ch=1001&info=";
private HttpClient httpClient = null;
Handler mHandler;
private ProgressDialog mProgressDialog;
Context mContext;
public ChongDong(Context context,Handler handler){
mContext=context;
mHandler=handler;
}
public String getResult(String question) {
String strResult = null;
HttpParams httpParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParams, 30000);
HttpConnectionParams.setSoTimeout(httpParams, 30000);
httpClient = new DefaultHttpClient(httpParams);
try {
String strQuestion = WebAPI_Path + question;
HttpGet httpRequest = new HttpGet(strQuestion);
HttpResponse httpResponse = httpClient.execute(httpRequest);
if (httpResponse.getStatusLine().getStatusCode() == HttpURLConnection.HTTP_OK) {
String str = EntityUtils.toString(httpResponse.getEntity());
strResult = new String(str.getBytes("ISO-8859-1"), "UTF-8");
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
return strResult;
}
}
public Spanned getAnswer(String question){
String result=getResult(question);
int firstIndex=result.indexOf("
")+5;
// int secondIndex=result.indexOf("
", firstIndex)+5;
int lastIndex=result.lastIndexOf("
");
/*if(lastIndex>secondIndex)
return Html.fromHtml(result.substring(secondIndex,lastIndex));
else*/
return Html.fromHtml(result.substring(firstIndex,lastIndex));
}
public void handleAnswer(String question) {
mProgressDialog =new ProgressDialog(mContext);
mProgressDialog.setMessage("这个问题有点难,让我好好想想");
mProgressDialog.setCancelable(false);
mProgressDialog.show();
new ThreadProcess(question).start();
}
class ThreadProcess extends Thread
{
String question=null;
public ThreadProcess(String quest){
question=quest;
}
public void run() {
String result=getResult(question);
Message message = new Message();
message.what = 2013;
message.obj =getAnswer(result);
mHandler.sendMessage(message);
mProgressDialog.dismiss();
}
}
}