码迷,mamicode.com
首页 > 移动开发 > 详细

安卓--有道词典

时间:2015-06-18 23:31:39      阅读:344      评论:0      收藏:0      [点我收藏+]

标签:

第一步:想要实现有道词典的开发,你必须申请一个API Key,申请链接http://fanyi.youdao.com/openapi。

什么是有道翻译API?

有道翻译API,为广大开发者提供开放接口。您的应用或网站可通过有道翻译API,构建丰富多样的功能或应用,为用户带来即时,准确,方便的查词或翻译体验,从而降低语言理解与应用门槛。

依靠有道翻译网络数据挖掘和统计机器翻译技术实力做基础,加上您的智慧,将创造出更优良的体验和创新的功能。

2:利用数据接口获得数据:

  『1』版本:1.1  

  『2』  网页请求方式:get 

  『3』编码方式:utf-8

  『4』主要功能:中英互译,同时获得有道翻译结果和有道词典结果(可能没有)

  『5』参数说明:

   type - 返回结果的类型,固定为data

  doctype - 返回结果的数据格式,xml或json或jsonp

  version - 版本,当前最新版本为1.1

  q - 要翻译的文本,不能超过200个字符,需要使用utf-8编码

errorcode:

 0 - 正常

 20 - 要翻译的文本过长

 30 - 无法进行有效的翻译

 40 - 不支持的语言类型

 50 - 无效的key

json数据格式举例

 1     http://fanyi.youdao.com/openapi.do?keyfrom=<keyfrom>&key=<key>&type=data&doctype=json&version=1.1&q=翻译  
 2     {  
 3         "errorCode":0  
 4         "query":"翻译",  
 5         "translation":["translation"], // 有道翻译  
 6         "basic":{ // 有道词典-基本词典  
 7             "phonetic":"fān yì",  
 8             "explains":[  
 9                 "translate",  
10                 "interpret"  
11             ]  
12         },  
13         "web":[ // 有道词典-网络释义  
14             {  
15                 "key":"翻译",  
16                 "value":["translator","translation","translate","Interpreter"]  
17             },  
18             {...}  
19         ]  
20     }  

xml数据格式:

  1 本博文只是实现有道词典的功能,并着重界面。
  2 
  3 首先,你需要获取有道开发平台的API key。点击打开链接 申请一个吧。
  4 
  5 
  6 
  7 利用数据接口获取数据:
  8 
  9 版本:1.1,请求方式:get,编码方式:utf-8
 10 
 11 主要功能:中英互译,同时获得有道翻译结果和有道词典结果(可能没有)
 12 
 13 参数说明:
 14 
 15  type - 返回结果的类型,固定为data
 16 
 17  doctype - 返回结果的数据格式,xml或json或jsonp
 18 
 19  version - 版本,当前最新版本为1.1
 20 
 21  q - 要翻译的文本,不能超过200个字符,需要使用utf-8编码
 22 
 23 errorCode:
 24 
 25  0 - 正常
 26 
 27  20 - 要翻译的文本过长
 28 
 29  30 - 无法进行有效的翻译
 30 
 31  40 - 不支持的语言类型
 32 
 33  50 - 无效的key
 34 
 35 返回的样本:
 36 
 37 json数据格式举例
 38 
 39     http://fanyi.youdao.com/openapi.do?keyfrom=<keyfrom>&key=<key>&type=data&doctype=json&version=1.1&q=翻译  
 40     {  
 41         "errorCode":0  
 42         "query":"翻译",  
 43         "translation":["translation"], // 有道翻译  
 44         "basic":{ // 有道词典-基本词典  
 45             "phonetic":"fān yì",  
 46             "explains":[  
 47                 "translate",  
 48                 "interpret"  
 49             ]  
 50         },  
 51         "web":[ // 有道词典-网络释义  
 52             {  
 53                 "key":"翻译",  
 54                 "value":["translator","translation","translate","Interpreter"]  
 55             },  
 56             {...}  
 57         ]  
 58     }  
 59 
 60 复制代码
 61 
 62 
 63 xml数据格式举例
 64 
 65     http://fanyi.youdao.com/openapi.do?keyfrom=<keyfrom>&key=<key>&type=data&doctype=xml&version=1.1&q=这里是有道翻译API  
 66     <?xml version="1.0" encoding="UTF-8"?>  
 67     <youdao-fanyi>  
 68         <errorCode>0</errorCode>  
 69         <!-- 有道翻译 -->  
 70         <query><![CDATA[这里是有道翻译API]]></query>  
 71         <translation>  
 72             <paragraph><![CDATA[Here is the youdao translation API]]></paragraph>  
 73         </translation>  
 74     </youdao-fanyi>  
 75 
 76 复制代码
 77 
 78 
 79 jsonp数据格式举例
 80 
 81     http://fanyi.youdao.com/openapi.do?keyfrom=<keyfrom>&key=<key>&type=data&doctype=jsonp&callback=show&version=1.1&q=API  
 82     show({  
 83         "errorCode":0  
 84         "query":"API",  
 85         "translation":["API"], // 有道翻译  
 86         "basic":{ // 有道词典-基本词典  
 87             "explains":[  
 88                 "abbr. 应用程序界面(Application Program Interface);..."  
 89             ]  
 90         },  
 91         "web":[ // 有道词典-网络释义  
 92             {  
 93                 "key":"API",  
 94                 "value":["应用程序接口(Application Programming Interface)","应用编程接口","应用程序编程接口","美国石油协会"]  
 95             },  
 96             {...}  
 97         ]  
 98     });  
 99 
