制作一个Java即时翻译器——网页抓取调用百度翻译API
生活随笔
收集整理的這篇文章主要介紹了
制作一个Java即时翻译器——网页抓取调用百度翻译API
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
第一次在CSDN寫博客,想著記錄一下自己一些作業過程中的問題和心得,沒想到要用Markdown語言寫,說實話我還真沒用過呢,還要邊學邊寫。話不多說,進入正題。
1.引言
平時在上網瀏覽網站或者閱讀一些英文文獻的時候,遇到不明白意思的單詞導致整句話不太理解時總得打開百度
然后搜索意思,頻繁地打開翻譯頁面讓整個過程顯得很繁瑣,或者分屏操作一邊放文獻一邊放翻譯的時候,文章或網站會被壓縮,排版會有變化
兩種方法都不夠合適,所以我就想做一款即時翻譯的軟件,需要達到的功能有:
- 常駐在屏幕最頂層,通過監聽剪切板來獲取復制的單詞或長句,然后在軟件頁面自動進行翻譯。同時有一些附加功能:支持中文與多門外語互譯、監聽剪切板或者根據自己輸入的內容翻譯等。
- 加入記錄單詞功能,查詢后可以添加單詞,并提供復習回顧的頁面。
2.具體實現思路
- 使用Transferable變量通過getSystemClipboard()函數來獲取剪切板的內容getContent(),返回剪切板所得到的數據getTransferData()。
- 獲取翻譯的內容:
- 第一種方式:到網頁源代碼里進行截取和回傳。在百度首頁查找“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用來發送所需要的總共六個字段。
- 接下來是具體將獲取的文本添加到TextArea中。首先創建一個新線程來隨時監聽剪切板的文本,然后監聽文本框使用addDocumentListener()來進行insertUpdate()操作。
- 然后是數據庫文件的建立。在MySQL中新建一個數據庫,新建一個word表,將頁面記錄的單詞存入該表中,然后通過JTable和DefaultTableModel將記錄的單詞展示出來。
3.兩種方式的對比
- 通過獲取網頁源代碼的方式的優點是完全免費,無任何次數限制。缺點是目前只能提供單個單詞的翻譯,長句中單詞與單詞間的空格在URL中無法識別;同時僅限于英語翻譯中文。
- 通過百度翻譯API。優點是可以進行單詞、長句的翻譯,支持中文譯成多種外語,也支持多種外語譯成中文。缺點是百度規定一個月只給200萬字符的免費額度,超出的部分按100萬字符/49元收費。
4.源代碼
源代碼
參考資料:用Java做一個及時翻譯工具
總結
以上是生活随笔為你收集整理的制作一个Java即时翻译器——网页抓取调用百度翻译API的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【BZOJ3684】大朋友和多叉树【生成
- 下一篇: IPv4 和 IPv6 报文格式详解