打造Android的中文Siri语音助手(二)——添加虫洞的开放API

在给我们的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());  
ult = new String(str.getBytes("ISO-8859-1"), "UTF-8");  


由于反馈回来的数据中包含一些不需要的数据,所以需要裁剪下:

public Spanned getAnswer(String question){  
String  result=getResult(question);  
int  firstIndex=result.indexOf("<br/>")+"<br/>".length();  
int  lastIndex=result.lastIndexOf("<br/>");  
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("<br/>")+5;  
    //  int secondIndex=result.indexOf("<br/>", firstIndex)+5;  
        int lastIndex=result.lastIndexOf("<br/>");  
        /*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();  
        }    
       }  
} 


原文地址:点击打开链接

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值