100 复制代码
101 
102 
103 具体实现:
104 
105     <font size="3" color="#000000" face="微软雅黑">package xiaosi.youdao;  
106       
107     import org.apache.http.HttpResponse;  
108     import org.apache.http.client.methods.HttpGet;  
109     import org.apache.http.impl.client.DefaultHttpClient;  
110     import org.apache.http.util.EntityUtils;  
111     import org.json.JSONArray;  
112     import org.json.JSONObject;  
113       
114     import android.app.Activity;  
115     import android.os.Bundle;  
116     import android.view.View;  
117     import android.view.View.OnClickListener;  
118     import android.widget.Button;  
119     import android.widget.EditText;  
120     import android.widget.TextView;  
121     import android.widget.Toast;  
122       
123     public class YoudaoActivity extends Activity  
124     {  
125         private EditText    edit                = null;  
126         private Button      search              = null;  
127         private TextView    text                = null;  
128         private String      YouDaoBaseUrl       = "http://fanyi.youdao.com/openapi.do";  
129         private String      YouDaoKeyFrom       = "MyLifes";  
130         private String      YouDaoKey           = "你申请的API Key";  
131         private String      YouDaoType          = "data";  
132         private String      YouDaoDoctype       = "json";  
133         private String      YouDaoVersion       = "1.1";  
134         @Override  
135         public void onCreate(Bundle savedInstanceState)  
136         {  
137             super.onCreate(savedInstanceState);  
138             setContentView(R.layout.main);  
139             init();  
140         }  
141       
142         private void init()  
143         {  
144             edit = (EditText) findViewById(R.id.edit);  
145             search = (Button) findViewById(R.id.search);  
146             search.setOnClickListener(new searchListener());  
147             text = (TextView) findViewById(R.id.text);  
148         }  
149       
150         private class searchListener implements OnClickListener  
151         {  
152             @Override  
153             public void onClick(View v)  
154             {  
155                 String YouDaoSearchContent = edit.getText().toString().trim();  
156                 String YouDaoUrl = YouDaoBaseUrl+"?keyfrom=" + YouDaoKeyFrom + "&key=" + YouDaoKey + "&type=" + YouDaoType + "&doctype="  
157                         + YouDaoDoctype + "&type=" + YouDaoType + "&version=" + YouDaoVersion + "&q=" + YouDaoSearchContent;  
158                 try  
159                 {  
160                     AnalyzingOfJson(YouDaoUrl);  
161                 }  
162                 catch (Exception e)  
163                 {  
164                     e.printStackTrace();  
165                 }  
166             }  
167         }  
168       
169         private void AnalyzingOfJson(String url) throws Exception  
170         {  
171             // 第一步,创建HttpGet对象  
172             HttpGet httpGet = new HttpGet(url);  
173             // 第二步,使用execute方法发送HTTP GET请求,并返回HttpResponse对象  
174             HttpResponse httpResponse = new DefaultHttpClient().execute(httpGet);  
175             if (httpResponse.getStatusLine().getStatusCode() == 200)  
176             {  
177                 // 第三步,使用getEntity方法活得返回结果  
178                 String result = EntityUtils.toString(httpResponse.getEntity());  
179                 System.out.println("result:" + result);  
180                 JSONArray jsonArray = new JSONArray("[" + result + "]");  
181                 String message = null;  
182                 for (int i = 0; i < jsonArray.length(); i++)  
183                 {  
184                     JSONObject jsonObject = jsonArray.getJSONObject(i);  
185                     if (jsonObject != null)  
186                     {  
187                         String errorCode = jsonObject.getString("errorCode");  
188                         if (errorCode.equals("20"))  
189                         {  
190                             Toast.makeText(getApplicationContext(), "要翻译的文本过长", Toast.LENGTH_SHORT);  
191                         }  
192                         else if (errorCode.equals("30 "))  
193                         {  
194                             Toast.makeText(getApplicationContext(), "无法进行有效的翻译", Toast.LENGTH_SHORT);  
195                         }  
196                         else if (errorCode.equals("40"))  
197                         {  
198                             Toast.makeText(getApplicationContext(), "不支持的语言类型", Toast.LENGTH_SHORT);  
199                         }  
200                         else if (errorCode.equals("50"))  
201                         {  
202                             Toast.makeText(getApplicationContext(), "无效的key", Toast.LENGTH_SHORT);  
203                         }  
204                         else  
205                         {  
206                             // 要翻译的内容  
207                             String query = jsonObject.getString("query");  
208                             message = query;  
209                             // 翻译内容  
210                             String translation = jsonObject.getString("translation");  
211                             message += "\t" + translation;  
212                             // 有道词典-基本词典  
213                             if (jsonObject.has("basic"))  
214                             {  
215                                 JSONObject basic = jsonObject.getJSONObject("basic");  
216                                 if (basic.has("phonetic"))  
217                                 {  
218                                     String phonetic = basic.getString("phonetic");  
219                                     message += "\n\t" + phonetic;  
220                                 }  
221                                 if (basic.has("phonetic"))  
222                                 {  
223                                     String explains = basic.getString("explains");  
224                                     message += "\n\t" + explains;  
225                                 }  
226                             }  
227                             // 有道词典-网络释义  
228                             if (jsonObject.has("web"))  
229                             {  
230                                 String web = jsonObject.getString("web");  
231                                 JSONArray webString = new JSONArray("[" + web + "]");  
232                                 message += "\n网络释义:";  
233                                 JSONArray webArray = webString.getJSONArray(0);  
234                                 int count = 0;  
235                                 while(!webArray.isNull(count)){  
236                                      
237                                     if (webArray.getJSONObject(count).has("key"))  
238                                     {  
239                                         String key = webArray.getJSONObject(count).getString("key");  
240                                         message += "\n\t<"+(count+1)+">" + key;  
241                                     }  
242                                     if (webArray.getJSONObject(count).has("value"))  
243                                     {  
244                                         String value = webArray.getJSONObject(count).getString("value");  
245                                         message += "\n\t   " + value;  
246                                     }  
247                                     count++;  
248                                 }  
249                             }  
250                         }  
251                     }  
252                 }  
253                 text.setText(message);  
254             }  
255             else  
256             {  
257                 Toast.makeText(getApplicationContext(), "提取异常", Toast.LENGTH_SHORT);  
258             }  
259         }  
260     }  </font>
261 
262 复制代码
263 
264 
265 main.xml
266 
267     <font size="3" color="#000000" face="微软雅黑">
268     <?xml version="1.0" encoding="utf-8"?>  
269     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
270         android:layout_width="fill_parent"  
271         android:layout_height="fill_parent"  
272         android:orientation="vertical"   
273         android:background="@drawable/a">  
274       
275         <EditText  
276             android:id="@+id/edit"  
277             android:layout_width="fill_parent"  
278             android:layout_height="wrap_content"  
279             android:hint="输入你要查询的内容......" />  
280       
281         <Button  
282             android:id="@+id/search"  
283             android:layout_width="wrap_content"  
284             android:layout_height="wrap_content"  
285             android:hint="查询" />  
286       
287         <ScrollView  
288             android:layout_width="fill_parent"  
289             android:layout_height="wrap_content"  
290             android:scrollbars="none" >  
291       
292             <TextView  
293                 android:id="@+id/text"  
294                 android:layout_width="fill_parent"  
295                 android:layout_height="wrap_content"   
296                 android:textColor="#000000"/>  
297         </ScrollView>  
298       
299     </LinearLayout>  
300     </font>
301 
302 复制代码

