Android應用記錄一:有道翻譯API調用

來源:互聯網
上載者:User

標籤:方式   tpc   rar   lock   翻譯   art   程式   pre   主線程   

因為某些原因,我需要記單詞,而且討厭廣告,所以就想著自己寫個能夠查自己不認識的單詞並且以後可以隨時查看的APP。

首先我需要調用一個翻譯API,中文翻譯比較好用的API有有道翻譯API,百度翻譯API等,因為先期用過百度地圖API,覺得很好用,所以我先查閱了百度翻譯API

覺得還不錯,因為我寫的APP是給自己用的,所以這肯定夠用,然後我就申請了一個API介面,當我看了文檔之後,百度為了安全的原因,在現版本的介面中加入了簽名,通過一定的輸入序列形成MD5序列,而這個感覺有點麻煩,雖然我後來試了下,可以用的,但是當時覺得時間不多,就轉而使用了有道翻譯API

首先要做的肯定是申請key,然後看了下API接入文檔,發現有道的API很簡單粗暴,其資料介面為:

http://fanyi.youdao.com/openapi.do?keyfrom=&key=&type=data&doctype=&version=1.1&q=要翻譯的文本

官方說明

版本:1.1,請求方式:get,編碼方式:utf-8
主要功能:中英互譯,同時獲得有道翻譯結果和有道詞典結果(可能沒有)
參數說明:
 type - 返回結果的類型,固定為data
 doctype - 返回結果的資料格式,xml或json或jsonp
 version - 版本,當前最新版本為1.1
 q - 要翻譯的文本,必須是UTF-8編碼,字元長度不能超過200個字元,需要進行urlencode編碼
 only - 選擇性參數,dict表示只擷取詞典資料,translate表示只擷取翻譯資料,預設為都擷取
 註: 詞典結果只支援中英互譯,翻譯結果支援英日韓法俄西到中文的翻譯以及中文到英語的翻譯
errorCode:
 0 - 正常
 20 - 要翻譯的文本過長
 30 - 無法進行有效翻譯
 40 - 不支援的語言類型
 50 - 無效的key
 60 - 無詞典結果,僅在擷取詞典結果生效

http://fanyi.youdao.com/openapi.do?keyfrom=<keyfrom>&key=<key>&type=data&doctype=json&version=1.1&q=good{    "errorCode":0    "query":"good",    "translation":["好"], // 有道翻譯    "basic":{ // 有道詞典-基本詞典        "phonetic":"g?d"        "uk-phonetic":"g?d" //英式發音        "us-phonetic":"ɡ?d" //美式發音        "explains":[            "好處",            "好的"            "好"        ]    },    "web":[ // 有道詞典-網路釋義        {            "key":"good",            "value":["良好","善","美好"]        },        {...}    ]}

 

 

其中我需要就更改q也就是需要查詢的對象就可以了,其他可以通過Java寫入String中
我的思路就是通過發送HTTP請求返回所需要的翻譯結果資料,然後對返回來的JSON進行解析就可以了,以下是我所使用的代碼

private void SentInquire(String q) {        HttpClient httpClient = new DefaultHttpClient();        String ServerUrl = urlString + q;        String data_backString = "";        HttpPost httpRequst = new HttpPost(ServerUrl);        try {            HttpResponse response = httpClient.execute(httpRequst);            if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {                data_backString = EntityUtils.toString(response.getEntity());//接收返回的資料                System.out.println(data_backString);                Log.i(TAG, "result = " + data_backString);                //以下為JSON資料解析                try {                    // JSONArray jsonArray = new JSONArray(data_backString);                    JSONObject jsonObject2 = new JSONObject(data_backString);                    // String string=jsonObject2.getString("translation");                    // receiveString=string;                     // JSONObject jsonObject3=new                    // JSONObject(jsonObject2.getString("basic"));                    JSONObject jsonObject3 = (JSONObject) jsonObject2                            .get("basic");                    receiveString = jsonObject3.getString("explains");                    JSONArray jsonArray1 = new JSONArray(receiveString);                    receiveString = "";                    for (int i = 0; i < jsonArray1.length(); i++) {                        receiveString += jsonArray1.getString(i) + "\n";                    }                    // String[] strarray=receiveString.split(",");                     /*                     * for (int i = 0; i < strarray.length; i++) { //String                     * mytemp                     * =strarray[i].substring(strarray[i].indexOf("‘"),strarray                     * [i].indexOf("‘")); receiveString+=mytemp+"\n"; }                     */                     JSONArray jsonArray = jsonObject2.getJSONArray("web");                    for (int i = 0; i < jsonArray.length(); i++) {                        JSONObject jsonObjectSon = (JSONObject) jsonArray                                .opt(i);                        receiveString += jsonObjectSon.getString("key");                         receiveString += ":";                        // String valueTemp=jsonObjectSon.getString("value");                        JSONArray valueArray = new JSONArray(                                jsonObjectSon.getString("value"));                        for (int j = 0; j < valueArray.length(); j++) {                            receiveString += valueArray.getString(j);                        }                        receiveString += "\n";                    }                    mHandler.sendEmptyMessage(0);                } catch (Exception e) {                    // TODO: handle exception                    e.printStackTrace();                    System.out.println("-----出現異常------");                }            }        } catch (Exception e) {            // TODO: handle exception        }     }

 

 

測試程式中返回來的JSON資料

{“translation”:[“協助”],”basic”:{“us-phonetic”:”h?lp”,”phonetic”:”help”,”uk-phonetic”:”help”,”explains”:[“n. 協助;補救辦法;幫忙者;有益的東西”,”vt. 協助;促進;治療;補救”,”vi. 協助;有用;招待”,”n. (Help)人名;(芬)海爾普”]},”query”:”help”,”errorCode”:0,”web”:[{“value”:[“協助”,”幫忙”,”協助文檔”],”key”:”Help”},{“value”:[“自取所需”,”自用”,”自己動手”],”key”:”help oneself”},{“value”:[“幫幫忙”,”幫個大忙”,”協助解決問題”],”key”:”Help out”}]}
解析JSON資料部分我從CSDN大神那兒學習的

特別注意一點,發送網路請求不能在主線程中進行,這是很多部落格沒有說明的,我們只需要開闢一個新的線程就可以了還有不能在該線程中直接對view進行修改,需要通過handler發送修改view例如在textview中顯示

這樣我應用的核心部分完成了
完整代碼

Android應用記錄一:有道翻譯API調用

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.