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("<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();
}
}
}