本功能原为第三届字节跳动青训营中的go语言案例实践,这里用java语言进行实现
1、功能展示
在控制台输入英文单词,可以返回其翻译
2、功能实现
这里采用彩云小译作为数据源。
原理:在网站中输入单词进行翻译,会向其后台发送http请求,并以json形式返回翻译,只需要在终端模拟这一过程即可。
2.1、发送请求
public static String send(String word) throws Exception {
URL url = new URL("https://api.interpreter.caiyunai.com/v1/dict");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("authority", "api.interpreter.caiyunai.com");
httpConn.setRequestProperty("accept", "application/json, text/plain, */*");
httpConn.setRequestProperty("accept-language", "zh-CN,zh;q=0.9");
httpConn.setRequestProperty("app-name", "xy");
httpConn.setRequestProperty("content-type", "application/json;charset=UTF-8");
httpConn.setRequestProperty("origin", "https://fanyi.caiyunapp.com");
httpConn.setRequestProperty("os-type", "web");
httpConn.setRequestProperty("referer", "https://fanyi.caiyunapp.com/");
httpConn.setRequestProperty("sec-ch-ua", "" Not A;Brand";v="99", "Chromium";v="102", "Google Chrome";v="102"");
httpConn.setRequestProperty("sec-ch-ua-mobile", "?0");
httpConn.setRequestProperty("sec-ch-ua-platform", ""Windows"");
httpConn.setRequestProperty("sec-fetch-dest", "empty");
httpConn.setRequestProperty("sec-fetch-mode", "cors");
httpConn.setRequestProperty("sec-fetch-site", "cross-site");
httpConn.setRequestProperty("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36");
httpConn.setRequestProperty("x-authorization", "token:qgemv4jr1y38jyq6vhvi");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{"trans_type":"en2zh","source":""+word+""}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\A");
String response = s.hasNext() ? s.next() : "";
return response;
}
这里可以通过转化工具curlconverter快速将网站的请求转化为java代码
2.2、将JSON转化为实体类
这里利用GSON将JSON字符串转化为具体的实体类对象
public static JsonRootBean parseJson(String response) {
Gson gson = new Gson();
JsonRootBean jsonRootBean = gson.fromJson(response, JsonRootBean.class);
return jsonRootBean;
}
其中实体类对象可以通过转化工具json.cn来快速生成
需要指出的是,在转化过程中可能会出现不兼容的现象,如"en-us"字段在java中是不符合命名规范的,需要将其修改为"en_us",并且在字段上加上注解@SerializedName。
@SerializedName("en-us")
private String en_us;
2.3、显示翻译
根据生成的实体类可以根据需求给出翻译
public static void showMsg(JsonRootBean jsonRootBean) {
try {
System.out.println("原单词:"+jsonRootBean.getDictionary().getEntry());
System.out.println("音标:"+jsonRootBean.getDictionary().getProns().getEn()+"(英),"
+jsonRootBean.getDictionary().getProns().getEn_us()+"(美)");
System.out.println("含义:");
for (String explanation : jsonRootBean.getDictionary().getExplanations()) {
System.out.println(explanation);
}
} catch (Exception e) {
System.out.println("不存在该单词");
}
}
一个简单的通过控制台实现翻译的功能就完成了