2019-07-22

Google 翻譯 API

最近經常需要編寫文章,但在下的語文能力不太好,因此經常借用 Google 翻譯將文件內容翻譯成英文 (當然還需要人手翻譯)
但不斷複製貼上顯得很慢,而且重覆次數太多,越多越疲倦,而且犯錯率越多越高,因此了解 Google 翻譯有否 API 能自動化這些沉悶的操作

Google 翻譯 API 的連結位置為 https://translate.google.com/translate_a/t
使用 GETHTTP 請求
設定 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"

沒有留言 :

張貼留言