但不斷複製貼上顯得很慢,而且重覆次數太多,越多越疲倦,而且犯錯率越多越高,因此了解 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 編碼
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 }在下比較懶惰,即使是可接受的 ASCII 字元都轉換成 URL 編碼
Terminal 輸入
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 內容,大致如下
{ "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 } } ] }可以看到 sentences 陣列 中保存著 有 trans 屬性的物件
這個屬性資料,就是翻譯文字的結果
如果閣下熟悉 python, php 等具備 JSON Parser 的的程式語言,可以使用它們拆解內容
但在下再懶多一點,使用 jq 這個能在 bash 環境下便可以直接執行的指令來拆解 JSON
使用 root 或 super user 在, Terminal 輸入
sudo apt-get install jq來安裝 jq
或 按此安裝 jq
jq 網站 https://stedolan.github.io/jq 有更多詳細的使用說明及例子
假如閣下透過 CURL 的結果引導成檔案,例如 result.json ,可以輸入
cat "result.json" | \ jq ".sentences" | \ jq ".[]" | \ jq -r ".trans"便可以將翻譯內容拆解出來
(沒有 trans 屬性的物件會傳回 null)
注意:
根據在下了解,伺服器通常都會設定 限制參數長度
如果翻譯的文字過長導致 Google 翻譯 API 不能接受請求,閣下便需要將文字內容合理地分段翻譯
在下亦編寫了可以很簡單地改動內容的腳本程式,可以直接將翻譯結果輸出,亦方便閣下使用及改良
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"
沒有留言 :
張貼留言