google API翻譯是收費的,但翻譯比較準確,正常google翻譯的收費是100萬個字符20美元。我們第一次使用,當然不想就開始付費,而是想先體驗一下,好在google也提供了免費試用的功能,會給新賬號300$的額度。
要使用google API翻譯,整個流程還挺長的。由于google的文檔對新手很不好友,所以在這個過程中我也走了不少彎路,現(xiàn)在總結(jié)一下并分享給大家,
其中關(guān)鍵的步驟是:
希望讓有需要的人少走點彎路。
一、申請google API
(一)進入申請頁面
點擊鏈接進行申請。
(二)申請API
可能是因為google在中國被墻的原因,國家那里找了半天找不到中國的選項,后來干脆用默認選項“美國”。
由于選的是美國,所以信用卡地址那里也只能填美國的,我隨便填了一下紐約大學的地址:70 Washington Square South ,New York, NY。
300$的額度,90天內(nèi)用完。
二、新建項目
按google的說法,要使用Google Cloud提供的服務(wù),您必須創(chuàng)建一個項目。
一個項目可以組織您所有的Google Cloud資源。 一個項目由一組協(xié)作者,已啟用的API(和其他資源),監(jiān)視工具,計費信息以及身份驗證和訪問控制組成。 您可以創(chuàng)建一個項目,也可以創(chuàng)建多個項目,然后使用它們在資源層次結(jié)構(gòu)中組織Google Cloud資源。 創(chuàng)建項目時,請記下項目ID。 您將需要此ID來進行API調(diào)用。
建議您為實驗,測試和生產(chǎn)創(chuàng)建單獨的項目。 創(chuàng)建項目后,記錄項目編號或ID。 調(diào)用Cloud Translation API時,必須提供項目編號(或ID)。
三、啟用記費功能
您必須啟用計費才能使用云翻譯。
如何確認你的項目已經(jīng)開啟了計費功能呢?
打開你的項目,點擊左邊導航欄的“結(jié)算”鏈接,如果看到下面的頁面,就表明你的項目已經(jīng)開啟了計費的功能。
四、開啟API
(一)生成API密鑰
進入你的項目里,點擊執(zhí)行“創(chuàng)建憑據(jù)->生成API密鑰”功能,就可以得到你的API密鑰.
(二)測試API密鑰
填上key進行測試,測試代碼如下:
import requests import csv import sys reload(sys) sys.setdefaultencoding('utf-8')#python處理字符流改成utf-8形式 def translate_text(target, content): language_type = "" url = "https://translation.googleapis.com/language/translate/v2" data = { 'key':"AI*******mpI", 'source': language_type, 'target': target, 'q': content, 'format': "text" } #headers = {'X-HTTP-Method-Override': 'GET'} #response = requests.post(url, data=data, headers=headers) response = requests.post(url, data) # print(response.json()) print(response) res = response.json() print(res["data"]["translations"][0]["translatedText"]) result = res["data"]["translations"][0]["translatedText"] print(result) return result if __name__ == '__main__': content = "Teknoloji haberleri ve ürün incelemeleri" target = 'zh-cn' translate_text(target,content)
(三)啟用翻譯API報以下錯誤:
{'error': {'code': 403, 'message': 'Cloud Translation API has not been used in project 288578xxxxxx before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/translate.googleapis.com/overview?project=288578xxxxxx then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.', 'errors': [{'message': 'Cloud Translation API has not been used in project 288578xxxxxx before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/translate.googleapis.com/overview?project=288578xxxxxx then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.', 'domain': 'usageLimits', 'reason': 'accessNotConfigured', 'extendedHelp': 'https://console.developers.google.com'}], 'status': 'PERMISSION_DENIED'}}
按上面的出錯提示,進入到這個頁面,點擊“啟用”翻譯API.
一些介紹:https://cloud.google.com/translate/docs/basic/quickstart?hl=zh_CN
(四)成果展示
再次運行上面的測試代碼,可以發(fā)現(xiàn)翻譯成功了。運行結(jié)果如下:
{'data': {'translations': [{'translatedText': '技術(shù)新聞和產(chǎn)品評論', 'detectedSourceLanguage': 'tr'}]}}
技術(shù)新聞和產(chǎn)品評論
參考:https://blog.csdn.net/javajiawei/article/details/90691108?spm=1001.2014.3001.5501
到了上面這一步就可以使用了,如果你只是進行簡單的翻譯,那么到上一步就已經(jīng)大功告成了!
不過我還有一個需求,就是可以實現(xiàn)對html代碼的翻譯,即保留html代碼,但是翻譯代碼中的內(nèi)容。所以后來又折騰客戶端庫。
五、進行配額管理
這一步是可選步驟,可以不做。
Cloud Translation具有配額管理系統(tǒng),可幫助您和Google管理該服務(wù)的使用情況。 默認情況下,每天可以發(fā)送的字符數(shù)沒有限制。 如果您有固定的預算,建議您監(jiān)控日常使用情況,并根據(jù)計劃支出調(diào)整配額。
六、設(shè)立身份驗證
如果您打算使用Cloud Translation API,則需要設(shè)置身份驗證。 任何使用該API的客戶端應(yīng)用程序都必須經(jīng)過身份驗證,并被授予對所請求資源的訪問權(quán)限。
其實官方也推薦使用客戶端庫來調(diào)用 Cloud Translation,因為它們可以更輕松地訪問 API
(一)獲得api json文件
1.點擊進入這個頁面
2.選擇一個項目
3.選擇“create service account”
4.建立賬號
輸入相關(guān)的信息,完成賬號的建立。
5.點擊左邊導航欄的“service account”,你會發(fā)現(xiàn)剛剛自己建立的賬號已經(jīng)出現(xiàn)在里面了,點擊這個賬號。
6.建立key
在出現(xiàn)的窗口中,點擊“key”,再點擊“add key-creat new key”
7.在出現(xiàn)的窗口中選擇"json"
點擊“創(chuàng)建”之后,會自動將一個json文件下載到你的電腦上,請保存好這個json文件,里面有你的key.
(二)添加系統(tǒng)變量
將上一步下載的json文件保存到你的電腦中的某一個文件夾下面,比如我就將它存在C:\google\這個文件夾下面。
然后添加環(huán)境變量。
其中變量名為:GOOGLE_APPLICATION_CREDENTIALS
變量的值就是你的json文件路徑,比如:"C:\Users\username\Downloads\你的key.json"
(三)使用google translate的客戶端
1.先安裝
pip install google-cloud-translate==2.0.1 pip install --upgrade google-cloud-storage
2.運行測試代碼
def implicit(): from google.cloud import storage # If you don't specify credentials when constructing the client, the # client library will look for credentials in the environment. storage_client = storage.Client() # Make an authenticated API request buckets = list(storage_client.list_buckets()) print(buckets)
只要運行上面的代碼不報錯,那就表示你的google授權(quán)成功,以后可以通過from google.cloud import translate_v3beta1 來使用google翻譯了。
示例代碼:
def translate_text_with_model(target, text, model="nmt"): """Translates text into the target language. Make sure your project is allowlisted. Target must be an ISO 639-1 language code. See https://g.co/cloud/translate/v2/translate-reference#supported_languages """ import six from google.cloud import translate_v2 as translate translate_client = translate.Client() if isinstance(text, six.binary_type): text = text.decode("utf-8") # Text can also be a sequence of strings, in which case this method # will return a sequence of results for each text. result = translate_client.translate(text, target_language=target, model=model) print(u"Text: {}".format(result["input"])) print(u"Translation: {}".format(result["translatedText"])) print(u"Detected source language: {}".format(result["detectedSourceLanguage"])) translate_text_with_model('zh-cn',"i love you")
輸出結(jié)果:
Text: i love you
Translation: 我愛你
Detected source language: en
參考:https://cloud.google.com/docs/authentication/getting-started
https://cloud.google.com/translate/docs/setup
參考:https://cloud.google.com/translate/markup
附錄:
帶詞匯表(glossaries)的翻譯
google還支持帶glossaries的翻譯,詞匯表是一種定制詞典,Cloud Translation API使用該詞典來一致地翻譯客戶的特定于域的術(shù)語。 這通常涉及指定如何轉(zhuǎn)換命名實體。
詞匯表用例可能涉及:
詞匯表中的術(shù)語可以是單個標記(單詞)或短短語(通常少于五個單詞)。 當前,每個項目的詞匯表數(shù)量上限為1000。
使用詞匯表的主要步驟是:
1.創(chuàng)建詞匯表文件(比如文本文件,每一行都是“account\賬戶”這樣的形式。
2.使用Cloud Translation API創(chuàng)建詞匯表資源
3.指定請求翻譯時要使用的詞匯表
一個項目可以有多個詞匯表。 您可以獲得可用詞匯表的列表,并且可以刪除不再需要的詞匯表。
參考:https://cloud.google.com/translate/docs/advanced/glossary#format-glossary
參考:https://cloud.google.com/translate/docs/setup
小疑問:
Q:請問是否需要FQ才能使用google API 翻譯?
A:不需要。
七、翻譯效果
在對代碼進行翻譯的時候,對code、a標簽內(nèi)的代碼可以保留不翻譯。
但是對于blockquote標簽內(nèi)的代碼,還是翻譯了,所以還是不符合我的要求。
解決方案:將blockquote替換為code。
八、如何在linux上運行
加入以下代碼,并將json放到相同目錄就可以了。
1 | import os |
2 | os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = 'credentials.json' |
九、其他問題
(一)Updated on Sep-21
寫這文章的時候是3月份,半年過去了,要使用google 翻譯的時候,發(fā)錯它又不能用了。
運行implicit函數(shù)的時候,并不報錯,不過運行最終的代碼報以下錯誤:
File "C:\Users\Kevin\Anaconda3\lib\site-packages\google\auth\transport\request
s.py", line 189, in __call__
six.raise_from(new_exc, caught_exc)
File "", line 3, in raise_from
google.auth.exceptions.TransportError: HTTPSConnectionPool(host='oauth2.googleap
is.com', port=443): Max retries exceeded with url: /token (Caused by NewConnecti
onError(': Failed to establish a new connection: [WinError 10060] A connection attempt
failed because the connected party did not properly respond after a period of ti
me, or established connection failed because connected host has failed to respon
d'))
有人在這里問:https://pythonrepo.com/repo/googleapis-google-auth-library-python-python-implementing-authentications-schemes,可是看了之后還是沒有找到解決方案。
參考:https://www.youtube.com/watch?v=ocUZgSUO-4I,重新操作了一次,還是不行。
在西數(shù)服務(wù)器上運行,還是不行。
在國外服務(wù)器上運行,結(jié)果報以下的錯誤:
google.api_core.exceptions.Forbidden: 403 POST https://translation.googleapis.com/language/translate/v2?prettyPrint=false: User Rate Limit Exceeded
打開上面的網(wǎng)址,得到:
{
"error": {
"code": 403,
"message": "The request is missing a valid API key.",
"errors": [
{
"message": "The request is missing a valid API key.",
"domain": "global",
"reason": "forbidden"
}
],
"status": "PERMISSION_DENIED"
}
}
然后我進入到gcp console,搜索"translate",然后點那個translate模塊,提示我激活我的賬戶,點"active",然后google 翻譯就可以在國外服務(wù)器上用了。
可是本地還是不行,報之前同樣的錯誤,應(yīng)該是富墻的原因。
(二)Sep-19-2022
運行的時候報錯:
google.api_core.exceptions.BadRequest: 400 POST https://translation.googleapis.com/language/translate/v2?prettyPrint=false: Required Text
訪問報錯中出現(xiàn)的網(wǎng)站,同樣是顯示api key的問題:
然后登陸:https://console.cloud.google.com/apis/credentials?project=stately-furnace-307600
發(fā)現(xiàn)我的API key前面有一個感嘆號,顯示:
This API key is unrestricted. To prevent unauthorized use and quota theft, restrict your key to limit how it can be used.
工作日 8:30-12:00 14:30-18:00
周六及部分節(jié)假日提供值班服務(wù)