但不斷複製貼上顯得很慢,而且重覆次數太多,越多越疲倦,而且犯錯率越多越高,因此了解 Google 翻譯有否 API 能自動化這些沉悶的操作
Google 翻譯 API 的連結位置為 https://translate.google.com/translate_a/t
使用 GET 的 HTTP 請求
設定 UserAgent 標頭 ,標頭內容在測試上並沒有太大限制但必須提供,因此在下使用 UnknownTranslator/0.0.1 在測試
(閣下如果改良或開發其他借用 Google 翻譯 API 的功具,可以改寫 UserAgent 的內容)
並附上 URL 參數
- client 為 客戶端類型,固定使用 at ,但不清楚是甚麼
- ie 為 輸入編碼 (input encoding) ,建議使用 UTF-8
- oe 為 輸出編碼 (output encoding) ,建議使用 UTF-8
- sl 為 來源語言 (source language) ,設定有效、Google 支援的語言,若不確定需要翻譯的文字的甚麼語言,可以使用 auto
- tl 為 目標語言 (target language) ,設定有效、Google 支援的語言
- text 為 需要翻譯的文字
由於使用 URL 參數只接受部分 ASCII 字元,其餘字元都需要使用 URL 編碼才有效
如果使用 CURL 載入連結前,需要先將文字轉換成 URL 編碼
1 2 3 4 5 6 7 8 9 10 11 12 13 | urlencode(){ length= "${#1}" i= "0" while [ "${i}" -lt "${length}" ]; do c= "${1:$i:1}" printf "${c}" | \ xxd -p -c1 | \ while read x; do printf "%%%s" "${x}" done i=$(($i+1)) done } |
Terminal 輸入
1 2 3 4 | curl \ --request "GET" \ --header "User-Agent: UnknownTranslator/0.0.1" \ "https://translate.google.com/translate_a/t?client=at&ie=UTF-8&oe=UTF-8&sl=en-US&tl=zh-HK&text=" `urlencode "hello, world" ` |
翻譯成功,回傳 JSON 內容,大致如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | { "sentences" :[ { "trans" : "你好,世界" , "orig" : "hello, world" , "backend" :1 }, { "translit" : "Nǐ hǎo, shìjiè" } ], "src" : "en" , "confidence" :0.88929719, "ld_result" :{ "srclangs" :[ "en" ], "srclangs_confidences" :[ 0.88929719 ], "extended_srclangs" :[ "en" ] }, "query_inflections" :[ { "written_form" : "Hello World" , "features" :{ "number" :2 } }, { "written_form" : "Hello Worlds" , "features" :{ "number" :1 } } ] } |
這個屬性資料,就是翻譯文字的結果
如果閣下熟悉 python, php 等具備 JSON Parser 的的程式語言,可以使用它們拆解內容
但在下再懶多一點,使用 jq 這個能在 bash 環境下便可以直接執行的指令來拆解 JSON
使用 root 或 super user 在, Terminal 輸入
1 | sudo apt-get install jq |
或 按此安裝 jq
jq 網站 https://stedolan.github.io/jq 有更多詳細的使用說明及例子
假如閣下透過 CURL 的結果引導成檔案,例如 result.json ,可以輸入
1 2 3 4 | cat "result.json" | \ jq ".sentences" | \ jq ".[]" | \ jq -r ".trans" |
(沒有 trans 屬性的物件會傳回 null)
注意:
根據在下了解,伺服器通常都會設定 限制參數長度
如果翻譯的文字過長導致 Google 翻譯 API 不能接受請求,閣下便需要將文字內容合理地分段翻譯
在下亦編寫了可以很簡單地改動內容的腳本程式,可以直接將翻譯結果輸出,亦方便閣下使用及改良
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | method= "GET" userAgentName= "UnknownTranslator" userAgentVersion= "0.0.1" encoding= "UTF-8" sourceLanguage= "en-US" targetLanguage= "zh-HK" text= "hello, world" protocol= "https" domain= "translate.google.com" path= "/translate_a/t" curl \ --request "${method}" \ --header "User-Agent: ${userAgentName}/${userAgentVersion}" \ "${protocol}://${domain}${path}?client=at&ie=${encoding}&oe=${encoding}&sl=${sourceLanguage}&tl=${targetLanguage}&text=" `urlencode "${text}" ` | \ jq ".sentences" | jq ".[]" | jq -r ".trans" |
沒有留言 :
張貼留言