Android进阶2之有道词典开发

本博文只是实现有道词典的功能,并着重界面。

首先,你需要获取有道开发平台的API key。点击打开链接 申请一个吧。



利用数据接口获取数据:

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

版本:1.1,请求方式:get,编码方式:utf-8

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

参数说明:

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

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

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

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

errorCode:

 0 - 正常

 20 - 要翻译的文本过长

 30 - 无法进行有效的翻译

 40 - 不支持的语言类型

 50 - 无效的key

返回的样本:

json数据格式举例

http://fanyi.youdao.com/openapi.do?keyfrom=<keyfrom>&key=<key>&type=data&doctype=json&version=1.1&q=翻译
{
    "errorCode":0
    "query":"翻译",
    "translation":["translation"], // 有道翻译
    "basic":{ // 有道词典-基本词典
        "phonetic":"fān yì",
        "explains":[
            "translate",
            "interpret"
        ]
    },
    "web":[ // 有道词典-网络释义
        {
            "key":"翻译",
            "value":["translator","translation","translate","Interpreter"]
        },
        {...}
    ]
}

xml数据格式举例

http://fanyi.youdao.com/openapi.do?keyfrom=<keyfrom>&key=<key>&type=data&doctype=xml&version=1.1&q=这里是有道翻译API
<?xml version="1.0" encoding="UTF-8"?>
<youdao-fanyi>
    <errorCode>0</errorCode>
    <!-- 有道翻译 -->
    <query><![CDATA[这里是有道翻译API]]></query>
    <translation>
        <paragraph><![CDATA[Here is the youdao translation API]]></paragraph>
    </translation>
</youdao-fanyi>

jsonp数据格式举例

http://fanyi.youdao.com/openapi.do?keyfrom=<keyfrom>&key=<key>&type=data&doctype=jsonp&callback=show&version=1.1&q=API
show({
    "errorCode":0
    "query":"API",
    "translation":["API"], // 有道翻译
    "basic":{ // 有道词典-基本词典
        "explains":[
            "abbr. 应用程序界面(Application Program Interface);..."
        ]
    },
    "web":[ // 有道词典-网络释义
        {
            "key":"API",
            "value":["应用程序接口(Application Programming Interface)","应用编程接口","应用程序编程接口","美国石油协会"]
        },
        {...}
    ]
});

具体实现:

package xiaosi.youdao;

import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONObject;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class YoudaoActivity extends Activity
{
	private EditText	edit				= null;
	private Button		search				= null;
	private TextView	text				= null;
	private String		YouDaoBaseUrl		= "http://fanyi.youdao.com/openapi.do";
	private String		YouDaoKeyFrom		= "MyLifes";
	private String		YouDaoKey			= "你申请的API Key";
	private String		YouDaoType			= "data";
	private String		YouDaoDoctype		= "json";
	private String		YouDaoVersion		= "1.1";
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		init();
	}

	private void init()
	{
		edit = (EditText) findViewById(R.id.edit);
		search = (Button) findViewById(R.id.search);
		search.setOnClickListener(new searchListener());
		text = (TextView) findViewById(R.id.text);
	}

	private class searchListener implements OnClickListener
	{
		@Override
		public void onClick(View v)
		{
			String YouDaoSearchContent = edit.getText().toString().trim();
			String YouDaoUrl = YouDaoBaseUrl+"?keyfrom=" + YouDaoKeyFrom + "&key=" + YouDaoKey + "&type=" + YouDaoType + "&doctype="
					+ YouDaoDoctype + "&type=" + YouDaoType + "&version=" + YouDaoVersion + "&q=" + YouDaoSearchContent;
			try
			{
				AnalyzingOfJson(YouDaoUrl);
			}
			catch (Exception e)
			{
				e.printStackTrace();
			}
		}
	}

	private void AnalyzingOfJson(String url) throws Exception
	{
		// 第一步,创建HttpGet对象
		HttpGet httpGet = new HttpGet(url);
		// 第二步,使用execute方法发送HTTP GET请求,并返回HttpResponse对象
		HttpResponse httpResponse = new DefaultHttpClient().execute(httpGet);
		if (httpResponse.getStatusLine().getStatusCode() == 200)
		{
			// 第三步,使用getEntity方法活得返回结果
			String result = EntityUtils.toString(httpResponse.getEntity());
			System.out.println("result:" + result);
			JSONArray jsonArray = new JSONArray("[" + result + "]");
			String message = null;
			for (int i = 0; i < jsonArray.length(); i++)
			{
				JSONObject jsonObject = jsonArray.getJSONObject(i);
				if (jsonObject != null)
				{
					String errorCode = jsonObject.getString("errorCode");
					if (errorCode.equals("20"))
					{
						Toast.makeText(getApplicationContext(), "要翻译的文本过长", Toast.LENGTH_SHORT);
					}
					else if (errorCode.equals("30 "))
					{
						Toast.makeText(getApplicationContext(), "无法进行有效的翻译", Toast.LENGTH_SHORT);
					}
					else if (errorCode.equals("40"))
					{
						Toast.makeText(getApplicationContext(), "不支持的语言类型", Toast.LENGTH_SHORT);
					}
					else if (errorCode.equals("50"))
					{
						Toast.makeText(getApplicationContext(), "无效的key", Toast.LENGTH_SHORT);
					}
					else
					{
						// 要翻译的内容
						String query = jsonObject.getString("query");
						message = query;
						// 翻译内容
						String translation = jsonObject.getString("translation");
						message += "\t" + translation;
						// 有道词典-基本词典
						if (jsonObject.has("basic"))
						{
							JSONObject basic = jsonObject.getJSONObject("basic");
							if (basic.has("phonetic"))
							{
								String phonetic = basic.getString("phonetic");
								message += "\n\t" + phonetic;
							}
							if (basic.has("phonetic"))
							{
								String explains = basic.getString("explains");
								message += "\n\t" + explains;
							}
						}
						// 有道词典-网络释义
						if (jsonObject.has("web"))
						{
							String web = jsonObject.getString("web");
							JSONArray webString = new JSONArray("[" + web + "]");
							message += "\n网络释义:";
							JSONArray webArray = webString.getJSONArray(0);
							int count = 0;
							while(!webArray.isNull(count)){
								
								if (webArray.getJSONObject(count).has("key"))
								{
									String key = webArray.getJSONObject(count).getString("key");
									message += "\n\t<"+(count+1)+">" + key;
								}
								if (webArray.getJSONObject(count).has("value"))
								{
									String value = webArray.getJSONObject(count).getString("value");
									message += "\n\t   " + value;
								}
								count++;
							}
						}
					}
				}
			}
			text.setText(message);
		}
		else
		{
			Toast.makeText(getApplicationContext(), "提取异常", Toast.LENGTH_SHORT);
		}
	}
}

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" 
    android:background="@drawable/a">

    <EditText
        android:id="@+id/edit"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="输入你要查询的内容......" />

    <Button
        android:id="@+id/search"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="查询" />

    <ScrollView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:scrollbars="none" >

        <TextView
            android:id="@+id/text"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" 
            android:textColor="#000000"/>
    </ScrollView>

</LinearLayout>






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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值