下面是具体的实现过程:

1:activity_mian.xml:

 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:background="@drawable/a"
 6     android:paddingBottom="@dimen/activity_vertical_margin"
 7     android:paddingLeft="@dimen/activity_horizontal_margin"
 8     android:paddingRight="@dimen/activity_horizontal_margin"
 9     android:paddingTop="@dimen/activity_vertical_margin"
10     tools:context=".MainActivity" >
11     <EditText
12         android:id="@+id/etWord"
13         android:layout_width="wrap_content"
14         android:layout_height="wrap_content"
15         android:layout_alignParentLeft="true"
16         android:layout_alignParentTop="true"
17         android:layout_marginTop="27dp"
18         android:background="@android:drawable/edit_text"
19         android:ems="10"
20         android:singleLine="true"
21         android:textColor="#552006"
22         android:textColorHint="#782f10" >
23         <requestFocus />
24     </EditText>
25     <WebView
26         android:id="@+id/wvSearchResult"
27         android:layout_width="match_parent"
28         android:layout_height="match_parent"
29         android:layout_alignLeft="@+id/etWord"
30         android:layout_below="@+id/etWord"
31         android:layout_marginTop="22dp"
32         android:background="@drawable/bg_roundcorner"
33         android:textAppearance="?android:attr/textAppearanceMedium"
34         android:textSize="25sp" />
35 
36     <Button
37         android:id="@+id/btnSearch"
38         android:layout_width="wrap_content"
39         android:layout_height="wrap_content"
40         android:layout_above="@+id/wvSearchResult"
41         android:layout_alignParentRight="true"
42         android:background="@drawable/ibsearchword"
43         android:onClick="searchWord" />
44 
45 </RelativeLayout>

