制作一个Java即时翻译器——网页抓取&调用百度翻译API

第一次在CSDN写博客,想着记录一下自己一些作业过程中的问题和心得,没想到要用Markdown语言写,说实话我还真没用过呢,还要边学边写。话不多说,进入正题。

1.引言

平时在上网浏览网站或者阅读一些英文文献的时候,遇到不明白意思的单词导致整句话不太理解时总得打开百度
然后搜索意思,频繁地打开翻译页面让整个过程显得很繁琐,或者分屏操作一边放文献一边放翻译的时候,文章或网站会被压缩,排版会有变化
两种方法都不够合适,所以我就想做一款即时翻译的软件,需要达到的功能有:

  • 常驻在屏幕最顶层,通过监听剪切板来获取复制的单词或长句,然后在软件页面自动进行翻译。同时有一些附加功能:支持中文与多门外语互译、监听剪切板或者根据自己输入的内容翻译等。
  • 加入记录单词功能,查询后可以添加单词,并提供复习回顾的页面。

2.具体实现思路

  1. 使用Transferable变量通过getSystemClipboard()函数来获取剪切板的内容getContent(),返回剪切板所得到的数据getTransferData()。
  2. 获取翻译的内容:
  • 第一种方式:到网页源代码里进行截取和回传。在百度首页查找“translate”单词,然后打开开发人员工具搜索“翻译”“转变”等几个意思,最后在标记里面发现网页显示的翻译都存在于这个标记里面。连续尝试了几个单词后发现都是在标签里,那么就可以确定这种方法的思路了。

首先明确是要去 http://www.baidu.com/s?wd= 这个网站找寻标签,那么就分别定义三个变量来代表网站、标签头和标签尾。然后定义一个HttpURLConnection对象来建立起连接,通过BufferedReader将获得的输入流数据进行整理,获取翻译内容放入字符串变量,作为函数的返回值来调用。

  • 第二种方式:使用百度翻译API。首先要去百度翻译http://api.fanyi.baidu.com 进行开发者申请,申请通过后会获得一个APP_ID和SECURITY_KEY,这是相当于后面要调用API的账号密码。然后下载网站底部的Java Demo,提取出HttpGet.java、MD5.java、TransApi.java三个文件,放入新建的一个package中。上述三个是百度官方写的调用API的方法。

HttpGet.java是建立起http连接的一个类,将输入的字符串进行URL编码,转换为%20形式,并且读取服务器的数据,进行翻译内容的获取。

MD5.java是百度官方为了调用的安全,使用该算法来生成一段字符串,该java文件负责生成该字符串。

TransApi.java用来发送所需要的总共六个字段。

  1. 接下来是具体将获取的文本添加到TextArea中。首先创建一个新线程来随时监听剪切板的文本,然后监听文本框使用addDocumentListener()来进行insertUpdate()操作。
  2. 然后是数据库文件的建立。在MySQL中新建一个数据库,新建一个word表,将页面记录的单词存入该表中,然后通过JTable和DefaultTableModel将记录的单词展示出来。

3.两种方式的对比

  • 通过获取网页源代码的方式的优点是完全免费,无任何次数限制。缺点是目前只能提供单个单词的翻译,长句中单词与单词间的空格在URL中无法识别;同时仅限于英语翻译中文。
  • 通过百度翻译API。优点是可以进行单词、长句的翻译,支持中文译成多种外语,也支持多种外语译成中文。缺点是百度规定一个月只给200万字符的免费额度,超出的部分按100万字符/49元收费。

4.源代码

源代码

参考资料:用Java做一个及时翻译工具

你可能感兴趣的:(Java,百度翻译API,翻译)