[041] 微信公众帐号开发教程第17篇

内容概要

本篇文章为大家演示如何在微信公众帐号上实现“智能翻译”,本例中翻译功能是通过调用“百度翻译API”实现的。智能翻译是指用户任意输入想要翻译的内容(单词或句子),系统能自动识别用户采用的语言,并将其翻译为其他语言,目前支持的翻译方向:中->英、英->中和日->中。下面我们来看看智能翻译最终做出来的效果:

我们通过输入关键词“翻译”或者点击菜单“翻译”能够看到该功能的使用帮助,然后输入“翻译+内容”就能对内容进行翻译了。

百度翻译API介绍

点击查看百度翻译API使用说明,其实这份文档已经说的很详细了,笔者只是将我们调用该接口时最关心的内容摘取出来,主要如下:

1)通过发送HTTP GET请求调用百度翻译API。

2)百度翻译API请求地址:

3)调用API需要传递from、to、client_id和q四个参数,描述如下:

keyvalue描述

from源语言语种:语言代码或auto仅支持特定的语言组合,下面会单独进行说明

to目标语言语种:语言代码或auto仅支持特定的语言组合,,下面会单独进行说明

client_id开发者在百度连接平台上注册得到的授权API key请阅读如何获取api key

q待翻译内容该字段必须为UTF-8编码,并且以GET方式调用API时,需要进行urlencode编码。

在调用接口前,我们要先获取到api key。获取方式比较简单,根据提示一步步操作就可以,笔者就不再赘述了。4)对于智能翻译,参数from和to的传都是auto。4)参数q的编码方式为UTF-8,传递之前要进行urlencode编码。

5)接口返回结果示例如下:

{"from":"en","to":"zh","trans_result":[{"src":"today","dst":"\u4eca\u5929"}]}返回结果里的中文是unicode编码,需要通过json_decode进行转换,转换后的示例如下:{"from": "en","to": "zh","trans_result": [{"src": "today","dst": "今天"},{"src": "tomorrow","dst": "明天"}]}

JSON处理工具包Gson介绍

Gson是Google提供的用于在Java对象和JSON数据之间进行转换的Java类库。通过使用Gson类库,我们可以将JSON字符串转成Java对象,反之亦然。下载地址:https://code.google.com/p/google-gson/downloads/list,Gson的使用比较简单,直接调用它的方法toJson()或fromJson()就能完成相应的转换,但需要注意的是:在使用Gson将json字符串转换成Java对象之前,需要先创建好与目标Java对象。读者可以在维基百科上学习它的使用示例。

代码实现

1)创建与百度翻译API返回的JSON相对应的Java类

import java.util.List;/** * 调用百度翻译api查询结果 * * @author liufeng * @date 2013-10-21 */public class TranslateResult {// 实际采用的源语言private String from;// 实际采用的目标语言private String to;// 结果体private List<ResultPair> trans_result;public String getFrom() {return from;}public void setFrom(String from) {this.from = from;}public String getTo() {return to;}public void setTo(String to) {this.to = to;}public List<ResultPair> getTrans_result() {return trans_result;}public void setTrans_result(List<ResultPair> trans_result) {this.trans_result = trans_result;}}注意:这里的类名可以任意取,但是成员变量的名字应于翻译API返回的JSON字符串中的属性名保持一致,否则将JSON转换成TranslateResult对象时会报错。

TranslateResult类中的trans_result属性是一个ResultPair集合,该类的代码如下:

/** * 结果对 * * @author liufeng * @date 2013-10-21 */public class ResultPair {// 原文private String src;// 译文private String dst;public String getSrc() {return src;}public void setSrc(String src) {this.src = src;}public String getDst() {return dst;}public void setDst(String dst) {this.dst = dst;}}说明:这两个类的封装是Gson类库所要求的,如果读者不是用Gson解析json字符串,而是用JSON-lib,就没有必要封装这两个类。

2)接口调用

import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.UnsupportedEncodingException;import java.net.HttpURLConnection;import java.net.URL;import com.google.gson.Gson;/** * * @author liufeng * @date 2013-10-21 */public class BaiduTranslateService {/** * 发起http请求获取返回结果 * * @param requestUrl 请求地址 * @return */public static String httpRequest(String requestUrl) {StringBuffer buffer = new StringBuffer();try {URL url = new URL(requestUrl);HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection();httpUrlConn.setDoOutput(false);httpUrlConn.setDoInput(true);httpUrlConn.setUseCaches(false);httpUrlConn.setRequestMethod("GET");httpUrlConn.connect();// 将返回的输入流转换成字符串InputStream inputStream = httpUrlConn.getInputStream();InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");BufferedReader bufferedReader = new BufferedReader(inputStreamReader);String str = null;while ((str = bufferedReader.readLine()) != null) {buffer.append(str);}bufferedReader.close();inputStreamReader.close();// 释放资源inputStream.close();inputStream = null;httpUrlConn.disconnect();} catch (Exception e) {}return buffer.toString();}/** * utf编码 * * @param source * @return */public static String urlEncodeUTF8(String source) {String result = source;try {result = java.net.URLEncoder.encode(source, "utf-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}return result;}/** * 翻译(中->英 英->中 日->中 ) * * @param source * @return */public static String translate(String source) {String dst = null;// 组装查询地址String requestUrl = "?client_id=AAAAAAAAAAAAAAAAAAAAAAAA&q={keyWord}&from=auto&to=auto";// 对参数q的值进行urlEncode utf-8编码requestUrl = requestUrl.replace("{keyWord}", urlEncodeUTF8(source));// 查询并解析结果try {// 查询并获取返回结果String json = httpRequest(requestUrl);// 通过Gson工具将json转换成TranslateResult对象TranslateResult translateResult = new Gson().fromJson(json, TranslateResult.class);// 取出translateResult中的译文dst = translateResult.getTrans_result().get(0).getDst();} catch (Exception e) {e.printStackTrace();}if (null == dst)dst = "翻译系统异常,请稍候尝试!";return dst;}public static void main(String[] args) {// 翻译结果:The network really powerfulSystem.out.println(translate("网络真强大"));}}代码解读:1)第21-53行封装了一个http请求方法httpRequest(),相信读过之前教程的读者已经很熟悉了。

2)第61-69行封装了一个urlEncodeUTF8()方法,用于对url中的参数进行UTF-8编码。

3)第81行代码中的client_id需要替换成自己申请的api key。

5)第88行代码就是调用百度翻译API。

人的一生要疯狂一次,无论是为一个人,一段情,一段旅途,或一个梦想。

[041] 微信公众帐号开发教程第17篇

相关文章:

你感兴趣的文章:

标签云: