博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
调用有道词典翻译api
阅读量:4334 次
发布时间:2019-06-07

本文共 6144 字,大约阅读时间需要 20 分钟。

自己英语不咋好,然后公司文档看不懂,word格式的还好,直接复制粘贴到google就ok了,可是excel文档都是一个单元格一个单元格的,一个一个复制太慢了,所以就想到了用代码调用api来实现翻译。

找度娘发现google的翻译api已经开始收费了,十分滴沮丧,找了半天发现有道词典还是免费的,欣喜!!不管好不好用,能用就行:

首先要有操作获取的接受数据的json jar包

1.创建连接的   TranslaterAPIConnection:

1 package org.lewe.lang.translate.connection; 2  3 import java.io.IOException; 4 import java.net.HttpURLConnection; 5 import java.net.InetSocketAddress; 6 import java.net.MalformedURLException; 7 import java.net.Proxy; 8 import java.net.URL; 9 10 import org.lewe.util.StringUtils;11 12 public class TranslaterAPIConnection {13 14     public static HttpURLConnection getHttpConnection(String urlString) {15         return getHttpConnection(urlString, "", 0);16     }17 18     public static HttpURLConnection getHttpConnection(String urlString,19             String proxyAddress, int proxyport) {20 21         HttpURLConnection con = null;22 23         try {24             if (!StringUtils.isNullOrEmpty(proxyAddress) && proxyport != -1) {25 26                 InetSocketAddress addr = new InetSocketAddress(proxyAddress,27                         proxyport);28 29                 // Socket 代理30                 // Proxy proxy = new Proxy(Proxy.Type.SOCKS, addr);31                 // http 代理32                 Proxy proxy = new Proxy(Proxy.Type.HTTP, addr);33 34                 con = (HttpURLConnection) new URL(urlString)35                         .openConnection(proxy);36 37             } else {38                 con = (HttpURLConnection) new URL(urlString).openConnection();39             }40 41         } catch (MalformedURLException e) {42             // TODO Auto-generated catch block43             e.printStackTrace();44         } catch (IOException e) {45             // TODO Auto-generated catch block46             e.printStackTrace();47         }48 49         return con;50 51     }52 53     public static boolean closeHttpConnection(HttpURLConnection con) {54         try {55             con.getInputStream().close();56             return true;57         } catch (IOException e) {58             // TODO Auto-generated catch block59             e.printStackTrace();60         }61         return false;62     }63 }

2.创建翻译器接口ITranslater和实现类YoudaoTranslater

1 package org.lewe.lang.translate;2 3 public interface ITranslater {4     public String translate(String text);5 }
package org.lewe.lang.translate.impl;import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.UnsupportedEncodingException;import java.net.HttpURLConnection;import java.net.URLEncoder;import org.json.simple.JSONObject;import org.json.simple.parser.JSONParser;import org.lewe.lang.translate.ITranslater;import org.lewe.lang.translate.connection.TranslaterAPIConnection;import org.lewe.util.CommonConstants;public class YoudaoTranslater implements ITranslater {    /**     * 有道数据接口 版本: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     */    public final static String URL_STRING = "http://fanyi.youdao.com/openapi.do?keyfrom=lewe518&key=70654389&type=data&doctype=json&version=1.1&q=";    /**     * 如果使用代理,可以定义代理地址     */    public final static String proxyAddress = "";    /**     * 如果使用代理,可以定义代理端口     */    public final static int proxyport = -1;    public String translate(String text) {        System.out.println("目标文字 : " + text);        String jsonStr = "";        HttpURLConnection httpURLConnection = null;        String YoudaoAPIURL = getAdressUrl(text);        httpURLConnection = TranslaterAPIConnection.getHttpConnection(                YoudaoAPIURL, proxyAddress, proxyport);        // 读取返回流数据        try {            BufferedReader br = new BufferedReader(new InputStreamReader(                    httpURLConnection.getInputStream(),                    CommonConstants.DEFAULT_ENCODING));            StringBuilder sb = new StringBuilder();            String str;            while ((str = br.readLine()) != null) {                sb.append(str);                sb.append('\n');            }            jsonStr = sb.toString();        } catch (Exception e) {            System.err.println("读取流数据异常");        } finally {            TranslaterAPIConnection.closeHttpConnection(httpURLConnection);        }        // 解析返回的Json数据        JSONObject jsonObj = null;        try {            jsonObj = (JSONObject) new JSONParser().parse(jsonStr);            if ("0".equals(jsonObj.get("errorCode").toString())) {                jsonStr = jsonObj.get("translation").toString();            }        } catch (Exception e) {            // TODO Auto-generated catch block            System.err.println(e.getMessage());        }        System.out.println("结果: " + jsonStr);        return jsonStr;    }    private static String getAdressUrl(String text) {        StringBuilder YoudaoAPIURL = new StringBuilder();        try {            YoudaoAPIURL.append(URL_STRING).append(                    URLEncoder.encode(text, CommonConstants.DEFAULT_ENCODING));        } catch (UnsupportedEncodingException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        return YoudaoAPIURL.toString();    }}

然后可以测试一下,只要调用translate方法,传入想翻译的词,就可以实现自动翻译,目前该有道词典的api不支持定制翻译,不能指定翻译的目标和结果语言,只能自动转换,如果是英文的就翻译成中文的,如果是中文则翻译成英文。

期待有道词典支持定制翻译!

 

3.操作excel文档的就省略了,不是本文的重点,主函数调用代码如下:

1 public class Main { 2  3     /** 4      * @param args 5      * @throws Exception 6      */ 7     public static void main(String[] args) throws Exception { 8         translateExcel(); 9     }10 11     /**12      * Translate an Excel document to Chinese13      */14     public static void translateExcel() throws Exception {15 16         POIExcelHandler handler = new POIExcelHandler(new YoudaoTranslater());17 18         // Copy the excel document19         FileUtils.copyExcel("D:\\1.xls", "D:\\2.xls");20 21         // Translate22         handler.translateExcel("D:\\2.xls");23     }24 }

首先把要翻译的excel文件copy出来一个,然后进行翻译,大功告成,很easy吧!

转载于:https://www.cnblogs.com/lewe/archive/2013/04/18/3028774.html

你可能感兴趣的文章
HDU5447 Good Numbers
查看>>
08.CXF发布WebService(Java项目)
查看>>
java-集合框架
查看>>
RTMP
查看>>
求一个数的整数次方
查看>>
点云PCL中小细节
查看>>
铁路信号基础
查看>>
RobotFramework自动化2-自定义关键字
查看>>
[置顶] 【cocos2d-x入门实战】微信飞机大战之三:飞机要起飞了
查看>>
BABOK - 需求分析(Requirements Analysis)概述
查看>>
第43条:掌握GCD及操作队列的使用时机
查看>>
Windows autoKeras的下载与安装连接
查看>>
CMU Bomblab 答案
查看>>
微信支付之异步通知签名错误
查看>>
2016 - 1 -17 GCD学习总结
查看>>
linux安装php-redis扩展(转)
查看>>
Vue集成微信开发趟坑:公众号以及JSSDK相关
查看>>
技术分析淘宝的超卖宝贝
查看>>
i++和++1
查看>>
react.js
查看>>