2:MainActivity:

 1 package com.example.youdaodictionary;
 2 
 3 import android.app.Activity;
 4 import android.os.Bundle;
 5 import android.text.TextUtils;
 6 import android.view.Menu;
 7 import android.view.View;
 8 import android.webkit.WebView;
 9 import android.webkit.WebViewClient;
10 import android.widget.EditText;
11 import android.widget.Toast;
12 
13 public class MainActivity extends Activity {
14     private EditText etWord;
15     private WebView wvResult;
16 
17     @Override
18     protected void onCreate(Bundle savedInstanceState) {
19         super.onCreate(savedInstanceState);
20         setContentView(R.layout.activity_main);
21 
22         initViews();
23     }
24 
25     private void initViews() {
26         etWord = (EditText) findViewById(R.id.etWord);
27         wvResult = (WebView) findViewById(R.id.wvSearchResult);
28         wvResult.setWebViewClient(new WebViewClient() {
29             @Override
30             public boolean shouldOverrideUrlLoading(WebView view, String url) {
31                 view.loadUrl(url);
32                 return true;
33             }
34         });
35     }
36 
37     @Override
38     public boolean onCreateOptionsMenu(Menu menu) {
39         getMenuInflater().inflate(R.menu.main, menu);
40         return true;
41     }
42 
43     public void searchWord(View view) {
44         String word = etWord.getText().toString();
45         if (TextUtils.isEmpty(word)) {
46             Toast.makeText(this, "查询内容不能为空!", Toast.LENGTH_LONG).show();
47         } else {
48 
49             final String strUrl = "http://dict.youdao.com/m/search?keyfrom=dict.mindex&vendor=&q="
50                     + word;
51             wvResult.loadUrl(strUrl);
52         }
53     }
54 }

3:界面实现:

技术分享

 

   每个人的心里都有一个伟大的梦想,不用告诉别人,自己放在心里,默默的为之努力就好。

  有些路很远,走下去会很累,不走,会后悔。

技术分享

 

 

 

 

 

安卓--有道词典

标签:

原文地址:http://www.cnblogs.com/xuyinghui/p/4587099.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!