• 调用有道词典翻译api


    自己英语不咋好,然后公司文档看不懂,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 block
    43             e.printStackTrace();
    44         } catch (IOException e) {
    45             // TODO Auto-generated catch block
    46             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 block
    59             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 Chinese
    13      */
    14     public static void translateExcel() throws Exception {
    15 
    16         POIExcelHandler handler = new POIExcelHandler(new YoudaoTranslater());
    17 
    18         // Copy the excel document
    19         FileUtils.copyExcel("D:\\1.xls", "D:\\2.xls");
    20 
    21         // Translate
    22         handler.translateExcel("D:\\2.xls");
    23     }
    24 }

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

  • 相关阅读:
    java 获取未知枚举的集合(get unknown enum list)
    解析Disruptor:写入ring buffer
    解析Disruptor:拼接依赖
    Python3.x在linux下print中文问题
    Python3源码方式编译
    正则表达式学习
    PHP传值和传引用、传地址的区别
    php中关于sizeof()函数
    [原]JointJS流程图
    [原]OpeanLayers3 For ArcGIS MapServer
  • 原文地址:https://www.cnblogs.com/lewe/p/3028774.html
Copyright © 2020-2023  润新知