ext.translate.Translate.java Source code

Java tutorial

Introduction

Here is the source code for ext.translate.Translate.java

Source

/*
 * Copyright (c) 2013, Helome and/or its affiliates. All rights reserved.
 * Helome PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 *
 * Created on 2014529
 */
package ext.translate;

import java.io.UnsupportedEncodingException;
import java.util.Arrays;
import java.util.List;

import org.apache.commons.lang3.StringUtils;

import com.fasterxml.jackson.databind.JsonNode;

import play.Logger;
import play.Logger.ALogger;
import play.libs.WS;
import play.libs.F.Function;

/**
 * @ClassName: translate
 * @Description: 
 * @date 2014529 ?9:56:15
 * @author RenYouchao
 * 
 */
public class Translate {

    private static ALogger LOGGER = Logger.of(Translate.class);

    private static String CLIENT_ID_BAIDU = "dELNc28FKzVHFgR9dGz2r8tZ";

    private static String BAIDU_API = "http://openapi.baidu.com/public/2.0/bmt/translate";

    private static String YOUDAO_API = "http://fanyi.youdao.com/openapi.do";

    private static String YOUDAO_KEY_FROM = "helome";

    private static String YOUDAO_KEY = "1220932392";

    private String from = "auto";

    private String to = "auto";

    private String q;

    private List<String> qs;

    /**
     * ??
     * 
     * @param q
     */
    public Translate(String q) {
        super();
        this.q = q;
        if (StringUtils.isNotBlank(this.q)) {
            String[] qsArr = this.q.split("\\n");
            this.qs = Arrays.asList(qsArr);
        }
    }

    private String translateByBaiDu() {
        StringBuffer postsb = new StringBuffer();
        postsb.append("client_id=").append(CLIENT_ID_BAIDU).append("&from=").append(from).append("&to=").append(to)
                .append("&q=").append(q);
        return WS.url(BAIDU_API).post(postsb.toString()).map(new Function<WS.Response, String>() {
            public String apply(WS.Response response) throws UnsupportedEncodingException {
                return response.getBody();
            }
        }).get(20000);
    }

    private TranslateVO translateJsonYouDao() {
        TranslateVO tv = new TranslateVO();
        for (String s : qs) {
            String responseJson = WS.url(YOUDAO_API).setQueryParameter("keyfrom", YOUDAO_KEY_FROM)
                    .setQueryParameter("key", YOUDAO_KEY).setQueryParameter("type", "data")
                    .setQueryParameter("doctype", "json").setQueryParameter("version", "1.1")
                    .setQueryParameter("q", s).get().get(20000).getBody();
            LOGGER.debug(responseJson);
            JsonNode jsonNode = play.libs.Json.parse(responseJson);
            if (jsonNode.findPath("errorCode") != null
                    && StringUtils.isNotBlank(jsonNode.findPath("errorCode").asText())
                    && jsonNode.findPath("errorCode").asText().equals("0")) {
                SrcDst srcdst = new SrcDst();
                if (jsonNode.findValue("translation").elements().hasNext())
                    srcdst.dst = jsonNode.findValue("translation").elements().next().asText();
                srcdst.src = jsonNode.findValue("query").asText();
                tv.results.add(srcdst);
            } else {
                tv.errorCode = "888";
                tv.errorMsg = "??";
            }
        }
        return tv;
    }

    public TranslateVO translateAdapt() {
        TranslateVO tlv = this.translateJsonBaidu();
        if (StringUtils.isNotBlank(tlv.errorCode)) {
            tlv = this.translateJsonYouDao();
        }
        return tlv;
    }

    public TranslateVO translateJsonBaidu() {
        String responseJson = this.translateByBaiDu();
        LOGGER.debug(responseJson);
        JsonNode jsonNode = play.libs.Json.parse(responseJson);
        if (jsonNode.findPath("error_code") != null
                && StringUtils.isNotBlank(jsonNode.findPath("error_code").asText())) {
            TranslateVO tv = new TranslateVO();
            tv.errorCode = jsonNode.findPath("error_code").asText();
            tv.errorMsg = jsonNode.findPath("error_msg").asText();
            return tv;
        } else {
            TranslateVO tv = new TranslateVO();
            List<JsonNode> jns = jsonNode.findValues("trans_result");
            tv.from = jsonNode.findPath("from").asText();
            tv.to = jsonNode.findPath("to").asText();
            for (JsonNode jn : jns) {
                SrcDst srcdst = new SrcDst();
                srcdst.dst = jn.findValue("dst").asText();
                srcdst.src = jn.findValue("src").asText();
                tv.results.add(srcdst);
            }
            return tv;
        }
    }

    public static void main(String[] args) {
        Translate translate = new Translate("");
        System.out.println(translate.translateAdapt());
    }

}